OctagonPeerKeys.swift [plain text]
import Foundation
enum OctagonSelfPeerKeysError: Error {
case noPublicKeys
}
class OctagonSelfPeerKeys: NSObject, CKKSSelfPeer {
var encryptionKey: _SFECKeyPair
var signingKey: _SFECKeyPair
var peerID: String
// Here for conformance with CKKSPeer
var publicEncryptionKey: _SFECPublicKey?
var publicSigningKey: _SFECPublicKey?
var encryptionVerificationKey: _SFECPublicKey
var signingVerificationKey: _SFECPublicKey
func matchesPeer(_ peer: CKKSPeer) -> Bool {
return false
}
init(peerID: String, signingKey: _SFECKeyPair, encryptionKey: _SFECKeyPair) throws {
self.peerID = peerID
self.signingKey = signingKey
self.encryptionKey = encryptionKey
self.publicEncryptionKey = encryptionKey.publicKey as? _SFECPublicKey
self.publicSigningKey = signingKey.publicKey as? _SFECPublicKey
guard let encryptionVerificationKey = self.publicEncryptionKey,
let signingVerificationKey = self.publicSigningKey else {
throw OctagonSelfPeerKeysError.noPublicKeys
}
self.encryptionVerificationKey = encryptionVerificationKey
self.signingVerificationKey = signingVerificationKey
}
override var description: String {
return "<OctagonSelfPeerKeys: \(self.peerID)>"
}
}
extension TPPeerPermanentInfo: CKKSPeer {
public var publicEncryptionKey: _SFECPublicKey? {
return self.encryptionPubKey as? _SFECPublicKey
}
public var publicSigningKey: _SFECPublicKey? {
return self.signingPubKey as? _SFECPublicKey
}
public func matchesPeer(_ peer: CKKSPeer) -> Bool {
return self.peerID == peer.peerID
}
}