Allow verification of other types than DATA.
Submitted by Leonard Janke <leonard@votehere.net>
This commit is contained in:
parent
82db6e1646
commit
67fec850e1
1 changed files with 46 additions and 7 deletions
|
@ -67,6 +67,38 @@ static int add_attribute(STACK_OF(X509_ATTRIBUTE) **sk, int nid, int atrtype,
|
||||||
void *value);
|
void *value);
|
||||||
static ASN1_TYPE *get_attribute(STACK_OF(X509_ATTRIBUTE) *sk, int nid);
|
static ASN1_TYPE *get_attribute(STACK_OF(X509_ATTRIBUTE) *sk, int nid);
|
||||||
|
|
||||||
|
static int PKCS7_type_is_other(PKCS7* p7)
|
||||||
|
{
|
||||||
|
int isOther=1;
|
||||||
|
|
||||||
|
int nid=OBJ_obj2nid(p7->type);
|
||||||
|
|
||||||
|
switch( nid )
|
||||||
|
{
|
||||||
|
case NID_pkcs7_data:
|
||||||
|
case NID_pkcs7_signed:
|
||||||
|
case NID_pkcs7_enveloped:
|
||||||
|
case NID_pkcs7_signedAndEnveloped:
|
||||||
|
case NID_pkcs7_digest:
|
||||||
|
case NID_pkcs7_encrypted:
|
||||||
|
isOther=0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
isOther=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isOther;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int PKCS7_type_is_octet_string(PKCS7* p7)
|
||||||
|
{
|
||||||
|
if ( 0==PKCS7_type_is_other(p7) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
|
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
|
@ -222,13 +254,20 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
|
||||||
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_signed(p7) ) {
|
||||||
PKCS7_type_is_data(p7->d.sign->contents)) {
|
if ( PKCS7_type_is_data(p7->d.sign->contents)) {
|
||||||
ASN1_OCTET_STRING *os;
|
ASN1_OCTET_STRING *os;
|
||||||
os=p7->d.sign->contents->d.data;
|
os=p7->d.sign->contents->d.data;
|
||||||
if (os->length > 0) bio =
|
if (os->length > 0)
|
||||||
BIO_new_mem_buf(os->data, os->length);
|
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) {
|
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);
|
||||||
|
|
Loading…
Reference in a new issue