X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=blobdiff_plain;f=tests%2Ftest_crts.py;h=e43b4c22fbd23390c83da7eaec791ea4fca461ff;hp=aaf359edf2b15b093f4cbc5540c29a761d5112fe;hb=HEAD;hpb=0cda571fed3308365e094d57dcc9c4db3184e5d8 diff --git a/tests/test_crts.py b/tests/test_crts.py index aaf359e..e43b4c2 100644 --- a/tests/test_crts.py +++ b/tests/test_crts.py @@ -1,6 +1,6 @@ # coding: utf-8 -# PyDERASN -- Python ASN.1 DER codec with abstract structures -# Copyright (C) 2017-2020 Sergey Matveev +# PyDERASN -- Python ASN.1 DER/CER/BER codec with abstract structures +# Copyright (C) 2017-2024 Sergey Matveev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as @@ -17,16 +17,17 @@ from copy import copy from datetime import datetime +from pickle import dumps as pickle_dumps +from pickle import HIGHEST_PROTOCOL as pickle_proto +from pickle import loads as pickle_loads from unittest import TestCase -from six.moves.cPickle import dumps as pickle_dumps -from six.moves.cPickle import HIGHEST_PROTOCOL as pickle_proto -from six.moves.cPickle import loads as pickle_loads - from pyderasn import Any from pyderasn import BitString from pyderasn import Boolean from pyderasn import Choice +from pyderasn import DecodeError +from pyderasn import encode_cer from pyderasn import GeneralizedTime from pyderasn import hexdec from pyderasn import IA5String @@ -43,6 +44,7 @@ from pyderasn import tag_ctxc from pyderasn import tag_ctxp from pyderasn import TeletexString from pyderasn import UTCTime +from pyderasn import UTF8String name2oid = { @@ -101,14 +103,21 @@ class OrganizationName(Choice): ) +class CommonName(Choice): + schema = ( + ("printableString", PrintableString()), + ("utf8String", UTF8String()), + ) + + class AttributeTypeAndValue(Sequence): schema = ( - ("type", AttributeType(defines=(((".", "value"), { + ("type", AttributeType(defines=((("value",), { name2oid["id-at-countryName"]: PrintableString(), name2oid["id-at-localityName"]: PrintableString(), name2oid["id-at-stateOrProvinceName"]: PrintableString(), name2oid["id-at-organizationName"]: OrganizationName(), - name2oid["id-at-commonName"]: PrintableString(), + name2oid["id-at-commonName"]: CommonName(), }),))), ("value", AttributeValue()), ) @@ -154,6 +163,14 @@ class UniqueIdentifier(BitString): pass +class KeyIdentifier(OctetString): + pass + + +class SubjectKeyIdentifier(KeyIdentifier): + pass + + class Extension(Sequence): schema = ( ("extnID", ObjectIdentifier()), @@ -188,6 +205,7 @@ class Certificate(Sequence): ("signatureAlgorithm", AlgorithmIdentifier()), ("signatureValue", BitString()), ) + der_forced = True class TestGoSelfSignedVector(TestCase): @@ -211,7 +229,7 @@ class TestGoSelfSignedVector(TestCase): "ba3ca12568fdc6c7b4511cd40a7f659980402df2b998bb9a4a8cbeb34c0f0a78c", "f8d91ede14a5ed76bf116fe360aafa8821490435", ))) - crt = Certificate().decod(raw) + crt = Certificate().decod(raw, ctx={"keep_memoryview": True}) tbs = crt["tbsCertificate"] self.assertEqual(tbs["version"], 0) self.assertFalse(tbs["version"].decoded) @@ -283,6 +301,7 @@ class TestGoSelfSignedVector(TestCase): "998bb9a4a8cbeb34c0f0a78cf8d91ede14a5ed76bf116fe360aafa8821490435", ))))) self.assertSequenceEqual(crt.encode(), raw) + crt = Certificate().decod(raw) pprint(crt) repr(crt) pickle_loads(pickle_dumps(crt, pickle_proto)) @@ -347,9 +366,15 @@ class TestGoSelfSignedVector(TestCase): "998bb9a4a8cbeb34c0f0a78cf8d91ede14a5ed76bf116fe360aafa8821490435", )))) self.assertSequenceEqual(crt.encode(), raw) + self.assertEqual( + Certificate().decod(encode_cer(crt), ctx={"bered": True}), + crt, + ) class TestGoPayPalVector(TestCase): + """PayPal certificate with "www.paypal.com\x00ssl.secureconnection.cc" name + """ def runTest(self): raw = hexdec("".join(( "30820644308205ada003020102020300f09b300d06092a864886f70d010105050", @@ -403,8 +428,5 @@ class TestGoPayPalVector(TestCase): "07ba44cce54a2d723f9847f626dc054605076321ab469b9c78d5545b3d0c1ec86", "48cb55023826fdbb8221c439607a8bb", ))) - crt = Certificate().decod(raw) - self.assertSequenceEqual(crt.encode(), raw) - pprint(crt) - repr(crt) - pickle_loads(pickle_dumps(crt, pickle_proto)) + with self.assertRaisesRegex(DecodeError, "alphabet value"): + crt = Certificate().decod(raw)