static PKIX_PL_Cert * createCert(char *inFileName) { PKIX_PL_ByteArray *byteArray = NULL; void *buf = NULL; PRFileDesc *inFile = NULL; PKIX_UInt32 len; SECItem certDER; SECStatus rv; /* default: NULL cert (failure case) */ PKIX_PL_Cert *cert = NULL; PKIX_TEST_STD_VARS(); certDER.data = NULL; inFile = PR_Open(inFileName, PR_RDONLY, 0); if (!inFile){ pkixTestErrorMsg = "Unable to open cert file"; goto cleanup; } else { rv = SECU_ReadDERFromFile(&certDER, inFile, PR_FALSE); if (!rv){ buf = (void *)certDER.data; len = certDER.len; PKIX_TEST_EXPECT_NO_ERROR (PKIX_PL_ByteArray_Create (buf, len, &byteArray, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Cert_Create (byteArray, &cert, plContext)); SECITEM_FreeItem(&certDER, PR_FALSE); } else { pkixTestErrorMsg = "Unable to read DER from cert file"; goto cleanup; } } cleanup: if (inFile){ PR_Close(inFile); } if (PKIX_TEST_ERROR_RECEIVED){ SECITEM_FreeItem(&certDER, PR_FALSE); } PKIX_TEST_DECREF_AC(byteArray); PKIX_TEST_RETURN(); return (cert); }
/* * FUNCTION: pkix_pl_CollectionCertStoreContext_CreateCert * DESCRIPTION: * * Creates Cert using data file path name pointed to by "certFileName" and * stores it at "pCert". If the Cert can not be decoded, NULL is stored * at "pCert". * * PARAMETERS * "certFileName" - Address of Cert data file path name. Must be non-NULL. * "pCert" - Address where object pointer will be stored. Must be non-NULL. * "plContext" - Platform-specific context pointer. * THREAD SAFETY: * Thread Safe (see Thread Safety Definitions in Programmer's Guide) * RETURNS: * Returns NULL if the function succeeds. * Returns a CollectionCertStoreContext Error if the function fails in * a non-fatal way. * Returns a Fatal Error if the function fails in an unrecoverable way. */ static PKIX_Error * pkix_pl_CollectionCertStoreContext_CreateCert( const char *certFileName, PKIX_PL_Cert **pCert, void *plContext) { PKIX_PL_ByteArray *byteArray = NULL; PKIX_PL_Cert *cert = NULL; PRFileDesc *inFile = NULL; SECItem certDER; void *buf = NULL; PKIX_UInt32 len; SECStatus rv; PKIX_ENTER(COLLECTIONCERTSTORECONTEXT, "pkix_pl_CollectionCertStoreContext_CreateCert"); PKIX_NULLCHECK_TWO(certFileName, pCert); *pCert = NULL; certDER.data = NULL; PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG("\t\t Calling PR_Open.\n"); inFile = PR_Open(certFileName, PR_RDONLY, 0); if (!inFile){ PKIX_ERROR(PKIX_UNABLETOOPENCERTFILE); } else { PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG ("\t\t Calling SECU_ReadDerFromFile.\n"); rv = SECU_ReadDERFromFile(&certDER, inFile, PR_FALSE); if (!rv){ buf = (void *)certDER.data; len = certDER.len; PKIX_CHECK(PKIX_PL_ByteArray_Create (buf, len, &byteArray, plContext), PKIX_BYTEARRAYCREATEFAILED); PKIX_CHECK(PKIX_PL_Cert_Create (byteArray, &cert, plContext), PKIX_CERTCREATEFAILED); PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG ("\t\t Calling SECITEM_FreeItem.\n"); SECITEM_FreeItem(&certDER, PR_FALSE); } else { PKIX_ERROR(PKIX_UNABLETOREADDERFROMCERTFILE); } } *pCert = cert; cleanup: if (inFile){ PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG ("\t\t Calling PR_CloseDir.\n"); PR_Close(inFile); } if (PKIX_ERROR_RECEIVED){ PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG ("\t\t Calling SECITEM_FreeItem).\n"); SECITEM_FreeItem(&certDER, PR_FALSE); PKIX_DECREF(cert); } PKIX_DECREF(byteArray); PKIX_RETURN(COLLECTIONCERTSTORECONTEXT); }
static PKIX_PL_Cert * createCert(char *inFileName) { PKIX_PL_ByteArray *byteArray = NULL; PKIX_PL_Cert *cert = NULL; PKIX_Error *error = NULL; PRFileDesc *inFile = NULL; SECItem certDER; void *buf = NULL; PKIX_UInt32 len; SECStatus rv = SECFailure; certDER.data = NULL; inFile = PR_Open(inFileName, PR_RDONLY, 0); if (!inFile){ printFailure("Unable to open cert file"); goto cleanup; } else { rv = SECU_ReadDERFromFile(&certDER, inFile, PR_FALSE); if (!rv){ buf = (void *)certDER.data; len = certDER.len; error = PKIX_PL_ByteArray_Create (buf, len, &byteArray, plContext); if (error){ printFailure("PKIX_PL_ByteArray_Create failed"); goto cleanup; } error = PKIX_PL_Cert_Create (byteArray, &cert, plContext); if (error){ printFailure("PKIX_PL_Cert_Create failed"); goto cleanup; } } else { printFailure("Unable to read DER from cert file"); goto cleanup; } } cleanup: if (inFile){ PR_Close(inFile); } if (rv == SECSuccess){ SECITEM_FreeItem(&certDER, PR_FALSE); } if (byteArray){ PKIX_PL_Object_DecRef((PKIX_PL_Object *)(byteArray), plContext); } return (cert); }