X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/e0e0d90ebff497686991a933ae2f7db24e7d8e0f..07691282a056c4efea71e1e505527601e8cc166b:/OSX/libsecurity_keychain/regressions/si-20-sectrust-provisioning.c diff --git a/OSX/libsecurity_keychain/regressions/si-20-sectrust-provisioning.c b/OSX/libsecurity_keychain/regressions/si-20-sectrust-provisioning.c index 11c6fdf2..3793fa6f 100644 --- a/OSX/libsecurity_keychain/regressions/si-20-sectrust-provisioning.c +++ b/OSX/libsecurity_keychain/regressions/si-20-sectrust-provisioning.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Apple Inc. All Rights Reserved. + * Copyright (c) 2015-2017 Apple Inc. All Rights Reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -199,6 +199,164 @@ static unsigned char c1[1063]={ }; +static CFStringRef copyIssuerCN(SecCertificateRef certificate) +{ + if (!certificate || + CFGetTypeID(certificate) !=SecCertificateGetTypeID()) { + return NULL; + } + + CFStringRef issuerCN = NULL; // do not release + CFDictionaryRef issuerDict = NULL; // do not release + CFArrayRef issuerArray = NULL; // do not release + CFDictionaryRef issuerInfo = NULL; // do not release + CFErrorRef error = NULL; // do not release + + CFMutableArrayRef certificateKeys = NULL; // must release + CFDictionaryRef certificateDict = NULL; // must release + + certificateKeys = CFArrayCreateMutable(kCFAllocatorDefault, + 1, + &kCFTypeArrayCallBacks); + if (!certificateKeys) { + goto finish; + } + + CFArrayAppendValue(certificateKeys, kSecOIDX509V1IssuerName); + + certificateDict = SecCertificateCopyValues(certificate, + certificateKeys, + &error); + + if (error != errSecSuccess || + !certificateDict || + CFGetTypeID(certificateDict) != CFDictionaryGetTypeID()) { + goto finish; + } + + issuerDict = (CFDictionaryRef) CFDictionaryGetValue(certificateDict, + kSecOIDX509V1IssuerName); + if (!issuerDict || + CFGetTypeID(issuerDict) != CFDictionaryGetTypeID()) { + goto finish; + } + + issuerArray = (CFArrayRef) CFDictionaryGetValue(issuerDict, + kSecPropertyKeyValue); + if (!issuerArray || + CFGetTypeID(issuerArray) != CFArrayGetTypeID()) { + goto finish; + } + + for (int index=0; index