Skip to content

Commit

Permalink
add support for SecCertificateCopyKey, which replaces deprecated SecC…
Browse files Browse the repository at this point in the history
…ertificateCopyPublicKey since MacOS 10.14 (#63)

Co-authored-by: Aaron Bassett <[email protected]>
  • Loading branch information
magicrobotmonkey and Aaron Bassett committed Oct 1, 2022
1 parent fe8c0de commit c9d7f08
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 3 deletions.
1 change: 1 addition & 0 deletions oscrypto/_mac/_security_cffi.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
SecTransformRef SecSignTransformCreate(SecKeyRef key, CFErrorRef *error);
SecCertificateRef SecCertificateCreateWithData(CFAllocatorRef allocator, CFDataRef data);
OSStatus SecCertificateCopyPublicKey(SecCertificateRef certificate, SecKeyRef *key);
SecKeyRef SecCertificateCopyKey(SecCertificateRef certificate);
CFStringRef SecCopyErrorMessageString(OSStatus status, void *reserved);
OSStatus SecTrustCopyAnchorCertificates(CFArrayRef *anchors);
CFDataRef SecCertificateCopyData(SecCertificateRef certificate);
Expand Down
5 changes: 5 additions & 0 deletions oscrypto/_mac/_security_ctypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,11 @@ class SecItemImportExportKeyParameters(Structure):
]
Security.SecCertificateCreateWithData.restype = SecCertificateRef

Security.SecCertificateCopyKey.argtypes = [
SecCertificateRef,
]
Security.SecCertificateCopyKey.restype = SecKeyRef

Security.SecCertificateCopyPublicKey.argtypes = [
SecCertificateRef,
POINTER(SecKeyRef)
Expand Down
9 changes: 6 additions & 3 deletions oscrypto/_mac/asymmetric.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,9 +261,12 @@ def public_key(self):
sec_cert_ref = self.sec_certificate_ref

sec_public_key_ref_pointer = new(Security, 'SecKeyRef *')
res = Security.SecCertificateCopyPublicKey(sec_cert_ref, sec_public_key_ref_pointer)
handle_sec_error(res)
sec_public_key_ref = unwrap(sec_public_key_ref_pointer)
if osx_version_info >= (10, 14):
sec_public_key_ref = Security.SecCertificateCopyKey(sec_cert_ref)
else:
res = Security.SecCertificateCopyPublicKey(sec_cert_ref, sec_public_key_ref_pointer)
handle_sec_error(res)
sec_public_key_ref = unwrap(sec_public_key_ref_pointer)
self._public_key = PublicKey(sec_public_key_ref, self.asn1['tbs_certificate']['subject_public_key_info'])

return self._public_key
Expand Down

0 comments on commit c9d7f08

Please sign in to comment.