@@ -9403,79 +9403,27 @@ int wolfSSL_X509_CRL_set_signature_nid(WOLFSSL_X509_CRL* crl, int nid)
94039403/* Retrieve signature from CRL
94049404 * return WOLFSSL_SUCCESS on success and negative values on failure
94059405 */
9406- void wolfSSL_X509_CRL_get_signature (const WOLFSSL_X509_CRL * crl ,
9407- const WOLFSSL_ASN1_BIT_STRING * * psig , const WOLFSSL_X509_ALGOR * * palg )
9406+ int wolfSSL_X509_CRL_get_signature (WOLFSSL_X509_CRL * crl ,
9407+ unsigned char * buf , int * bufSz )
94089408{
9409- CRL_Entry * entry ;
9410- WOLFSSL_ASN1_BIT_STRING * bitStr ;
9411- WOLFSSL_X509_ALGOR * algor ;
9412- int nid ;
9413-
94149409 WOLFSSL_ENTER ("wolfSSL_X509_CRL_get_signature" );
94159410
9416- if (psig ) {
9417- * psig = NULL ;
9418- }
9419- if (palg ) {
9420- * palg = NULL ;
9421- }
9422-
94239411 if (crl == NULL || crl -> crlList == NULL ||
9424- crl -> crlList -> signature == NULL || crl -> crlList -> signatureSz == 0 ) {
9425- return ;
9426- }
9427-
9428- entry = ((WOLFSSL_X509_CRL * )crl )-> crlList ;
9412+ crl -> crlList -> signature == NULL || bufSz == NULL )
9413+ return BAD_FUNC_ARG ;
94299414
9430- if (psig ) {
9431- bitStr = entry -> sigBits ;
9432- if (bitStr == NULL ) {
9433- bitStr = wolfSSL_ASN1_BIT_STRING_new ();
9434- if (bitStr == NULL ) {
9435- return ;
9436- }
9437- entry -> sigBits = bitStr ;
9415+ if (buf != NULL ) {
9416+ if (* bufSz < (int )crl -> crlList -> signatureSz ) {
9417+ WOLFSSL_MSG ("Signature buffer too small" );
9418+ return BUFFER_E ;
94389419 }
9439-
9440- if (bitStr -> data == NULL || bitStr -> length != (int )entry -> signatureSz ) {
9441- XFREE (bitStr -> data , NULL , DYNAMIC_TYPE_OPENSSL );
9442- bitStr -> data = (byte * )XMALLOC (entry -> signatureSz , NULL ,
9443- DYNAMIC_TYPE_OPENSSL );
9444- if (bitStr -> data == NULL ) {
9445- bitStr -> length = 0 ;
9446- return ;
9447- }
9420+ else {
9421+ XMEMCPY (buf , crl -> crlList -> signature , crl -> crlList -> signatureSz );
94489422 }
9449- XMEMCPY (bitStr -> data , entry -> signature , entry -> signatureSz );
9450- bitStr -> length = (int )entry -> signatureSz ;
9451- bitStr -> type = WOLFSSL_V_ASN1_BIT_STRING ;
9452- bitStr -> flags = 0 ;
9453-
9454- * psig = bitStr ;
94559423 }
9424+ * bufSz = (int )crl -> crlList -> signatureSz ;
94569425
9457- if (palg ) {
9458- nid = oid2nid (entry -> signatureOID , oidSigType );
9459- algor = entry -> sigAlgor ;
9460- if (algor == NULL ||
9461- (algor -> algorithm != NULL &&
9462- wolfSSL_OBJ_obj2nid (algor -> algorithm ) != nid )) {
9463- if (algor != NULL ) {
9464- wolfSSL_X509_ALGOR_free (algor );
9465- }
9466- algor = wolfSSL_X509_ALGOR_new ();
9467- if (algor == NULL ) {
9468- return ;
9469- }
9470- if (wolfSSL_X509_ALGOR_set0 (algor , wolfSSL_OBJ_nid2obj (nid ),
9471- WOLFSSL_V_ASN1_NULL , NULL ) != WOLFSSL_SUCCESS ) {
9472- wolfSSL_X509_ALGOR_free (algor );
9473- return ;
9474- }
9475- entry -> sigAlgor = algor ;
9476- }
9477- * palg = algor ;
9478- }
9426+ return WOLFSSL_SUCCESS ;
94799427}
94809428
94819429int wolfSSL_X509_CRL_set_signature (WOLFSSL_X509_CRL * crl ,
@@ -9507,12 +9455,6 @@ int wolfSSL_X509_CRL_set_signature(WOLFSSL_X509_CRL* crl,
95079455
95089456 XMEMCPY (crl -> crlList -> signature , buf , bufSz );
95099457 crl -> crlList -> signatureSz = (word32 )bufSz ;
9510- #if defined(OPENSSL_EXTRA )
9511- if (crl -> crlList -> sigBits != NULL ) {
9512- wolfSSL_ASN1_BIT_STRING_free (crl -> crlList -> sigBits );
9513- crl -> crlList -> sigBits = NULL ;
9514- }
9515- #endif
95169458 return WOLFSSL_SUCCESS ;
95179459}
95189460
@@ -9592,17 +9534,34 @@ static int X509RevokedPrintSerial(WOLFSSL_BIO* bio, RevokedCert* rev,
95929534static int X509CRLPrintSignature (WOLFSSL_BIO * bio , WOLFSSL_X509_CRL * crl ,
95939535 int algOnly , int indent )
95949536{
9595- const WOLFSSL_ASN1_BIT_STRING * sig = NULL ;
9596- int sigNid = wolfSSL_X509_CRL_get_signature_nid (crl );
9537+ int sigSz = 0 ;
95979538
9598- wolfSSL_X509_CRL_get_signature (crl , & sig , NULL );
9599- if (sig == NULL || sig -> data == NULL || sig -> length <= 0 ) {
9539+ if (wolfSSL_X509_CRL_get_signature (crl , NULL , & sigSz ) <= 0 ) {
96009540 return WOLFSSL_FAILURE ;
96019541 }
96029542
9603- if (X509PrintSignature_ex (bio , sig -> data , sig -> length , sigNid ,
9604- algOnly , indent ) != WOLFSSL_SUCCESS ) {
9605- return WOLFSSL_FAILURE ;
9543+ if (sigSz > 0 ) {
9544+ unsigned char * sig ;
9545+ int sigNid = wolfSSL_X509_CRL_get_signature_nid (crl );
9546+
9547+ sig = (unsigned char * )XMALLOC (sigSz , NULL , DYNAMIC_TYPE_TMP_BUFFER );
9548+ if (sig == NULL ) {
9549+ return WOLFSSL_FAILURE ;
9550+ }
9551+
9552+ if (wolfSSL_X509_CRL_get_signature (crl , sig , & sigSz ) <= 0 ) {
9553+ XFREE (sig , NULL , DYNAMIC_TYPE_TMP_BUFFER );
9554+ return WOLFSSL_FAILURE ;
9555+ }
9556+
9557+ if (X509PrintSignature_ex (bio , sig , sigSz , sigNid , algOnly , indent )
9558+ != WOLFSSL_SUCCESS ) {
9559+ XFREE (sig , NULL , DYNAMIC_TYPE_TMP_BUFFER );
9560+ return WOLFSSL_FAILURE ;
9561+ }
9562+
9563+ XFREE (sig , NULL , DYNAMIC_TYPE_TMP_BUFFER );
9564+
96069565 }
96079566
96089567 return WOLFSSL_SUCCESS ;
@@ -10666,8 +10625,8 @@ WOLFSSL_ASN1_INTEGER* wolfSSL_X509_get_serialNumber(WOLFSSL_X509* x509)
1066610625#if defined(OPENSSL_EXTRA ) || defined(OPENSSL_EXTRA_X509_SMALL )
1066710626
1066810627#if defined(OPENSSL_ALL ) || defined(OPENSSL_EXTRA ) || \
10669- defined(OPENSSL_EXTRA_X509_SMALL ) || defined(WOLFSSL_APACHE_HTTPD ) || \
10670- defined(WOLFSSL_HAPROXY ) || defined( WOLFSSL_WPAS )
10628+ defined(WOLFSSL_APACHE_HTTPD ) || defined(WOLFSSL_HAPROXY ) || \
10629+ defined(WOLFSSL_WPAS )
1067110630WOLFSSL_X509_ALGOR * wolfSSL_X509_ALGOR_new (void )
1067210631{
1067310632 WOLFSSL_X509_ALGOR * ret ;
@@ -11082,10 +11041,11 @@ int wolfSSL_X509_PUBKEY_set(WOLFSSL_X509_PUBKEY **x, WOLFSSL_EVP_PKEY *key)
1108211041 return WOLFSSL_FAILURE ;
1108311042}
1108411043
11085- #endif /* OPENSSL_ALL || WOLFSSL_APACHE_HTTPD || WOLFSSL_HAPROXY ||
11086- * WOLFSSL_WPAS */
11044+ #endif /* OPENSSL_ALL || OPENSSL_EXTRA || WOLFSSL_APACHE_HTTPD ||
11045+ * WOLFSSL_HAPROXY || WOLFSSL_WPAS */
1108711046
11088- #if !defined(NO_CERTS ) && !defined(NO_ASN ) && !defined(NO_PWDBASED )
11047+ #if defined(OPENSSL_EXTRA ) && !defined(NO_CERTS ) && !defined(NO_ASN ) && \
11048+ !defined(NO_PWDBASED )
1108911049
1109011050int wolfSSL_i2d_X509_PUBKEY (WOLFSSL_X509_PUBKEY * x509_PubKey ,
1109111051 unsigned char * * der )
@@ -11095,9 +11055,9 @@ int wolfSSL_i2d_X509_PUBKEY(WOLFSSL_X509_PUBKEY* x509_PubKey,
1109511055 return wolfSSL_i2d_PublicKey (x509_PubKey -> pkey , der );
1109611056}
1109711057
11098- #endif /* !NO_CERTS && !NO_ASN && !NO_PWDBASED */
11058+ #endif /* OPENSSL_EXTRA && !NO_CERTS && !NO_ASN && !NO_PWDBASED */
1109911059
11100- #endif /* OPENSSL_EXTRA */
11060+ #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
1110111061
1110211062#if defined(OPENSSL_EXTRA ) || defined(WOLFSSL_WPAS_SMALL )
1110311063WOLFSSL_BASIC_CONSTRAINTS * wolfSSL_BASIC_CONSTRAINTS_new (void )
0 commit comments