]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testec.py
ccf289cfe16922f7c09d5705ec3cd243f83e6768
[oss/ctypescrypto.git] / tests / testec.py
1 from ctypescrypto.oid import Oid
2 from ctypescrypto.ec import create
3 from base64 import b16decode
4 from subprocess import Popen, PIPE
5 import unittest
6
7 def dump_key(key):
8     """ Convert key into printable form using openssl utility
9        Used to compare keys which can be stored in different
10        format by different OpenSSL versions
11     """
12     return Popen(["openssl","pkey","-text","-noout"],stdin=PIPE,stdout=PIPE).communicate(key)[0]
13
14 def dump_pub_key(key):
15     """ Convert key into printable form using openssl utility
16        Used to compare keys which can be stored in different
17        format by different OpenSSL versions
18     """
19     return Popen(["openssl","pkey","-text_pub","-noout"],stdin=PIPE,stdout=PIPE).communicate(key)[0]
20 class TestEcCreation(unittest.TestCase):
21     ec1priv="""-----BEGIN PRIVATE KEY-----
22 MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgKnG6neqZvB98EEuuxnHs
23 fv+L/5abuNNG20wzUqRpncOhRANCAARWKXWeUZ6WiCKZ2kHx87jmJyx0G3ZB1iQC
24 +Gp2AJYswbQPhGPigKolzIbZYfwnn7QOca6N8QDhPAn3QQK8trZI
25 -----END PRIVATE KEY-----
26 """
27     bigkey="""-----BEGIN PRIVATE KEY-----
28 MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgAAAAAAAAAAAAAAAAAAAA
29 AUVRIxlQt1/EQC2hcy/Jvr6hRANCAASRZsKJufkF5V+ePfn2nX81a0oiCV+JT0cV
30 cUqktWYGr/GB65Zr5Ky1z/nha2bYCb6U4hTwbJP9CRCZr5hJklXn
31 -----END PRIVATE KEY-----
32 """
33     def test_keyone(self):
34         key=create(Oid("secp256k1"),b16decode("2A71BA9DEA99BC1F7C104BAEC671EC7EFF8BFF969BB8D346DB4C3352A4699DC3",True))
35             
36         out=key.exportpriv()
37         self.assertEqual(dump_key(out),dump_key(self.ec1priv))
38         self.assertEqual(str(key),dump_pub_key(self.ec1priv))
39
40     def test_bignum(self):
41         keyval='\xff'*32
42         key=create(Oid("secp256k1"),keyval)
43         self.assertEqual(dump_key(key.exportpriv()),dump_key(self.bigkey))
44         self.assertEqual(str(key),dump_pub_key(self.bigkey))
45 if __name__ == "__main__":
46     unittest.main()