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