Loading CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -555,6 +555,10 @@ differing sizes. [Richard Levitte] Changes between 0.9.7c and 0.9.7d [xx XXX XXXX] *) Use the correct content when signing type "other". [Steve Henson] Changes between 0.9.7b and 0.9.7c [30 Sep 2003] *) Fix various bugs revealed by running the NISCC test suite: Loading crypto/pkcs7/pk7_doit.c +21 −26 Original line number Diff line number Diff line Loading @@ -91,12 +91,14 @@ static int PKCS7_type_is_other(PKCS7* p7) } static int PKCS7_type_is_octet_string(PKCS7* p7) static ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7) { if ( 0==PKCS7_type_is_other(p7) ) return 0; return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0; if ( PKCS7_type_is_data(p7)) return p7->d.data; if ( PKCS7_type_is_other(p7) && p7->d.other && (p7->d.other->type == V_ASN1_OCTET_STRING)) return p7->d.other->value.octet_string; return NULL; } BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) Loading Loading @@ -250,25 +252,18 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) btmp=NULL; } if (bio == NULL) { if (bio == NULL) { if (PKCS7_is_detached(p7)) bio=BIO_new(BIO_s_null()); else { if (PKCS7_type_is_signed(p7) ) { if ( PKCS7_type_is_data(p7->d.sign->contents)) { ASN1_OCTET_STRING *os; os=p7->d.sign->contents->d.data; if (os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); } else if ( PKCS7_type_is_octet_string(p7->d.sign->contents) ) { else { ASN1_OCTET_STRING *os; os=p7->d.sign->contents->d.other->value.octet_string; if (os->length > 0) os = PKCS7_get_octet_string(p7->d.sign->contents); if (os && os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); } } if(bio == NULL) { if(bio == NULL) { bio=BIO_new(BIO_s_mem()); BIO_set_mem_eof_return(bio,0); } Loading Loading @@ -311,7 +306,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) switch (i) { case NID_pkcs7_signed: data_body=p7->d.sign->contents->d.data; data_body=PKCS7_get_octet_string(p7->d.sign->contents); md_sk=p7->d.sign->md_algs; break; case NID_pkcs7_signedAndEnveloped: Loading Loading @@ -531,9 +526,9 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) break; case NID_pkcs7_signed: si_sk=p7->d.sign->signer_info; os=p7->d.sign->contents->d.data; os=PKCS7_get_octet_string(p7->d.sign->contents); /* If detached data then the content is excluded */ if(p7->detached) { if(PKCS7_type_is_data(p7->d.sign->contents) && p7->detached) { M_ASN1_OCTET_STRING_free(os); p7->d.sign->contents->d.data = NULL; } Loading Loading
CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -555,6 +555,10 @@ differing sizes. [Richard Levitte] Changes between 0.9.7c and 0.9.7d [xx XXX XXXX] *) Use the correct content when signing type "other". [Steve Henson] Changes between 0.9.7b and 0.9.7c [30 Sep 2003] *) Fix various bugs revealed by running the NISCC test suite: Loading
crypto/pkcs7/pk7_doit.c +21 −26 Original line number Diff line number Diff line Loading @@ -91,12 +91,14 @@ static int PKCS7_type_is_other(PKCS7* p7) } static int PKCS7_type_is_octet_string(PKCS7* p7) static ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7) { if ( 0==PKCS7_type_is_other(p7) ) return 0; return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0; if ( PKCS7_type_is_data(p7)) return p7->d.data; if ( PKCS7_type_is_other(p7) && p7->d.other && (p7->d.other->type == V_ASN1_OCTET_STRING)) return p7->d.other->value.octet_string; return NULL; } BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) Loading Loading @@ -250,25 +252,18 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) btmp=NULL; } if (bio == NULL) { if (bio == NULL) { if (PKCS7_is_detached(p7)) bio=BIO_new(BIO_s_null()); else { if (PKCS7_type_is_signed(p7) ) { if ( PKCS7_type_is_data(p7->d.sign->contents)) { ASN1_OCTET_STRING *os; os=p7->d.sign->contents->d.data; if (os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); } else if ( PKCS7_type_is_octet_string(p7->d.sign->contents) ) { else { ASN1_OCTET_STRING *os; os=p7->d.sign->contents->d.other->value.octet_string; if (os->length > 0) os = PKCS7_get_octet_string(p7->d.sign->contents); if (os && os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); } } if(bio == NULL) { if(bio == NULL) { bio=BIO_new(BIO_s_mem()); BIO_set_mem_eof_return(bio,0); } Loading Loading @@ -311,7 +306,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) switch (i) { case NID_pkcs7_signed: data_body=p7->d.sign->contents->d.data; data_body=PKCS7_get_octet_string(p7->d.sign->contents); md_sk=p7->d.sign->md_algs; break; case NID_pkcs7_signedAndEnveloped: Loading Loading @@ -531,9 +526,9 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) break; case NID_pkcs7_signed: si_sk=p7->d.sign->signer_info; os=p7->d.sign->contents->d.data; os=PKCS7_get_octet_string(p7->d.sign->contents); /* If detached data then the content is excluded */ if(p7->detached) { if(PKCS7_type_is_data(p7->d.sign->contents) && p7->detached) { M_ASN1_OCTET_STRING_free(os); p7->d.sign->contents->d.data = NULL; } Loading