Enabled PKCS#8 for private keys
This commit is contained in:
@@ -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
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user