summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyse1f <602149025@qq.com>2022-01-04 20:35:32 +0800
committerGitHub <noreply@github.com>2022-01-04 13:35:32 +0100
commit065b40c43e066de6df7f263ee43ade80d86d79f2 (patch)
tree5fc086cfa0e81ace2b31b3275fbca0c554dc1e35
parent4de8d5bf89089d1140eb99aa5d7eb2dc8e6337b6 (diff)
downloadecdsa-065b40c43e066de6df7f263ee43ade80d86d79f2.tar.gz
try to support pkcs8 v2 format pem file for EdDSA (#281)
* try to support pkcs8 v2 format pem file
-rw-r--r--src/ecdsa/keys.py14
-rw-r--r--src/ecdsa/test_keys.py10
2 files changed, 20 insertions, 4 deletions
diff --git a/src/ecdsa/keys.py b/src/ecdsa/keys.py
index 4a673f6..105d0b2 100644
--- a/src/ecdsa/keys.py
+++ b/src/ecdsa/keys.py
@@ -1124,10 +1124,16 @@ class SigningKey(object):
"Non NULL parameters for a EdDSA key"
)
key_str_der, s = der.remove_octet_string(s)
- if s:
- raise der.UnexpectedDER(
- "trailing junk inside the privateKey"
- )
+
+ # As RFC5958 describe, there are may be optional Attributes
+ # and Publickey. Don't raise error if something after
+ # Privatekey
+
+ # TODO parse attributes or validate publickey
+ # if s:
+ # raise der.UnexpectedDER(
+ # "trailing junk inside the privateKey"
+ # )
key_str, s = der.remove_octet_string(key_str_der)
if s:
raise der.UnexpectedDER(
diff --git a/src/ecdsa/test_keys.py b/src/ecdsa/test_keys.py
index 564f312..0295881 100644
--- a/src/ecdsa/test_keys.py
+++ b/src/ecdsa/test_keys.py
@@ -927,3 +927,13 @@ def test_VerifyingKey_inequality_with_different_secret_points():
sk2 = SigningKey.from_secret_exponent(3, BRAINPOOLP160r1)
assert sk1.verifying_key != sk2.verifying_key
+
+
+def test_SigningKey_from_pem_pkcs8v2_EdDSA():
+ pem = """-----BEGIN PRIVATE KEY-----
+ MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI
+ oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ==
+ -----END PRIVATE KEY-----"""
+
+ sk = SigningKey.from_pem(pem)
+ assert sk.curve == Ed25519