Retrieve correct content to sign when the

type is "other".
This commit is contained in:
Dr. Stephen Henson 2003-10-10 23:24:10 +00:00
parent ede7c28eb7
commit 80986c9ced
2 changed files with 23 additions and 27 deletions

View file

@ -4,7 +4,8 @@
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]

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) )
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)
@ -250,29 +252,22 @@ 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) ) {
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) {
else
{
ASN1_OCTET_STRING *os;
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)
{
bio=BIO_new(BIO_s_mem());
BIO_set_mem_eof_return(bio,0);
}
}
}
}
BIO_push(out,bio);
bio=NULL;
@ -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:
@ -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;
}