void doit (void) { int ret; gnutls_datum_t pem_cert = { (unsigned char*)pem, sizeof (pem) }; gnutls_x509_crt_t cert; gnutls_x509_dn_t xdn; ret = gnutls_global_init (); if (ret < 0) fail ("init %d\n", ret); ret = gnutls_x509_crt_init (&cert); if (ret < 0) fail ("crt_init %d\n", ret); ret = gnutls_x509_crt_import (cert, &pem_cert, GNUTLS_X509_FMT_PEM); if (ret < 0) fail ("crt_import %d\n", ret); ret = gnutls_x509_crt_get_issuer (cert, &xdn); if (ret < 0) fail ("get_issuer %d\n", ret); if (debug) { printf ("Issuer:\n"); print_dn (xdn); } ret = gnutls_x509_crt_get_subject (cert, &xdn); if (ret < 0) fail ("get_subject %d\n", ret); if (debug) { printf ("Subject:\n"); print_dn (xdn); } if (debug) success ("done\n"); gnutls_x509_crt_deinit (cert); gnutls_global_deinit (); }
static void print_pkcs7_info(gnutls_pkcs7_signature_info_st * info, gnutls_buffer_st * str, gnutls_certificate_print_formats_t format) { unsigned i; char *oid; gnutls_datum_t data; char prefix[128]; char s[42]; size_t max; int ret; if (info->issuer_dn.size > 0) print_dn(str, "\tSigner's issuer DN", &info->issuer_dn); print_raw(str, "\tSigner's serial", &info->signer_serial); print_raw(str, "\tSigner's issuer key ID", &info->issuer_keyid); if (info->signing_time != -1) { struct tm t; if (gmtime_r(&info->signing_time, &t) == NULL) { addf(str, "error: gmtime_r (%ld)\n", (unsigned long)info->signing_time); } else { max = sizeof(s); if (strftime(s, max, "%a %b %d %H:%M:%S UTC %Y", &t) == 0) { addf(str, "error: strftime (%ld)\n", (unsigned long)info->signing_time); } else { addf(str, "\tSigning time: %s\n", s); } } } addf(str, "\tSignature Algorithm: %s\n", gnutls_sign_get_name(info->algo)); if (format == GNUTLS_CRT_PRINT_FULL) { if (info->signed_attrs) { for (i = 0;; i++) { ret = gnutls_pkcs7_get_attr(info->signed_attrs, i, &oid, &data, 0); if (ret < 0) break; if (i == 0) addf(str, "\tSigned Attributes:\n"); snprintf(prefix, sizeof(prefix), "\t\t%s", oid); print_raw(str, prefix, &data); gnutls_free(data.data); } } if (info->unsigned_attrs) { for (i = 0;; i++) { ret = gnutls_pkcs7_get_attr(info->unsigned_attrs, i, &oid, &data, 0); if (ret < 0) break; if (i == 0) addf(str, "\tUnsigned Attributes:\n"); snprintf(prefix, sizeof(prefix), "\t\t%s", oid); print_raw(str, prefix, &data); gnutls_free(data.data); } } } adds(str, "\n"); }
void doit(void) { int ret; gnutls_datum_t pem_cert = { (unsigned char *) pem, sizeof(pem) }; gnutls_x509_crt_t cert; gnutls_datum_t strdn; gnutls_x509_dn_t xdn; ret = global_init(); if (ret < 0) fail("init %d\n", ret); ret = gnutls_x509_crt_init(&cert); if (ret < 0) fail("crt_init %d\n", ret); ret = gnutls_x509_crt_import(cert, &pem_cert, GNUTLS_X509_FMT_PEM); if (ret < 0) fail("crt_import %d\n", ret); ret = gnutls_x509_crt_get_issuer(cert, &xdn); if (ret < 0) fail("get_issuer %d\n", ret); if (debug) { printf("Issuer:\n"); print_dn(xdn); } ret = gnutls_x509_crt_get_subject(cert, &xdn); if (ret < 0) fail("get_subject %d\n", ret); /* test the original function behavior */ ret = gnutls_x509_dn_get_str(xdn, &strdn); if (ret < 0) fail("gnutls_x509_dn_get_str %d\n", ret); if (strdn.size != 44 || strcmp((char*)strdn.data, "CN=CAcert WoT User,[email protected]") != 0) { fail("gnutls_x509_dn_get_str string comparison failed: '%s'/%d\n", strdn.data, strdn.size); } gnutls_free(strdn.data); /* test the new function behavior */ ret = gnutls_x509_dn_get_str2(xdn, &strdn, 0); if (ret < 0) fail("gnutls_x509_dn_get_str2 %d\n", ret); if (strdn.size != 44 || strcmp((char*)strdn.data, "[email protected],CN=CAcert WoT User") != 0) { fail("gnutls_x509_dn_get_str2 string comparison failed: '%s'/%d\n", strdn.data, strdn.size); } gnutls_free(strdn.data); /* test the new/compat function behavior */ ret = gnutls_x509_dn_get_str2(xdn, &strdn, GNUTLS_X509_DN_FLAG_COMPAT); if (ret < 0) fail("gnutls_x509_dn_get_str2 %d\n", ret); if (strdn.size != 44 || strcmp((char*)strdn.data, "CN=CAcert WoT User,[email protected]") != 0) { fail("gnutls_x509_dn_get_str2 string comparison failed: '%s'/%d\n", strdn.data, strdn.size); } gnutls_free(strdn.data); if (debug) { printf("Subject:\n"); print_dn(xdn); } if (debug) success("done\n"); gnutls_x509_crt_deinit(cert); gnutls_global_deinit(); }