SecKeyRef SOSPeerInfoCopyPubKey(SOSPeerInfoRef peer) { CFDataRef pubKeyBytes = CFDictionaryGetValue(peer->description, sPublicKeyKey); if (pubKeyBytes == NULL) return NULL; CFAllocatorRef allocator = CFGetAllocator(peer); SecKeyRef pubKey = SecKeyCreateFromPublicData(allocator, kSecECDSAAlgorithmID, pubKeyBytes); return pubKey; }
SecKeyRef SecKeyCreatePublicFromPrivate(SecKeyRef privateKey) { CFDataRef serializedPublic = NULL; SecKeyRef result = NULL; require_noerr_quiet(SecKeyCopyPublicBytes(privateKey, &serializedPublic), fail); require_quiet(serializedPublic, fail); result = SecKeyCreateFromPublicData(kCFAllocatorDefault, SecKeyGetAlgorithmID(privateKey), serializedPublic); fail: CFReleaseSafe(serializedPublic); return result; }