CuttlefishAPIHelpers.swift   [plain text]


import Foundation

extension ViewKey {
    static func convert(ckksKey: CKKSKeychainBackedKey) -> ViewKey {
        let kc: ViewKeyClass
        switch ckksKey.keyclass {
        case SecCKKSKeyClassTLK:
            kc = .tlk
        case SecCKKSKeyClassA:
            kc = .classA
        case SecCKKSKeyClassC:
            kc = .classC
        default:
            kc = .tlk
        }

        return ViewKey.with {
            $0.uuid = ckksKey.uuid
            $0.parentkeyUuid = ckksKey.parentKeyUUID
            $0.keyclass = kc
            $0.wrappedkeyBase64 = ckksKey.wrappedkey.base64WrappedKey()
            $0.uploadOsVersion = SecCKKSHostOSVersion()
        }
    }
}

// TODO: We need to support key rolling as well...
extension ViewKeys {
    static func convert(ckksKeySet: CKKSKeychainBackedKeySet) -> ViewKeys {
        return ViewKeys.with {
            $0.view = ckksKeySet.tlk.zoneID.zoneName
            $0.newTlk = ViewKey.convert(ckksKey: ckksKeySet.tlk)
            $0.newClassA = ViewKey.convert(ckksKey: ckksKeySet.classA)
            $0.newClassC = ViewKey.convert(ckksKey: ckksKeySet.classC)
        }
    }
}

extension TLKShare {
    static func convert(ckksTLKShare: CKKSTLKShare) -> TLKShare {
        return TLKShare.with {
            $0.view = ckksTLKShare.zoneID.zoneName
            $0.curve = Int64(ckksTLKShare.curve.rawValue)
            $0.epoch = Int64(ckksTLKShare.epoch)
            $0.keyUuid = ckksTLKShare.tlkUUID
            $0.poisoned = Int64(ckksTLKShare.poisoned)
            $0.receiver = ckksTLKShare.receiverPeerID
            $0.receiverPublicEncryptionKey = ckksTLKShare.receiverPublicEncryptionKeySPKI.base64EncodedString()
            $0.sender = ckksTLKShare.senderPeerID
            $0.signature = ckksTLKShare.signature?.base64EncodedString() ?? ""
            $0.version = Int64(ckksTLKShare.version.rawValue)
            $0.wrappedkey = ckksTLKShare.wrappedTLK?.base64EncodedString() ?? ""
        }
    }
}