security/nss/lib/certhigh/certvfypkixprint.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     4 /*
     5  * nss_pkix_proxy.h
     6  *
     7  * PKIX - NSS proxy functions
     8  *
     9  */
    10 #include "cert.h"
    11 #include "pkix_pl_common.h"
    13 #ifdef DEBUG
    15 char *
    16 pkix_Error2ASCII(PKIX_Error *error, void *plContext)
    17 {
    18         PKIX_UInt32 length;
    19         char *asciiString = NULL;
    20         PKIX_PL_String *pkixString = NULL;
    21         PKIX_Error *errorResult = NULL;
    23         errorResult = PKIX_PL_Object_ToString
    24                 ((PKIX_PL_Object*)error, &pkixString, plContext);
    25         if (errorResult) goto cleanup;
    27         errorResult = PKIX_PL_String_GetEncoded
    28                 (pkixString,
    29                 PKIX_ESCASCII,
    30                 (void **)&asciiString,
    31                 &length,
    32                 plContext);
    34 cleanup:
    36         if (pkixString){
    37                 if (PKIX_PL_Object_DecRef
    38                     ((PKIX_PL_Object*)pkixString, plContext)){
    39                         return (NULL);
    40                 }
    41         }
    43         if (errorResult){
    44             PKIX_PL_Object_DecRef((PKIX_PL_Object*)errorResult, plContext);
    45             return (NULL);
    46         }
    48         return (asciiString);
    49 }
    51 char *
    52 pkix_Object2ASCII(PKIX_PL_Object *object)
    53 {
    54         PKIX_UInt32 length;
    55         char *asciiString = NULL;
    56         PKIX_PL_String *pkixString = NULL;
    57         PKIX_Error *errorResult = NULL;
    59         errorResult = PKIX_PL_Object_ToString
    60                 (object, &pkixString, NULL);
    61         if (errorResult) goto cleanup;
    63         errorResult = PKIX_PL_String_GetEncoded
    64             (pkixString, PKIX_ESCASCII, (void **)&asciiString, &length, NULL);
    66 cleanup:
    68         if (pkixString){
    69                 if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)pkixString, NULL)){
    70                         return (NULL);
    71                 }
    72         }
    74         if (errorResult){
    75                 return (NULL);
    76         }
    78         return (asciiString);
    79 }
    81 char *
    82 pkix_Cert2ASCII(PKIX_PL_Cert *cert)
    83 {
    84         PKIX_PL_X500Name *issuer = NULL;
    85         void *issuerAscii = NULL;
    86         PKIX_PL_X500Name *subject = NULL;
    87         void *subjectAscii = NULL;
    88         void *asciiString = NULL;
    89         PKIX_Error *errorResult = NULL;
    90         PKIX_UInt32 numChars;
    91         PKIX_UInt32 refCount = 0;
    93         /* Issuer */
    94         errorResult = PKIX_PL_Cert_GetIssuer(cert, &issuer, NULL);
    95         if (errorResult) goto cleanup;
    97         issuerAscii = pkix_Object2ASCII((PKIX_PL_Object*)issuer);
    99         /* Subject */
   100         errorResult = PKIX_PL_Cert_GetSubject(cert, &subject, NULL);
   101         if (errorResult) goto cleanup;
   103         if (subject){
   104                 subjectAscii = pkix_Object2ASCII((PKIX_PL_Object*)subject);
   105         }
   107 /*         errorResult = PKIX_PL_Object_GetRefCount((PKIX_PL_Object*)cert, &refCount, NULL); */
   108         if (errorResult) goto cleanup;
   110         errorResult = PKIX_PL_Malloc(200, &asciiString, NULL);
   111         if (errorResult) goto cleanup;
   113         numChars =
   114                 PR_snprintf
   115                 (asciiString,
   116                 200,
   117                 "Ref: %d   Subject=%s\nIssuer=%s\n",
   118                  refCount,
   119                 subjectAscii,
   120                 issuerAscii);
   122         if (!numChars) goto cleanup;
   124 cleanup:
   126         if (issuer){
   127                 if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)issuer, NULL)){
   128                         return (NULL);
   129                 }
   130         }
   132         if (subject){
   133                 if (PKIX_PL_Object_DecRef((PKIX_PL_Object*)subject, NULL)){
   134                         return (NULL);
   135                 }
   136         }
   138         if (PKIX_PL_Free((PKIX_PL_Object*)issuerAscii, NULL)){
   139                 return (NULL);
   140         }
   142         if (PKIX_PL_Free((PKIX_PL_Object*)subjectAscii, NULL)){
   143                 return (NULL);
   144         }
   146         if (errorResult){
   147                 return (NULL);
   148         }
   150         return (asciiString);
   151 }
   153 PKIX_Error *
   154 cert_PrintCertChain(
   155     PKIX_List *pkixCertChain,
   156     void *plContext)
   157 {
   158     PKIX_PL_Cert *cert = NULL;
   159     PKIX_UInt32 numCerts = 0, i = 0;
   160     char *asciiResult = NULL;
   162     PKIX_ENTER(CERTVFYPKIX, "cert_PrintCertChain");
   164     PKIX_CHECK(
   165         PKIX_List_GetLength(pkixCertChain, &numCerts, plContext),
   166         PKIX_LISTGETLENGTHFAILED);
   168     fprintf(stderr, "\n");
   170     for (i = 0; i < numCerts; i++){
   171         PKIX_CHECK
   172             (PKIX_List_GetItem
   173              (pkixCertChain, i, (PKIX_PL_Object**)&cert, plContext),
   174              PKIX_LISTGETITEMFAILED);
   176         asciiResult = pkix_Cert2ASCII(cert);
   178         fprintf(stderr, "CERT[%d]:\n%s\n", i, asciiResult);
   180         PKIX_PL_Free(asciiResult, plContext);
   181         asciiResult = NULL;
   183         PKIX_DECREF(cert);
   184     }
   186 cleanup:
   187     PKIX_DECREF(cert);
   189     PKIX_RETURN(CERTVFYPKIX);
   190 }
   192 void
   193 cert_PrintCert(
   194     PKIX_PL_Cert *pkixCert,
   195     void *plContext)
   196 {
   197     char *asciiResult = NULL;
   199     asciiResult = pkix_Cert2ASCII(pkixCert);
   201     fprintf(stderr, "CERT[0]:\n%s\n", asciiResult);
   203     PKIX_PL_Free(asciiResult, plContext);
   204 }
   206 #endif /* DEBUG */

mercurial