Retrieve correct content to sign when the
type is "other".
This commit is contained in:
parent
ede7c28eb7
commit
80986c9ced
2 changed files with 23 additions and 27 deletions
3
CHANGES
3
CHANGES
|
@ -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]
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue