Retrieve correct content to sign when the

type is "other".
This commit is contained in:
Dr. Stephen Henson 2003-10-10 23:25:43 +00:00
parent a08ced78c8
commit caf044cb3e
2 changed files with 25 additions and 26 deletions

View File

@ -555,6 +555,10 @@
differing sizes. differing sizes.
[Richard Levitte] [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] Changes between 0.9.7b and 0.9.7c [30 Sep 2003]
*) Fix various bugs revealed by running the NISCC test suite: *) Fix various bugs revealed by running the NISCC test suite:

View File

@ -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) ) if ( PKCS7_type_is_data(p7))
return 0; return p7->d.data;
if ( PKCS7_type_is_other(p7) && p7->d.other
return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0; && (p7->d.other->type == V_ASN1_OCTET_STRING))
return p7->d.other->value.octet_string;
return NULL;
} }
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
@ -250,29 +252,22 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
btmp=NULL; btmp=NULL;
} }
if (bio == NULL) { if (bio == NULL)
{
if (PKCS7_is_detached(p7)) if (PKCS7_is_detached(p7))
bio=BIO_new(BIO_s_null()); bio=BIO_new(BIO_s_null());
else { else
if (PKCS7_type_is_signed(p7) ) { {
if ( PKCS7_type_is_data(p7->d.sign->contents)) { ASN1_OCTET_STRING *os;
ASN1_OCTET_STRING *os; os = PKCS7_get_octet_string(p7->d.sign->contents);
os=p7->d.sign->contents->d.data; if (os && os->length > 0)
if (os->length > 0) bio = BIO_new_mem_buf(os->data, os->length);
bio = BIO_new_mem_buf(os->data, os->length); if(bio == NULL)
} {
else if ( PKCS7_type_is_octet_string(p7->d.sign->contents) ) {
ASN1_OCTET_STRING *os;
os=p7->d.sign->contents->d.other->value.octet_string;
if (os->length > 0)
bio = BIO_new_mem_buf(os->data, os->length);
}
}
if(bio == NULL) {
bio=BIO_new(BIO_s_mem()); bio=BIO_new(BIO_s_mem());
BIO_set_mem_eof_return(bio,0); BIO_set_mem_eof_return(bio,0);
}
} }
}
} }
BIO_push(out,bio); BIO_push(out,bio);
bio=NULL; bio=NULL;
@ -311,7 +306,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
switch (i) switch (i)
{ {
case NID_pkcs7_signed: 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; md_sk=p7->d.sign->md_algs;
break; break;
case NID_pkcs7_signedAndEnveloped: case NID_pkcs7_signedAndEnveloped:
@ -531,9 +526,9 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio)
break; break;
case NID_pkcs7_signed: case NID_pkcs7_signed:
si_sk=p7->d.sign->signer_info; 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 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); M_ASN1_OCTET_STRING_free(os);
p7->d.sign->contents->d.data = NULL; p7->d.sign->contents->d.data = NULL;
} }