Skip to content

Commit 065b40c

Browse files
authored
try to support pkcs8 v2 format pem file for EdDSA (#281)
* try to support pkcs8 v2 format pem file
1 parent 4de8d5b commit 065b40c

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/ecdsa/keys.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -1124,10 +1124,16 @@ def from_der(cls, string, hashfunc=sha1, valid_curve_encodings=None):
11241124
"Non NULL parameters for a EdDSA key"
11251125
)
11261126
key_str_der, s = der.remove_octet_string(s)
1127-
if s:
1128-
raise der.UnexpectedDER(
1129-
"trailing junk inside the privateKey"
1130-
)
1127+
1128+
# As RFC5958 describe, there are may be optional Attributes
1129+
# and Publickey. Don't raise error if something after
1130+
# Privatekey
1131+
1132+
# TODO parse attributes or validate publickey
1133+
# if s:
1134+
# raise der.UnexpectedDER(
1135+
# "trailing junk inside the privateKey"
1136+
# )
11311137
key_str, s = der.remove_octet_string(key_str_der)
11321138
if s:
11331139
raise der.UnexpectedDER(

src/ecdsa/test_keys.py

+10
Original file line numberDiff line numberDiff line change
@@ -927,3 +927,13 @@ def test_VerifyingKey_inequality_with_different_secret_points():
927927
sk2 = SigningKey.from_secret_exponent(3, BRAINPOOLP160r1)
928928

929929
assert sk1.verifying_key != sk2.verifying_key
930+
931+
932+
def test_SigningKey_from_pem_pkcs8v2_EdDSA():
933+
pem = """-----BEGIN PRIVATE KEY-----
934+
MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI
935+
oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ==
936+
-----END PRIVATE KEY-----"""
937+
938+
sk = SigningKey.from_pem(pem)
939+
assert sk.curve == Ed25519

0 commit comments

Comments
 (0)