void print_cert(SecCertificateRef cert, bool verbose) {
// TODO: merge these when all SecCertificate APIs are present on both iOS and OS X
#if TARGET_OS_IOS
    CFArrayRef plist;
    if (verbose)
        plist = SecCertificateCopyProperties(cert);
    else {
        CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
        plist = SecCertificateCopySummaryProperties(cert, now);
    }

    CFStringRef subject = SecCertificateCopySubjectString(cert);
    if (subject) {
        print_line(subject);
        CFRelease(subject);
    } else {
        print_line(CFSTR("no subject"));
    }

    print_plist(plist);
    CFRelease(plist);
#else
    CFStringRef certName = NULL;
    OSStatus status = SecCertificateInferLabel(cert, &certName);
    if (certName) {
        print_line(certName);
        CFRelease(certName);
    }
    else {
        fprintf(stdout, "ERROR: unable to read certificate name\n");
    }
#endif
}
static void print_cert(SecCertificateRef cert, bool verbose) {
    CFArrayRef plist;
    if (verbose)
        plist = SecCertificateCopyProperties(cert);
    else {
        CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
        plist = SecCertificateCopySummaryProperties(cert, now);
    }

    CFStringRef subject = SecCertificateCopySubjectString(cert);
    if (subject) {
        print_line(subject);
        CFRelease(subject);
    } else {
        print_line(CFSTR("no subject"));
    }

    print_plist(plist);
    CFRelease(plist);
}