+/* Apple Worldwide Developer Relations Certificate Authority subject name.
+ * This is a DER sequence with the leading tag and length bytes removed,
+ * to match what tbsCert.issuer contains.
+ */
+static const unsigned char Apple_WWDR_CA_Subject_Name[]={
+ 0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,
+ 0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x0A,0x0C,0x0A,0x41,0x70,0x70,0x6C,0x65,
+ 0x20,0x49,0x6E,0x63,0x2E,0x31,0x2C,0x30,0x2A,0x06,0x03,0x55,0x04,0x0B,0x0C,0x23,
+ 0x41,0x70,0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C,0x64,0x77,0x69,0x64,0x65,0x20,
+ 0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20,0x52,0x65,0x6C,0x61,0x74,0x69,
+ 0x6F,0x6E,0x73,0x31,0x44,0x30,0x42,0x06,0x03,0x55,0x04,0x03,0x0C,0x3B,0x41,0x70,
+ 0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C,0x64,0x77,0x69,0x64,0x65,0x20,0x44,0x65,
+ 0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20,0x52,0x65,0x6C,0x61,0x74,0x69,0x6F,0x6E,
+ 0x73,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,
+ 0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79
+};
+
+static void checkForMissingRevocationInfo(SecCertificateRef certificate) {
+ if (!certificate ||
+ certificate->_crlDistributionPoints ||
+ certificate->_ocspResponders) {
+ /* We already have an OCSP or CRL URI (or no cert) */
+ return;
+ }
+ /* Specify an appropriate OCSP responder if we recognize the issuer. */
+ CFURLRef url = NULL;
+ if (sizeof(Apple_WWDR_CA_Subject_Name) == certificate->_issuer.length &&
+ !memcmp(certificate->_issuer.data, Apple_WWDR_CA_Subject_Name,
+ sizeof(Apple_WWDR_CA_Subject_Name))) {
+ const char *WWDR_OCSP_URI = "http://ocsp.apple.com/ocsp-wwdr01";
+ url = CFURLCreateWithBytes(kCFAllocatorDefault,
+ (const UInt8*)WWDR_OCSP_URI, strlen(WWDR_OCSP_URI),
+ kCFStringEncodingASCII, NULL);
+ }
+ if (url) {
+ CFMutableArrayRef *urls = &certificate->_ocspResponders;
+ *urls = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
+ CFArrayAppendValue(*urls, url);
+ CFRelease(url);
+ }
+}
+