Skip to content

Instantly share code, notes, and snippets.

@edisonlo
Created October 31, 2017 09:27
Show Gist options
  • Save edisonlo/60832f9451e72f5da3fae865d518b479 to your computer and use it in GitHub Desktop.
Save edisonlo/60832f9451e72f5da3fae865d518b479 to your computer and use it in GitHub Desktop.
Obj-c getPublicKeyFromCertificate
- (SecKeyRef)getPublicKeyFromCertificate:(NSData *)data
{
//create certificate.
CFDataRef dataRef=CFDataCreate(kCFAllocatorDefault, [data bytes], (CFIndex)[data length]);
SecCertificateRef certiRef=SecCertificateCreateWithData(kCFAllocatorDefault, dataRef);
(CFRelease(dataRef));
//evaluate certificate.
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &certiRef, 1, NULL);
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
(CFRelease(certs));
SecTrustResultType trustResult;
SecTrustEvaluate(trust, &trustResult);
//get publickey
SecKeyRef oPublicKey = SecTrustCopyPublicKey(trust);
(CFRelease(trust));
(CFRelease(policy));
(CFRelease(certiRef));
return oPublicKey;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment