}
CFDataRef SOSPeerInfoCopyEncodedData(SOSPeerInfoRef peer, CFAllocatorRef allocator, CFErrorRef *error) {
- size_t size = SOSPeerInfoGetDEREncodedSize(peer, error);
- if (size == 0) return NULL;
-
- uint8_t buffer[size];
- uint8_t* start = SOSPeerInfoEncodeToDER(peer, error, buffer, buffer + sizeof(buffer));
- CFDataRef result = CFDataCreate(kCFAllocatorDefault, start, size);
- return result;
+ return CFDataCreateWithDER(kCFAllocatorDefault, SOSPeerInfoGetDEREncodedSize(peer, error), ^uint8_t*(size_t size, uint8_t *buffer) {
+ return SOSPeerInfoEncodeToDER(peer, error, buffer, (uint8_t *) buffer + size);
+ });
}
pi->gestalt = gestalt;
CFRetain(pi->gestalt);
- pubKey = SOSPeerInfoCopyPubKey(pi);
+ pubKey = SOSPeerInfoCopyPubKey(pi, error);
require_quiet(pubKey, fail);
pi->id = SOSCopyIDOfKey(pubKey, error);