Skip to content

Commit 25a4390

Browse files
committed
Add testing for uncovered branches; OpenSSL roundtrip testing
1 parent 33b5c88 commit 25a4390

File tree

1 file changed

+90
-1
lines changed

1 file changed

+90
-1
lines changed

src/ecdsa/test_pyecdsa.py

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,75 @@ def test_sk_from_der_with_short_privkey(self):
515515
sk = SigningKey.from_der(to_decode)
516516
self.assertEqual(sk.privkey.secret_multiplier, 255)
517517

518+
def test_sk_from_p8_der_with_wrong_version(self):
519+
ver_der = der.encode_integer(2)
520+
algorithm_der = der.encode_sequence(
521+
der.encode_oid(1, 2, 840, 10045, 2, 1),
522+
der.encode_oid(1, 2, 840, 10045, 3, 1, 1),
523+
)
524+
privkey_der = der.encode_octet_string(
525+
der.encode_sequence(
526+
der.encode_integer(1), der.encode_octet_string(b"\x00\xff")
527+
)
528+
)
529+
to_decode = der.encode_sequence(ver_der, algorithm_der, privkey_der)
530+
531+
with self.assertRaises(der.UnexpectedDER):
532+
SigningKey.from_der(to_decode)
533+
534+
def test_sk_from_p8_der_with_wrong_algorithm(self):
535+
ver_der = der.encode_integer(1)
536+
algorithm_der = der.encode_sequence(
537+
der.encode_oid(1, 2, 3), der.encode_oid(1, 2, 840, 10045, 3, 1, 1)
538+
)
539+
privkey_der = der.encode_octet_string(
540+
der.encode_sequence(
541+
der.encode_integer(1), der.encode_octet_string(b"\x00\xff")
542+
)
543+
)
544+
to_decode = der.encode_sequence(ver_der, algorithm_der, privkey_der)
545+
546+
with self.assertRaises(der.UnexpectedDER):
547+
SigningKey.from_der(to_decode)
548+
549+
def test_sk_from_p8_der_with_trailing_junk_after_algorithm(self):
550+
ver_der = der.encode_integer(1)
551+
algorithm_der = der.encode_sequence(
552+
der.encode_oid(1, 2, 840, 10045, 2, 1),
553+
der.encode_oid(1, 2, 840, 10045, 3, 1, 1),
554+
der.encode_octet_string(b"junk"),
555+
)
556+
privkey_der = der.encode_octet_string(
557+
der.encode_sequence(
558+
der.encode_integer(1), der.encode_octet_string(b"\x00\xff")
559+
)
560+
)
561+
to_decode = der.encode_sequence(ver_der, algorithm_der, privkey_der)
562+
563+
with self.assertRaises(der.UnexpectedDER):
564+
SigningKey.from_der(to_decode)
565+
566+
def test_sk_from_p8_der_with_trailing_junk_after_key(self):
567+
ver_der = der.encode_integer(1)
568+
algorithm_der = der.encode_sequence(
569+
der.encode_oid(1, 2, 840, 10045, 2, 1),
570+
der.encode_oid(1, 2, 840, 10045, 3, 1, 1),
571+
)
572+
privkey_der = der.encode_octet_string(
573+
der.encode_sequence(
574+
der.encode_integer(1), der.encode_octet_string(b"\x00\xff")
575+
) + der.encode_integer(999)
576+
)
577+
to_decode = der.encode_sequence(
578+
ver_der,
579+
algorithm_der,
580+
privkey_der,
581+
der.encode_octet_string(b"junk"),
582+
)
583+
584+
with self.assertRaises(der.UnexpectedDER):
585+
SigningKey.from_der(to_decode)
586+
518587
def test_sign_with_too_long_hash(self):
519588
sk = SigningKey.from_secret_exponent(12)
520589

@@ -945,11 +1014,20 @@ def do_test_from_openssl(self, curve, hash_name="SHA1"):
9451014
with open("t/privkey.pem") as e:
9461015
fp = e.read()
9471016
sk = SigningKey.from_pem(fp) # 1
948-
sig = sk.sign(data, hashfunc=partial(hashlib.new, hash_name),)
1017+
sig = sk.sign(data, hashfunc=partial(hashlib.new, hash_name))
9491018
self.assertTrue(
9501019
vk.verify(sig, data, hashfunc=partial(hashlib.new, hash_name))
9511020
)
9521021

1022+
run_openssl(
1023+
"pkcs8 -topk8 -nocrypt "
1024+
"-in t/privkey.pem -outform pem -out t/privkey-p8.pem"
1025+
)
1026+
with open("t/privkey-p8.pem", "rb") as e:
1027+
privkey_p8_pem = e.read()
1028+
sk_from_p8 = SigningKey.from_pem(privkey_p8_pem)
1029+
self.assertEqual(sk, sk_from_p8)
1030+
9531031
@pytest.mark.skipif(
9541032
"prime192v1" not in OPENSSL_SUPPORTED_CURVES,
9551033
reason="system openssl does not support prime192v1",
@@ -1112,6 +1190,17 @@ def do_test_to_openssl(self, curve, hash_name="SHA1"):
11121190
% mdarg
11131191
)
11141192

1193+
with open("t/privkey-p8.pem", "wb") as e:
1194+
e.write(sk.to_pem(format="pkcs8"))
1195+
run_openssl(
1196+
"dgst %s -sign t/privkey-p8.pem -out t/data.sig3 t/data.txt"
1197+
% mdarg
1198+
)
1199+
run_openssl(
1200+
"dgst %s -verify t/pubkey.pem -signature t/data.sig3 t/data.txt"
1201+
% mdarg
1202+
)
1203+
11151204

11161205
class DER(unittest.TestCase):
11171206
def test_integer(self):

0 commit comments

Comments
 (0)