]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blobdiff - tests/testx509.py
Covered StackOfX509 by tests, fixed some typos in pkey docstrings
[oss/ctypescrypto.git] / tests / testx509.py
index 011d487e770c78e9dee3d0d74f64cf3880e38ced..060cc0967623b86bc87c637d3d314db9fec71416 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- encoding: utf-8 -*-
 
-from ctypescrypto.x509 import X509,X509Store,utc
+from ctypescrypto.x509 import X509,X509Store,utc,StackOfX509
 from ctypescrypto.oid import Oid
 from tempfile import NamedTemporaryFile
 import datetime
@@ -118,13 +118,40 @@ zVMSW4SOwg/H7ZMZ2cn6j1g0djIvruFQFGHUqFijyDATI+/GJYw2jxyA
        def test_subject(self):
                c=X509(self.cert1)
                self.assertEqual(unicode(c.subject),u'C=RU,ST=Москва,L=Москва,O=Частное лицо,CN=Виктор Вагнер')
+       def test_subject_str(self):
+               c=X509(self.cert1)
+               self.assertEqual(str(c.subject),b'C=RU,ST=\\D0\\9C\\D0\\BE\\D1\\81\\D0\\BA\\D0\\B2\\D0\\B0,L=\\D0\\9C\\D0\\BE\\D1\\81\\D0\\BA\\D0\\B2\\D0\\B0,O=\\D0\\A7\\D0\\B0\\D1\\81\\D1\\82\\D0\\BD\\D0\\BE\\D0\\B5 \\D0\\BB\\D0\\B8\\D1\\86\\D0\\BE,CN=\\D0\\92\\D0\\B8\\D0\\BA\\D1\\82\\D0\\BE\\D1\\80 \\D0\\92\\D0\\B0\\D0\\B3\\D0\\BD\\D0\\B5\\D1\\80')
+       def test_subject_len(self):
+               c=X509(self.cert1)
+               self.assertEqual(len(c.subject),5)
        def test_issuer(self):
                c=X509(self.cert1)
                self.assertEqual(unicode(c.issuer),u'C=RU,ST=Москва,O=Удостоверяющий центр,CN=Виктор Вагнер,emailAddress=vitus@wagner.pp.ru')
        def test_subjectfields(self):
                c=X509(self.cert1)
                self.assertEqual(c.subject[Oid("C")],"RU")
+               with self.assertRaises(TypeError):
+                       x=c.subject["CN"]
                self.assertEqual(c.subject[Oid("L")],u'\u041c\u043e\u0441\u043a\u0432\u0430')
+       def test_subjectmodify(self):
+               c=X509(self.cert1)
+               with self.assertRaises(ValueError):
+                       c.subject[Oid("CN")]=u'Foo'
+               with self.assertRaises(ValueError):
+                       del c.subject[Oid('CN')]
+       def test_subjectbadsubfield(self):
+               c=X509(self.cert1)
+               with self.assertRaises(KeyError):
+                       x=c.subject[Oid("streetAddress")]
+       def test_subjectfieldindex(self):
+               c=X509(self.cert1)
+               self.assertEqual(repr(c.subject[0]),repr((Oid('C'),u'RU')))
+       def test_subjectbadindex(self):
+               c=X509(self.cert1)
+               with self.assertRaises(IndexError):
+                       x=c.subject[11]
+               with self.assertRaises(IndexError):
+                       x=c.subject[-1]
        def test_notBefore(self):
                c=X509(self.cert1)
                self.assertEqual(c.startDate,datetime.datetime(2014,10,26,19,07,17,0,utc))
@@ -148,6 +175,45 @@ zVMSW4SOwg/H7ZMZ2cn6j1g0djIvruFQFGHUqFijyDATI+/GJYw2jxyA
                self.assertTrue(ca.check_ca())
                notca=X509(self.cert1)
                self.assertFalse(notca.check_ca())
