Enabled PKCS#8 for private keys

This commit is contained in:
Spitap
2022-07-31 11:49:58 +02:00
parent f4dff24d68
commit 20d9ca1e1c
2 changed files with 17 additions and 1 deletions
+3
View File
@@ -84,6 +84,9 @@ def asn1_parse(template, data):
elif tag == SEQUENCE: elif tag == SEQUENCE:
r.append(asn1_parse(t[1], data[i:i+length])) r.append(asn1_parse(t[1], data[i:i+length]))
i += length i += length
elif tag == OCTET_STRING:
r.append(data[i:i+length])
i += length
else: else:
raise ASN1FormatError( raise ASN1FormatError(
"Unexpected tag in template: %02x" % tag) "Unexpected tag in template: %02x" % tag)
+14 -1
View File
@@ -48,6 +48,13 @@ from dkim.asn1 import (
NULL, NULL,
) )
ASN1_PKCS8_PrivateKey = [
(SEQUENCE, [
(INTEGER,),
(SEQUENCE, [ (OBJECT_IDENTIFIER,), (NULL,),]),
(OCTET_STRING,),
])
]
ASN1_Object = [ ASN1_Object = [
(SEQUENCE, [ (SEQUENCE, [
@@ -167,7 +174,13 @@ def parse_pem_private_key(data):
pkdata = base64.b64decode(m.group(1)) pkdata = base64.b64decode(m.group(1))
except TypeError as e: except TypeError as e:
raise UnparsableKeyError(str(e)) raise UnparsableKeyError(str(e))
return parse_private_key(pkdata) try:
pk = parse_private_key(pkdata)
except UnparsableKeyError:
#If it fails it might be because of PKCS#8 (key generated with openSSL 3.X)
pka = asn1_parse(ASN1_PKCS8_PrivateKey, pkdata)
pk = parse_private_key(pka[0][2])
return pk
def EMSA_PKCS1_v1_5_encode(hash, mlen): def EMSA_PKCS1_v1_5_encode(hash, mlen):