michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: /* michael@0: * nss_pkix_proxy.h michael@0: * michael@0: * PKIX - NSS proxy functions michael@0: * michael@0: */ michael@0: #include "cert.h" michael@0: #include "pkix_pl_common.h" michael@0: michael@0: #ifdef DEBUG michael@0: michael@0: char * michael@0: pkix_Error2ASCII(PKIX_Error *error, void *plContext) michael@0: { michael@0: PKIX_UInt32 length; michael@0: char *asciiString = NULL; michael@0: PKIX_PL_String *pkixString = NULL; michael@0: PKIX_Error *errorResult = NULL; michael@0: michael@0: errorResult = PKIX_PL_Object_ToString michael@0: ((PKIX_PL_Object*)error, &pkixString, plContext); michael@0: if (errorResult) goto cleanup; michael@0: michael@0: errorResult = PKIX_PL_String_GetEncoded michael@0: (pkixString, michael@0: PKIX_ESCASCII, michael@0: (void **)&asciiString, michael@0: &length, michael@0: plContext); michael@0: michael@0: cleanup: michael@0: michael@0: if (pkixString){ michael@0: if (PKIX_PL_Object_DecRef michael@0: ((PKIX_PL_Object*)pkixString, plContext)){ michael@0: return (NULL); michael@0: } michael@0: } michael@0: michael@0: if (errorResult){ michael@0: PKIX_PL_Object_DecRef((PKIX_PL_Object*)errorResult, plContext); michael@0: return (NULL); michael@0: } michael@0: michael@0: return (asciiString); michael@0: } michael@0: michael@0: char * michael@0: pkix_Object2ASCII(PKIX_PL_Object *object) michael@0: { michael@0: PKIX_UInt32 length; michael@0: char *asciiString = NULL; michael@0: PKIX_PL_String *pkixString = NULL; michael@0: PKIX_Error *errorResult = NULL; michael@0: michael@0: errorResult = PKIX_PL_Object_ToString michael@0: (object, &pkixString, NULL); michael@0: if (errorResult) goto cleanup; michael@0: michael@0: errorResult = PKIX_PL_String_GetEncoded michael@0: (pkixString, PKIX_ESCASCII, (void **)&asciiString, &length, NULL); michael@0: michael@0: cleanup: michael@0: michael@0: if (pkixString){ michael@0: if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)pkixString, NULL)){ michael@0: return (NULL); michael@0: } michael@0: } michael@0: michael@0: if (errorResult){ michael@0: return (NULL); michael@0: } michael@0: michael@0: return (asciiString); michael@0: } michael@0: michael@0: char * michael@0: pkix_Cert2ASCII(PKIX_PL_Cert *cert) michael@0: { michael@0: PKIX_PL_X500Name *issuer = NULL; michael@0: void *issuerAscii = NULL; michael@0: PKIX_PL_X500Name *subject = NULL; michael@0: void *subjectAscii = NULL; michael@0: void *asciiString = NULL; michael@0: PKIX_Error *errorResult = NULL; michael@0: PKIX_UInt32 numChars; michael@0: PKIX_UInt32 refCount = 0; michael@0: michael@0: /* Issuer */ michael@0: errorResult = PKIX_PL_Cert_GetIssuer(cert, &issuer, NULL); michael@0: if (errorResult) goto cleanup; michael@0: michael@0: issuerAscii = pkix_Object2ASCII((PKIX_PL_Object*)issuer); michael@0: michael@0: /* Subject */ michael@0: errorResult = PKIX_PL_Cert_GetSubject(cert, &subject, NULL); michael@0: if (errorResult) goto cleanup; michael@0: michael@0: if (subject){ michael@0: subjectAscii = pkix_Object2ASCII((PKIX_PL_Object*)subject); michael@0: } michael@0: michael@0: /* errorResult = PKIX_PL_Object_GetRefCount((PKIX_PL_Object*)cert, &refCount, NULL); */ michael@0: if (errorResult) goto cleanup; michael@0: michael@0: errorResult = PKIX_PL_Malloc(200, &asciiString, NULL); michael@0: if (errorResult) goto cleanup; michael@0: michael@0: numChars = michael@0: PR_snprintf michael@0: (asciiString, michael@0: 200, michael@0: "Ref: %d Subject=%s\nIssuer=%s\n", michael@0: refCount, michael@0: subjectAscii, michael@0: issuerAscii); michael@0: michael@0: if (!numChars) goto cleanup; michael@0: michael@0: cleanup: michael@0: michael@0: if (issuer){ michael@0: if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)issuer, NULL)){ michael@0: return (NULL); michael@0: } michael@0: } michael@0: michael@0: if (subject){ michael@0: if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)subject, NULL)){ michael@0: return (NULL); michael@0: } michael@0: } michael@0: michael@0: if (PKIX_PL_Free((PKIX_PL_Object*)issuerAscii, NULL)){ michael@0: return (NULL); michael@0: } michael@0: michael@0: if (PKIX_PL_Free((PKIX_PL_Object*)subjectAscii, NULL)){ michael@0: return (NULL); michael@0: } michael@0: michael@0: if (errorResult){ michael@0: return (NULL); michael@0: } michael@0: michael@0: return (asciiString); michael@0: } michael@0: michael@0: PKIX_Error * michael@0: cert_PrintCertChain( michael@0: PKIX_List *pkixCertChain, michael@0: void *plContext) michael@0: { michael@0: PKIX_PL_Cert *cert = NULL; michael@0: PKIX_UInt32 numCerts = 0, i = 0; michael@0: char *asciiResult = NULL; michael@0: michael@0: PKIX_ENTER(CERTVFYPKIX, "cert_PrintCertChain"); michael@0: michael@0: PKIX_CHECK( michael@0: PKIX_List_GetLength(pkixCertChain, &numCerts, plContext), michael@0: PKIX_LISTGETLENGTHFAILED); michael@0: michael@0: fprintf(stderr, "\n"); michael@0: michael@0: for (i = 0; i < numCerts; i++){ michael@0: PKIX_CHECK michael@0: (PKIX_List_GetItem michael@0: (pkixCertChain, i, (PKIX_PL_Object**)&cert, plContext), michael@0: PKIX_LISTGETITEMFAILED); michael@0: michael@0: asciiResult = pkix_Cert2ASCII(cert); michael@0: michael@0: fprintf(stderr, "CERT[%d]:\n%s\n", i, asciiResult); michael@0: michael@0: PKIX_PL_Free(asciiResult, plContext); michael@0: asciiResult = NULL; michael@0: michael@0: PKIX_DECREF(cert); michael@0: } michael@0: michael@0: cleanup: michael@0: PKIX_DECREF(cert); michael@0: michael@0: PKIX_RETURN(CERTVFYPKIX); michael@0: } michael@0: michael@0: void michael@0: cert_PrintCert( michael@0: PKIX_PL_Cert *pkixCert, michael@0: void *plContext) michael@0: { michael@0: char *asciiResult = NULL; michael@0: michael@0: asciiResult = pkix_Cert2ASCII(pkixCert); michael@0: michael@0: fprintf(stderr, "CERT[0]:\n%s\n", asciiResult); michael@0: michael@0: PKIX_PL_Free(asciiResult, plContext); michael@0: } michael@0: michael@0: #endif /* DEBUG */