+ plog(LLV_ERROR, LOCATION, NULL, "Error evaluating certificate.\n");
+
+ switch (evalResult) {
+ case kSecTrustResultInvalid:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultInvalid.\n");
+ break;
+ case kSecTrustResultProceed:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultProceed.\n");
+ break;
+ case kSecTrustResultConfirm:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultConfirm.\n");
+ break;
+ case kSecTrustResultDeny:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultDeny.\n");
+ break;
+ case kSecTrustResultUnspecified:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultUnspecified.\n");
+ break;
+ case kSecTrustResultRecoverableTrustFailure:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultRecoverableTrustFailure.\n");
+ break;
+ case kSecTrustResultFatalTrustFailure:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultFatalTrustFailure.\n");
+ break;
+ case kSecTrustResultOtherError:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result = kSecTrustResultOtherError.\n");
+ break;
+ default:
+ plog(LLV_DEBUG, LOCATION, NULL, "eval result unknown: value = %d.\n", (int)evalResult);
+ break;
+ }
+
+
+#if TARGET_OS_EMBEDDED
+ errorStrings = SecTrustCopyProperties(trustRef);
+ if (errorStrings) {
+
+ CFDictionaryRef dict;
+ CFStringRef val;
+ const char *str;
+ CFIndex count, maxcount = CFArrayGetCount(errorStrings);
+
+ plog(LLV_ERROR, LOCATION, NULL, "---------------Returned error strings: ---------------.\n");
+ for (count = 0; count < maxcount; count++) {
+ dict = CFArrayGetValueAtIndex(errorStrings, count);
+ if (dict && (CFGetTypeID(dict) == CFDictionaryGetTypeID())) {
+ val = CFDictionaryGetValue(dict, kSecPropertyKeyType);
+ if (val && (CFGetTypeID(val) == CFStringGetTypeID())) {
+ str = CFStringGetCStringPtr(val, kCFStringEncodingMacRoman);
+ if (str)
+ plog(LLV_ERROR, LOCATION, NULL, "type = %s.\n", str);
+ }
+ val = CFDictionaryGetValue(dict, kSecPropertyKeyValue);
+ if (val && (CFGetTypeID(val) == CFStringGetTypeID())) {
+ str = CFStringGetCStringPtr(val, kCFStringEncodingMacRoman);
+ if (str)
+ plog(LLV_ERROR, LOCATION, NULL, "value = %s.\n", str);
+ }
+ }
+ }
+ plog(LLV_ERROR, LOCATION, NULL, "-----------------------------------------------------.\n");
+ CFRelease(errorStrings);
+ }
+
+#else
+ SecTrustGetResult(trustRef, &evalResult, &certChain, &statusChain);
+ plog(LLV_ERROR, LOCATION, NULL, "Cert status bits = 0x%x.\n", statusChain->StatusBits);
+ plog(LLV_ERROR, LOCATION, NULL, "Cert status NumStatusCodes = 0x%x.\n", statusChain->NumStatusCodes);
+ {
+ int i;
+ for (i = 0; i < statusChain->NumStatusCodes; i++)
+ plog(LLV_ERROR, LOCATION, NULL, "Cert status code i = 0x%x %d.\n", *(statusChain->StatusCodes + i), *(statusChain->StatusCodes + i));
+ }
+ plog(LLV_ERROR, LOCATION, NULL, "Cert status Index = %d.\n", statusChain->Index);
+ CFRelease(certChain);
+#endif
+