]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testpkey.py
7e71e8c0cf88ab91bdabb22aac434f3bb89fa798
[oss/ctypescrypto.git] / tests / testpkey.py
1 from ctypescrypto.pkey import PKey
2 import unittest
3 from base64 import b64decode, b16decode
4
5 def pem2der(s):
6     start=s.find('-----\n')
7     finish=s.rfind('\n-----END')
8     data=s[start+6:finish]
9     return b64decode(data)
10
11 class TestPKey(unittest.TestCase):
12     rsa="""-----BEGIN PRIVATE KEY-----
13 MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAL9CzVZu9bczTmB8
14 776pPUoPo6WbAfwQqqiGrj91bk2mYE+MNLo4yIQH45IcwGzkyS8+YyQJf8Bux5BC
15 oZ2nwzXm5+JZkxkN1mtMzit2D7/hHmrZLoSbr0sxXFrD4a35RI4hXnSK9Sk01sXA
16 Te2OgHzm5nk1sG97G6SFq7CHe3gvAgMBAAECgYAgGV8K7Y5xk7vIt88oyZCOuHc3
17 mP9JRabOp+PgpJ3BjHXHg/lpc5Q7jHNmF0s4O2GEe0z6RFnbevwlOvmS0xAQ1hpg
18 5TnVVkiZvcJeQaZqWIlEOaLqA12YdhSyorfB6p3tfQ7ZmQusg3SCsru5kPJV4sm0
19 I+MuRCQZWSzIqelloQJBAPbtScJI0lXx8sktntZi69cAVvLtz5z1T7bZwFakNkNE
20 SUCjNc/hEEI6/1LScV8Kx9kgQ0+W8smu+GyUDceyVFECQQDGSeS7cTmojkiPQxPB
21 zb0vS+Nfpq6oYsx+gn5TBgMeWIZZrtMEaUU2o+rwsjKBP/gy6D1zC2b4W5O/A/7a
22 1GR/AkBUQhYoKKc1UpExGtMXfrvRKrmAvatZeM/Rqi4aooAtpfCFEOw82iStJOqY
23 /VxYPRqCuaKeVvjT31O/4SlumihxAkBahRU0NKYbuoiJThfQ23lIBB7SZadKG4A7
24 KJs+j3oQ+lyqyFJwqxX7sazpIJBJzMgjhT24LTZenn++LbbEcz1FAkBmDmxoq7qO
25 Ao6uTm8fnkD4C836wS4mYAPqwRBK1JvnEXEQee9irf+ip89BAg74ViTcGF9lwJwQ
26 gOM+X5Db+3pK
27 -----END PRIVATE KEY-----
28 """
29     rsakeytext="""Public-Key: (1024 bit)
30 Modulus:
31     00:bf:42:cd:56:6e:f5:b7:33:4e:60:7c:ef:be:a9:
32     3d:4a:0f:a3:a5:9b:01:fc:10:aa:a8:86:ae:3f:75:
33     6e:4d:a6:60:4f:8c:34:ba:38:c8:84:07:e3:92:1c:
34     c0:6c:e4:c9:2f:3e:63:24:09:7f:c0:6e:c7:90:42:
35     a1:9d:a7:c3:35:e6:e7:e2:59:93:19:0d:d6:6b:4c:
36     ce:2b:76:0f:bf:e1:1e:6a:d9:2e:84:9b:af:4b:31:
37     5c:5a:c3:e1:ad:f9:44:8e:21:5e:74:8a:f5:29:34:
38     d6:c5:c0:4d:ed:8e:80:7c:e6:e6:79:35:b0:6f:7b:
39     1b:a4:85:ab:b0:87:7b:78:2f
40 Exponent: 65537 (0x10001)
41 """
42     ec1priv="""-----BEGIN PRIVATE KEY-----
43 MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgKnG6neqZvB98EEuuxnHs
44 fv+L/5abuNNG20wzUqRpncOhRANCAARWKXWeUZ6WiCKZ2kHx87jmJyx0G3ZB1iQC
45 +Gp2AJYswbQPhGPigKolzIbZYfwnn7QOca6N8QDhPAn3QQK8trZI
46 -----END PRIVATE KEY-----
47 """
48     ec1keytext="""Public-Key: (256 bit)
49 pub: 
50     04:56:29:75:9e:51:9e:96:88:22:99:da:41:f1:f3:
51     b8:e6:27:2c:74:1b:76:41:d6:24:02:f8:6a:76:00:
52     96:2c:c1:b4:0f:84:63:e2:80:aa:25:cc:86:d9:61:
53     fc:27:9f:b4:0e:71:ae:8d:f1:00:e1:3c:09:f7:41:
54     02:bc:b6:b6:48
55 ASN1 OID: secp256k1
56 """
57     ec1pub="""-----BEGIN PUBLIC KEY-----
58 MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEVil1nlGelogimdpB8fO45icsdBt2QdYk
59 AvhqdgCWLMG0D4Rj4oCqJcyG2WH8J5+0DnGujfEA4TwJ90ECvLa2SA==
60 -----END PUBLIC KEY-----
61 """
62     
63     def test_unencrypted_pem(self):
64         key=PKey(privkey=self.rsa)
65         self.assertIsNotNone(key.key)
66         self.assertEqual(str(key),self.rsakeytext)
67     def test_export_priv_pem(self):
68         key=PKey(privkey=self.ec1priv)
69         out=key.exportpriv()
70         self.assertEqual(self.ec1priv,out)
71     def test_unencrypted_pem_ec(self):
72         
73         key=PKey(privkey=self.ec1priv)
74         self.assertIsNotNone(key.key)
75         self.assertEqual(str(key),self.ec1keytext)
76     def test_unencrypted_der_ec(self):
77         key=PKey(privkey=pem2der(self.ec1priv),format="DER")
78         self.assertIsNotNone(key.key)
79         self.assertEqual(str(key),self.ec1keytext)
80     def test_pubkey_pem(self):
81         key=PKey(pubkey=self.ec1pub)
82         self.assertIsNotNone(key.key)   
83         self.assertEqual(str(key),self.ec1keytext)
84     def test_pubkey_der(self):
85         key=PKey(pubkey=pem2der(self.ec1pub),format="DER")
86         self.assertIsNotNone(key.key)   
87         self.assertEqual(str(key),self.ec1keytext)
88     def test_compare(self):
89         key1=PKey(privkey=self.ec1priv)
90         self.assertIsNotNone(key1.key)
91         key2=PKey(pubkey=self.ec1pub)
92         self.assertIsNotNone(key2.key)
93         self.assertEqual(key1,key2)
94     def test_sign(self):
95         signer=PKey(privkey=self.ec1priv)
96         digest=b16decode("FFCA2587CFD4846E4CB975B503C9EB940F94566AA394E8BD571458B9DA5097D5")
97         signature=signer.sign(digest)
98         self.assertTrue(len(signature)>0)
99         verifier=PKey(pubkey=self.ec1pub)
100         self.assertTrue(verifier.verify(digest,signature))
101     def test_generate(self):
102         newkey=PKey.generate("rsa")
103         self.assertIsNotNone(newkey.key)
104         s=str(newkey)
105         self.assertEqual(s[:s.find("\n")],"Public-Key: (1024 bit)")
106     def test_generate_params(self):
107         newkey=PKey.generate("rsa",rsa_keygen_bits=2048)
108         self.assertIsNotNone(newkey.key)
109         s=str(newkey)
110         self.assertEqual(s[:s.find("\n")],"Public-Key: (2048 bit)")
111     def test_generate_ec(self):
112         templkey=PKey(pubkey=self.ec1pub)
113         newkey=PKey.generate("ec",paramsfrom=templkey)
114         self.assertIsNotNone(newkey.key)
115         s=str(newkey)
116         self.assertEqual(s[:s.find("\n")],"Public-Key: (256 bit)")
117         self.assertNotEqual(str(templkey),str(newkey))
118 if __name__ == "__main__":
119     unittest.main()