Mercurial > trustbridge > nss-cmake-static
diff nss/lib/certhigh/certvfypkixprint.c @ 0:1e5118fa0cb1
This is NSS with a Cmake Buildsyste
To compile a static NSS library for Windows we've used the
Chromium-NSS fork and added a Cmake buildsystem to compile
it statically for Windows. See README.chromium for chromium
changes and README.trustbridge for our modifications.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 28 Jul 2014 10:47:06 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nss/lib/certhigh/certvfypkixprint.c Mon Jul 28 10:47:06 2014 +0200 @@ -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 */