Fix up serialNumber in openssl PKCS#7 if it has a leading MSB set
This commit is contained in:
@@ -593,6 +593,7 @@ static bool decrypt(private_openssl_pkcs7_t *this,
|
|||||||
X509_ALGOR *alg;
|
X509_ALGOR *alg;
|
||||||
X509_NAME *name;
|
X509_NAME *name;
|
||||||
ASN1_INTEGER *sn;
|
ASN1_INTEGER *sn;
|
||||||
|
u_char zero = 0;
|
||||||
int oid;
|
int oid;
|
||||||
|
|
||||||
if (CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg) == 1 &&
|
if (CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg) == 1 &&
|
||||||
@@ -609,8 +610,12 @@ static bool decrypt(private_openssl_pkcs7_t *this,
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
serial = identification_create_from_encoding(
|
chunk = openssl_asn1_str2chunk(sn);
|
||||||
ID_KEY_ID, openssl_asn1_str2chunk(sn));
|
if (chunk.len && chunk.ptr[0] | 0x80)
|
||||||
|
{ /* if MSB is set, append a zero to make it non-negative */
|
||||||
|
chunk = chunk_cata("cc", chunk_from_thing(zero), chunk);
|
||||||
|
}
|
||||||
|
serial = identification_create_from_encoding(ID_KEY_ID, chunk);
|
||||||
private = find_private(issuer, serial);
|
private = find_private(issuer, serial);
|
||||||
issuer->destroy(issuer);
|
issuer->destroy(issuer);
|
||||||
serial->destroy(serial);
|
serial->destroy(serial);
|
||||||
|
|||||||
Reference in New Issue
Block a user