From 3ecd967b2a9e23403935e2bc932597f7e03e7f24 Mon Sep 17 00:00:00 2001 From: Kai Engert Date: Thu, 28 Feb 2013 12:44:50 +0100 Subject: Bug 845556, reorganize NSS directory layout, moving files, very large changeset! r=wtc --- lib/certhigh/certvfypkixprint.c | 206 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 lib/certhigh/certvfypkixprint.c (limited to 'lib/certhigh/certvfypkixprint.c') diff --git a/lib/certhigh/certvfypkixprint.c b/lib/certhigh/certvfypkixprint.c new file mode 100644 index 000000000..d08d1be65 --- /dev/null +++ b/lib/certhigh/certvfypkixprint.c @@ -0,0 +1,206 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* + * nss_pkix_proxy.h + * + * PKIX - NSS proxy functions + * + */ +#include "cert.h" +#include "pkix_pl_common.h" + +#ifdef DEBUG + +char * +pkix_Error2ASCII(PKIX_Error *error, void *plContext) +{ + PKIX_UInt32 length; + char *asciiString = NULL; + PKIX_PL_String *pkixString = NULL; + PKIX_Error *errorResult = NULL; + + errorResult = PKIX_PL_Object_ToString + ((PKIX_PL_Object*)error, &pkixString, plContext); + if (errorResult) goto cleanup; + + errorResult = PKIX_PL_String_GetEncoded + (pkixString, + PKIX_ESCASCII, + (void **)&asciiString, + &length, + plContext); + +cleanup: + + if (pkixString){ + if (PKIX_PL_Object_DecRef + ((PKIX_PL_Object*)pkixString, plContext)){ + return (NULL); + } + } + + if (errorResult){ + PKIX_PL_Object_DecRef((PKIX_PL_Object*)errorResult, plContext); + return (NULL); + } + + return (asciiString); +} + +char * +pkix_Object2ASCII(PKIX_PL_Object *object) +{ + PKIX_UInt32 length; + char *asciiString = NULL; + PKIX_PL_String *pkixString = NULL; + PKIX_Error *errorResult = NULL; + + errorResult = PKIX_PL_Object_ToString + (object, &pkixString, NULL); + if (errorResult) goto cleanup; + + errorResult = PKIX_PL_String_GetEncoded + (pkixString, PKIX_ESCASCII, (void **)&asciiString, &length, NULL); + +cleanup: + + if (pkixString){ + if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)pkixString, NULL)){ + return (NULL); + } + } + + if (errorResult){ + return (NULL); + } + + return (asciiString); +} + +char * +pkix_Cert2ASCII(PKIX_PL_Cert *cert) +{ + PKIX_PL_X500Name *issuer = NULL; + void *issuerAscii = NULL; + PKIX_PL_X500Name *subject = NULL; + void *subjectAscii = NULL; + void *asciiString = NULL; + PKIX_Error *errorResult = NULL; + PKIX_UInt32 numChars; + PKIX_UInt32 refCount = 0; + + /* Issuer */ + errorResult = PKIX_PL_Cert_GetIssuer(cert, &issuer, NULL); + if (errorResult) goto cleanup; + + issuerAscii = pkix_Object2ASCII((PKIX_PL_Object*)issuer); + + /* Subject */ + errorResult = PKIX_PL_Cert_GetSubject(cert, &subject, NULL); + if (errorResult) goto cleanup; + + if (subject){ + subjectAscii = pkix_Object2ASCII((PKIX_PL_Object*)subject); + } + +/* errorResult = PKIX_PL_Object_GetRefCount((PKIX_PL_Object*)cert, &refCount, NULL); */ + if (errorResult) goto cleanup; + + errorResult = PKIX_PL_Malloc(200, &asciiString, NULL); + if (errorResult) goto cleanup; + + numChars = + PR_snprintf + (asciiString, + 200, + "Ref: %d Subject=%s\nIssuer=%s\n", + refCount, + subjectAscii, + issuerAscii); + + if (!numChars) goto cleanup; + +cleanup: + + if (issuer){ + if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)issuer, NULL)){ + return (NULL); + } + } + + if (subject){ + if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)subject, NULL)){ + return (NULL); + } + } + + if (PKIX_PL_Free((PKIX_PL_Object*)issuerAscii, NULL)){ + return (NULL); + } + + if (PKIX_PL_Free((PKIX_PL_Object*)subjectAscii, NULL)){ + return (NULL); + } + + if (errorResult){ + return (NULL); + } + + return (asciiString); +} + +PKIX_Error * +cert_PrintCertChain( + PKIX_List *pkixCertChain, + void *plContext) +{ + PKIX_PL_Cert *cert = NULL; + PKIX_UInt32 numCerts = 0, i = 0; + char *asciiResult = NULL; + + PKIX_ENTER(CERTVFYPKIX, "cert_PrintCertChain"); + + PKIX_CHECK( + PKIX_List_GetLength(pkixCertChain, &numCerts, plContext), + PKIX_LISTGETLENGTHFAILED); + + fprintf(stderr, "\n"); + + for (i = 0; i < numCerts; i++){ + PKIX_CHECK + (PKIX_List_GetItem + (pkixCertChain, i, (PKIX_PL_Object**)&cert, plContext), + PKIX_LISTGETITEMFAILED); + + asciiResult = pkix_Cert2ASCII(cert); + + fprintf(stderr, "CERT[%d]:\n%s\n", i, asciiResult); + + PKIX_PL_Free(asciiResult, plContext); + asciiResult = NULL; + + PKIX_DECREF(cert); + } + +cleanup: + PKIX_DECREF(cert); + + PKIX_RETURN(CERTVFYPKIX); +} + +void +cert_PrintCert( + PKIX_PL_Cert *pkixCert, + void *plContext) +{ + char *asciiResult = NULL; + + asciiResult = pkix_Cert2ASCII(pkixCert); + + fprintf(stderr, "CERT[0]:\n%s\n", asciiResult); + + PKIX_PL_Free(asciiResult, plContext); +} + +#endif /* DEBUG */ -- cgit v1.2.1