From b19a1a35e2f81d72d388261fadebbde8a28e2f86 Mon Sep 17 00:00:00 2001 From: Myse1f <602149025@qq.com> Date: Mon, 27 Dec 2021 15:12:19 +0800 Subject: [PATCH 1/3] try to support pkcs8 v2 format pem file --- src/ecdsa/keys.py | 14 ++++++++++---- src/ecdsa/test_keys.py | 9 +++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/ecdsa/keys.py b/src/ecdsa/keys.py index 4a673f6e..b04f5cd8 100644 --- a/src/ecdsa/keys.py +++ b/src/ecdsa/keys.py @@ -1124,10 +1124,16 @@ def from_der(cls, string, hashfunc=sha1, valid_curve_encodings=None): "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 564f3129..5707728a 100644 --- a/src/ecdsa/test_keys.py +++ b/src/ecdsa/test_keys.py @@ -927,3 +927,12 @@ 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(): + pem = """-----BEGIN PRIVATE KEY----- + MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI + oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ== + -----END PRIVATE KEY-----""" + + sk = SigningKey.from_pem(pem) + \ No newline at end of file From 4f7cd71b98bf304ee4546a77424c6f37ef53345d Mon Sep 17 00:00:00 2001 From: Myse1f <602149025@qq.com> Date: Mon, 3 Jan 2022 22:31:22 +0800 Subject: [PATCH 2/3] fix codechecks --- src/ecdsa/keys.py | 8 ++++---- src/ecdsa/test_keys.py | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ecdsa/keys.py b/src/ecdsa/keys.py index b04f5cd8..105d0b25 100644 --- a/src/ecdsa/keys.py +++ b/src/ecdsa/keys.py @@ -1124,11 +1124,11 @@ def from_der(cls, string, hashfunc=sha1, valid_curve_encodings=None): "Non NULL parameters for a EdDSA key" ) key_str_der, s = der.remove_octet_string(s) - - # As RFC5958 describe, there are may be optional Attributes - # and Publickey. Don't raise error if something after + + # 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( diff --git a/src/ecdsa/test_keys.py b/src/ecdsa/test_keys.py index 5707728a..4fe9a9f9 100644 --- a/src/ecdsa/test_keys.py +++ b/src/ecdsa/test_keys.py @@ -928,11 +928,12 @@ def test_VerifyingKey_inequality_with_different_secret_points(): assert sk1.verifying_key != sk2.verifying_key -def test_SigningKey_from_pem_pkcs8v2(): +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 \ No newline at end of file From 3f3d050a4acb8953dee8cf5009f02ccd2fb2c39b Mon Sep 17 00:00:00 2001 From: Myse1f <602149025@qq.com> Date: Tue, 4 Jan 2022 10:56:15 +0800 Subject: [PATCH 3/3] codeformat --- src/ecdsa/test_keys.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ecdsa/test_keys.py b/src/ecdsa/test_keys.py index 4fe9a9f9..02958815 100644 --- a/src/ecdsa/test_keys.py +++ b/src/ecdsa/test_keys.py @@ -928,12 +928,12 @@ def test_VerifyingKey_inequality_with_different_secret_points(): 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 - \ No newline at end of file