Retrieve correct content to sign when the
type is "other".
This commit is contained in:
parent
a08ced78c8
commit
caf044cb3e
4
CHANGES
4
CHANGES
@ -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:
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user