parse signedData object with empty content
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005 Jan Hutter, Martin Willi
|
* Copyright (C) 2005 Jan Hutter, Martin Willi
|
||||||
* Copyright (C) 2002-2008 Andreas Steffen
|
* Copyright (C) 2002-2008 Andreas Steffen
|
||||||
|
*
|
||||||
* Hochschule fuer Technik Rapperswil, Switzerland
|
* Hochschule fuer Technik Rapperswil, Switzerland
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -301,6 +302,11 @@ static bool parse_data(private_pkcs7_t *this)
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
if (data.len == 0)
|
||||||
|
{
|
||||||
|
this->data = chunk_empty;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
if (parse_asn1_simple_object(&data, ASN1_OCTET_STRING, this->level, "data"))
|
if (parse_asn1_simple_object(&data, ASN1_OCTET_STRING, this->level, "data"))
|
||||||
{
|
{
|
||||||
this->data = chunk_clone(data);
|
this->data = chunk_clone(data);
|
||||||
@@ -313,7 +319,7 @@ static bool parse_data(private_pkcs7_t *this)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse PKCS#7 signedData content
|
* Implements pkcs7_t.parse_signedData.
|
||||||
*/
|
*/
|
||||||
static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert)
|
static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert)
|
||||||
{
|
{
|
||||||
@@ -349,6 +355,7 @@ static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert)
|
|||||||
break;
|
break;
|
||||||
case PKCS7_SIGNED_CONTENT_INFO:
|
case PKCS7_SIGNED_CONTENT_INFO:
|
||||||
{
|
{
|
||||||
|
chunk_t pureData;
|
||||||
pkcs7_t *data = pkcs7_create_from_chunk(object, level+1);
|
pkcs7_t *data = pkcs7_create_from_chunk(object, level+1);
|
||||||
|
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
@@ -360,7 +367,8 @@ static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert)
|
|||||||
data->destroy(data);
|
data->destroy(data);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
this->data = chunk_clone(data->get_data(data));
|
pureData = data->get_data(data);
|
||||||
|
this->data = (pureData.len)? chunk_clone(pureData) : chunk_empty;
|
||||||
data->destroy(data);
|
data->destroy(data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -973,7 +981,7 @@ static bool parse_contentInfo(chunk_t blob, u_int level0, private_pkcs7_t *cInfo
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (objectID == PKCS7_INFO_CONTENT)
|
else if (objectID == PKCS7_INFO_CONTENT && object.len > 0)
|
||||||
{
|
{
|
||||||
cInfo->content = chunk_clone(object);
|
cInfo->content = chunk_clone(object);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user