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