diff options
| author | Myse1f <602149025@qq.com> | 2022-01-04 20:35:32 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-04 13:35:32 +0100 |
| commit | 065b40c43e066de6df7f263ee43ade80d86d79f2 (patch) | |
| tree | 5fc086cfa0e81ace2b31b3275fbca0c554dc1e35 | |
| parent | 4de8d5bf89089d1140eb99aa5d7eb2dc8e6337b6 (diff) | |
| download | ecdsa-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.py | 14 | ||||
| -rw-r--r-- | src/ecdsa/test_keys.py | 10 |
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 |