+       def test_extension_count(self):
+               cert=X509(self.cert1)
+               self.assertTrue(len(cert.extensions),4)
+               ca_cert=X509(self.ca_cert)
+               self.assertEqual(len(ca_cert.extensions),3)
+       def test_extension_outofrange(self):
+               cert=X509(self.cert1)
+               with self.assertRaises(IndexError):
+                       cert.extensions[4]
+               with self.assertRaises(IndexError):
+                       cert.extensions[-1]
+       def test_extension_oid(self):
+               cert=X509(self.cert1)
+               ext=cert.extensions[0]
+               ext_id=ext.oid
+               self.assertTrue(isinstance(ext_id,Oid))
+               self.assertEqual(ext_id,Oid('basicConstraints'))
+       def test_extension_text(self):
+               cert=X509(self.cert1)
+               ext=cert.extensions[0]
+               self.assertEqual(str(ext),'CA:FALSE')
+               self.assertEqual(unicode(ext),u'CA:FALSE')
+       def test_extenson_find(self):
+               cert=X509(self.cert1)
+               exts=cert.extensions.find(Oid('subjectAltName'))
+               self.assertEqual(len(exts),1)
+               self.assertEqual(exts[0].oid,Oid('subjectAltName'))
+       def test_extension_bad_find(self):
+               cert=X509(self.cert1)
+               with self.assertRaises(TypeError):
+                       exts=cert.extensions.find('subjectAltName')
+       def test_extenson_critical(self):
+               cert=X509(self.digicert_cert)
+               crit_exts=cert.extensions.find_critical()
+               self.assertEqual(len(crit_exts),2)
+               other_exts=cert.extensions.find_critical(False)
+               self.assertEqual(len(crit_exts)+len(other_exts),len(cert.extensions))
+               self.assertEqual(crit_exts[0].critical,True)
+               self.assertEqual(other_exts[0].critical,False)
        def test_verify_by_key(self):
                ca=X509(self.ca_cert)
                pubkey=ca.pubkey
@@ -156,6 +222,9 @@ zVMSW4SOwg/H7ZMZ2cn6j1g0djIvruFQFGHUqFijyDATI+/GJYw2jxyA
                pk2=c.pubkey
                self.assertFalse(c.verify(key=pk2))
                self.assertTrue(c.verify(key=pubkey))
+       def test_verify_self_singed(self):
+               ca=X509(self.ca_cert)
+               self.assertTrue(ca.verify())
        def test_default_filestore(self):
                store=X509Store(default=True)
                c1=X509(self.cert1)
@@ -181,8 +250,55 @@ zVMSW4SOwg/H7ZMZ2cn6j1g0djIvruFQFGHUqFijyDATI+/GJYw2jxyA
                # signed by some commercial CA should be rejected too
                self.assertFalse(gitcert.verify(store))
                trusted.close()
-               pass
        def test_verify_by_dirstore(self):
                pass
+       def test_certstack1(self):
+               l=[]
+               l.append(X509(self.cert1))
+               self.assertEqual(unicode(l[0].subject[Oid('CN')]),u'Виктор Вагнер')
+               l.append(X509(self.ca_cert))
+               l.append(X509(self.digicert_cert))
+               stack=StackOfX509(certs=l)
+               self.assertEqual(len(stack),3)
+               self.assertTrue(isinstance(stack[1],X509))
+               self.assertEqual(unicode(stack[0].subject[Oid('CN')]),u'Виктор Вагнер')
+               with self.assertRaises(IndexError):
+                       c=stack[-1]
+               with self.assertRaises(IndexError):
+                       c=stack[3]
+               del stack[1]
+               self.assertEqual(len(stack),2)
+               self.assertEqual(unicode(stack[0].subject[Oid('CN')]),u'Виктор Вагнер')
+               self.assertEqual(unicode(stack[1].subject[Oid('CN')]),u'DigiCert High Assurance EV CA-1')
+       def test_certstack2(self):
+               stack=StackOfX509()
+               stack.append(X509(self.cert1))
+               stack.append(X509(self.ca_cert))
+               c=stack[1]
+               stack[1]=X509(self.digicert_cert)
+               self.assertEqual(len(stack),2)
+               self.assertEqual(unicode(stack[1].subject[Oid('CN')]),u'DigiCert High Assurance EV CA-1')
+               with self.assertRaises(IndexError):
+                       stack[-1]=c
+               with self.assertRaises(IndexError):
+                       stack[3]=c
+               with self.assertRaises(TypeError):
+                       stack[0]=self.cert1
+               with self.assertRaises(TypeError):
+                       stack.append(self.cert1)
+       def test_certstack3(self):
+               l=[]
+               l.append(X509(self.cert1))
+               self.assertEqual(unicode(l[0].subject[Oid('CN')]),u'Виктор Вагнер')
+               l.append(X509(self.ca_cert))
+               l.append(X509(self.digicert_cert))
+               stack=StackOfX509(certs=l)
+               stack2=StackOfX509(ptr=stack.ptr,disposable=False)
+               with self.assertRaises(ValueError):
+                       stack3=StackOfX509(ptr=stack.ptr,certs=l)
+               with self.assertRaises(ValueError):
+                       stack2[1]=l[0]
+               with self.assertRaises(ValueError):
+                       stack2.append(l[0])
 if __name__ == '__main__':
        unittest.main()