doc/examples.rst | 4 ++-- doc/news.rst | 1 + pyderasn.py | 15 --------------- tests/test_crts.py | 13 ++++++------- tests/test_pyderasn.py | 112 +++++++++++++++++++++++++---------------------------- diff --git a/doc/examples.rst b/doc/examples.rst index e8f807b218f5428974340804a9016514769a972e93d73dca0af5a647c3b259d8..fb8455b9332ed8c7c3a105d24d5dc646047750ecf98a17750acbe164c249b957 100644 --- a/doc/examples.rst +++ b/doc/examples.rst @@ -260,7 +260,7 @@ spki = SubjectPublicKeyInfo() spki_algo_id = copy(sign_algo_id) spki_algo_id["algorithm"] = ObjectIdentifier("1.2.840.113549.1.1.1") spki["algorithm"] = spki_algo_id - spki["subjectPublicKey"] = BitString(hexdec("".join(( + spki["subjectPublicKey"] = BitString(bytes.fromhex("".join(( "3048024100cdb7639c3278f006aa277f6eaf42902b592d8cbcbe38a1c92ba4695", "a331b1deadeadd8e9a5c27e8c4c2fd0a8889657722a4f2af7589cf2c77045dc8f", "deec357d0203010001", @@ -270,7 +270,7 @@ crt = Certificate() crt["tbsCertificate"] = tbs crt["signatureAlgorithm"] = sign_algo_id - crt["signatureValue"] = BitString(hexdec("".join(( + crt["signatureValue"] = BitString(bytes.fromhex("".join(( "a67b06ec5ece92772ca413cba3ca12568fdc6c7b4511cd40a7f659980402df2b", "998bb9a4a8cbeb34c0f0a78cf8d91ede14a5ed76bf116fe360aafa8821490435", )))) diff --git a/doc/news.rst b/doc/news.rst index 23867ff806215a5df5cdbdc8e8f76d98ebbaa048ab05c9ca629b67685b58566b..4779060da5120d09582ddc2d451fdcc2fac0600ee1502a6f33e64d40c347bb75 100644 --- a/doc/news.rst +++ b/doc/news.rst @@ -7,6 +7,7 @@ 9.4 --- * Just a checkpoint/snapshot release, aggregating multiple project's domain name changes +* Removed ``hexenc()`` and ``hexdec`` utility functions .. _release9.3: diff --git a/pyderasn.py b/pyderasn.py index 9dd3396955f4e450571a975ec7e7165a7b968e88ef80fb9e5574fa3ada43332d..24d5998886b4590c92b44173e10263aa61f4d8ce6ab77dc44ff58e823438b115 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -1038,8 +1038,6 @@ .. autofunction:: pyderasn.colonize_hex .. autofunction:: pyderasn.encode2pass .. autofunction:: pyderasn.encode_cer .. autofunction:: pyderasn.file_mmaped -.. autofunction:: pyderasn.hexenc -.. autofunction:: pyderasn.hexdec .. autofunction:: pyderasn.hexdump .. autofunction:: pyderasn.tag_encode .. autofunction:: pyderasn.tag_decode @@ -1217,8 +1215,6 @@ "file_mmaped", "GeneralizedTime", "GeneralString", "GraphicString", - "hexdec", - "hexenc", "IA5String", "Integer", "InvalidLength", @@ -1454,17 +1450,6 @@ ######################################################################## # Basic coders ######################################################################## - -def hexdec(data): - """Binary data to hexadecimal string convert - """ - return bytes.fromhex(data) - - -def hexenc(data): - """Hexadecimal string to binary data convert - """ - return data.hex() def int_bytes_len(num, byte_len=8): diff --git a/tests/test_crts.py b/tests/test_crts.py index 7433185d7a86388ace2c16dd8f0b83879d483eee9a6d8c60037799ac0c54c2a1..5858dafa0c4c47f6bbf8c7a4f7736f1cf0ba50a7a010a267ea5e6e7a8920cb4b 100644 --- a/tests/test_crts.py +++ b/tests/test_crts.py @@ -29,7 +29,6 @@ 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 from pyderasn import Integer from pyderasn import Null @@ -210,7 +209,7 @@ class TestGoSelfSignedVector(TestCase): def runTest(self): - raw = hexdec("".join(( + raw = bytes.fromhex("".join(( "30820218308201c20209008cc3379210ec2c98300d06092a864886f70d0101050", "500308192310b3009060355040613025858311330110603550408130a536f6d65", "2d5374617465310d300b06035504071304436974793121301f060355040a13184", @@ -284,7 +283,7 @@ assert_raw_equals(tbs["subject"], issuer) spki = SubjectPublicKeyInfo() algo_id["algorithm"] = name2oid["id-rsaEncryption"] spki["algorithm"] = algo_id - spki["subjectPublicKey"] = BitString(hexdec("".join(( + spki["subjectPublicKey"] = BitString(bytes.fromhex("".join(( "3048024100cdb7639c3278f006aa277f6eaf42902b592d8cbcbe38a1c92ba4695", "a331b1deadeadd8e9a5c27e8c4c2fd0a8889657722a4f2af7589cf2c77045dc8f", "deec357d0203010001", @@ -296,7 +295,7 @@ self.assertNotIn("subjectUniqueID", tbs) self.assertNotIn("extensions", tbs) algo_id["algorithm"] = name2oid["id-sha1WithRSAEncryption"] self.assertEqual(crt["signatureAlgorithm"], algo_id) - self.assertEqual(crt["signatureValue"], BitString(hexdec("".join(( + self.assertEqual(crt["signatureValue"], BitString(bytes.fromhex("".join(( "a67b06ec5ece92772ca413cba3ca12568fdc6c7b4511cd40a7f659980402df2b", "998bb9a4a8cbeb34c0f0a78cf8d91ede14a5ed76bf116fe360aafa8821490435", ))))) @@ -351,7 +350,7 @@ spki = SubjectPublicKeyInfo() spki_algo_id = copy(sign_algo_id) spki_algo_id["algorithm"] = name2oid["id-rsaEncryption"] spki["algorithm"] = spki_algo_id - spki["subjectPublicKey"] = BitString(hexdec("".join(( + spki["subjectPublicKey"] = BitString(bytes.fromhex("".join(( "3048024100cdb7639c3278f006aa277f6eaf42902b592d8cbcbe38a1c92ba4695", "a331b1deadeadd8e9a5c27e8c4c2fd0a8889657722a4f2af7589cf2c77045dc8f", "deec357d0203010001", @@ -361,7 +360,7 @@ crt = Certificate() crt["tbsCertificate"] = tbs crt["signatureAlgorithm"] = sign_algo_id - crt["signatureValue"] = BitString(hexdec("".join(( + crt["signatureValue"] = BitString(bytes.fromhex("".join(( "a67b06ec5ece92772ca413cba3ca12568fdc6c7b4511cd40a7f659980402df2b", "998bb9a4a8cbeb34c0f0a78cf8d91ede14a5ed76bf116fe360aafa8821490435", )))) @@ -376,7 +375,7 @@ class TestGoPayPalVector(TestCase): """PayPal certificate with "www.paypal.com\x00ssl.secureconnection.cc" name """ def runTest(self): - raw = hexdec("".join(( + raw = bytes.fromhex("".join(( "30820644308205ada003020102020300f09b300d06092a864886f70d010105050", "030820112310b3009060355040613024553311230100603550408130942617263", "656c6f6e61311230100603550407130942617263656c6f6e61312930270603550", diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index b5d84d9314e51cc597fecd2c1aa5bdb7dde2b357fd6237938d69e1e5c7f9841a..485dc0954f996caa46fa72ed9a44fffd5dd6d050e781f8b44980f68356e89510 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -77,8 +77,6 @@ from pyderasn import ExceedingData from pyderasn import GeneralizedTime from pyderasn import GeneralString from pyderasn import GraphicString -from pyderasn import hexdec -from pyderasn import hexenc from pyderasn import IA5String from pyderasn import Integer from pyderasn import InvalidLength @@ -165,12 +163,6 @@ return with self.assertRaisesRegex(ExceedingData, "%d trailing bytes" % len(junk)) as err: call() repr(err) - - -class TestHex(TestCase): - @given(binary()) - def test_symmetric(self, data): - self.assertEqual(hexdec(hexenc(data)), data) class TestTagCoder(TestCase): @@ -631,7 +623,7 @@ ) obj_expled_hex_encoded = obj_expled.hexencode() ctx_copied = deepcopy(ctx_dummy) obj_decoded, tail = obj_expled.hexdecode( - obj_expled_hex_encoded + hexenc(tail_junk), + obj_expled_hex_encoded + tail_junk.hex(), offset=offset, ctx=ctx_copied, ) @@ -660,12 +652,12 @@ ) self.assertEqual(obj_decoded.expl_offset, offset) assert_exceeding_data( self, - lambda: obj_expled.hexdecod(obj_expled_hex_encoded + hexenc(tail_junk)), + lambda: obj_expled.hexdecod(obj_expled_hex_encoded + tail_junk.hex()), tail_junk, ) evgens = list(obj_expled.decode_evgen( - hexdec(obj_expled_hex_encoded) + tail_junk, + bytes.fromhex(obj_expled_hex_encoded) + tail_junk, offset=offset, decode_path=decode_path, ctx=ctx_copied, @@ -1894,11 +1886,11 @@ ) def test_x690_vector(self): vector = BitString("'0A3B5F291CD'H") - obj, tail = BitString().decode(hexdec("0307040A3B5F291CD0")) + obj, tail = BitString().decode(bytes.fromhex("0307040A3B5F291CD0")) self.assertSequenceEqual(tail, b"") self.assertEqual(obj, vector) obj, tail = BitString().decode( - hexdec("23800303000A3B0305045F291CD00000"), + bytes.fromhex("23800303000A3B0305045F291CD00000"), ctx={"bered": True}, ) self.assertSequenceEqual(tail, b"") @@ -3093,11 +3085,11 @@ ))) def test_go_non_minimal_encoding(self): with self.assertRaises(DecodeError): - ObjectIdentifier().decode(hexdec("060a2a80864886f70d01010b")) + ObjectIdentifier().decode(bytes.fromhex("060a2a80864886f70d01010b")) def test_x690_vector(self): self.assertEqual( - ObjectIdentifier().decode(hexdec("0603883703"))[0], + ObjectIdentifier().decode(bytes.fromhex("0603883703"))[0], ObjectIdentifier((2, 999, 3)), ) @@ -4010,7 +4002,7 @@ def text_alphabet(self): return " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" def test_x690_vector(self): - obj, tail = VisibleString().decode(hexdec("1A054A6F6E6573")) + obj, tail = VisibleString().decode(bytes.fromhex("1A054A6F6E6573")) self.assertSequenceEqual(tail, b"") self.assertEqual(str(obj), "Jones") self.assertFalse(obj.ber_encoded) @@ -4018,7 +4010,7 @@ self.assertFalse(obj.lenindef) self.assertFalse(obj.bered) obj, tail = VisibleString().decode( - hexdec("3A0904034A6F6E04026573"), + bytes.fromhex("3A0904034A6F6E04026573"), ctx={"bered": True}, ) self.assertSequenceEqual(tail, b"") @@ -4032,7 +4024,7 @@ self.assertFalse(obj.lenindef) self.assertTrue(obj.bered) obj, tail = VisibleString().decode( - hexdec("3A8004034A6F6E040265730000"), + bytes.fromhex("3A8004034A6F6E040265730000"), ctx={"bered": True}, ) self.assertSequenceEqual(tail, b"") @@ -6539,7 +6531,7 @@ schema = ( ("name", IA5String()), ("ok", Boolean()), ) - seq = Seq().decode(hexdec("300A1605536d6974680101FF"))[0] + seq = Seq().decode(bytes.fromhex("300A1605536d6974680101FF"))[0] self.assertEqual(seq["name"], "Smith") self.assertEqual(seq["ok"], True) @@ -7277,11 +7269,11 @@ class TestGoMarshalVectors(TestCase): def runTest(self): - self.assertSequenceEqual(Integer(10).encode(), hexdec("02010a")) - self.assertSequenceEqual(Integer(127).encode(), hexdec("02017f")) - self.assertSequenceEqual(Integer(128).encode(), hexdec("02020080")) - self.assertSequenceEqual(Integer(-128).encode(), hexdec("020180")) - self.assertSequenceEqual(Integer(-129).encode(), hexdec("0202ff7f")) + self.assertSequenceEqual(Integer(10).encode(), bytes.fromhex("02010a")) + self.assertSequenceEqual(Integer(127).encode(), bytes.fromhex("02017f")) + self.assertSequenceEqual(Integer(128).encode(), bytes.fromhex("02020080")) + self.assertSequenceEqual(Integer(-128).encode(), bytes.fromhex("020180")) + self.assertSequenceEqual(Integer(-129).encode(), bytes.fromhex("0202ff7f")) class Seq(Sequence): schema = ( @@ -7290,12 +7282,12 @@ ("zweite", Integer(optional=True)) ) seq = Seq() seq["erste"] = Integer(64) - self.assertSequenceEqual(seq.encode(), hexdec("3003020140")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3003020140")) seq["erste"] = Integer(0x123456) - self.assertSequenceEqual(seq.encode(), hexdec("30050203123456")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("30050203123456")) seq["erste"] = Integer(64) seq["zweite"] = Integer(65) - self.assertSequenceEqual(seq.encode(), hexdec("3006020140020141")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3006020140020141")) class NestedSeq(Sequence): schema = ( @@ -7305,11 +7297,11 @@ seq["erste"] = Integer(127) seq["zweite"] = None nested = NestedSeq() nested["nest"] = seq - self.assertSequenceEqual(nested.encode(), hexdec("3005300302017f")) + self.assertSequenceEqual(nested.encode(), bytes.fromhex("3005300302017f")) self.assertSequenceEqual( OctetString(b"\x01\x02\x03").encode(), - hexdec("0403010203"), + bytes.fromhex("0403010203"), ) class Seq(Sequence): @@ -7318,7 +7310,7 @@ ("erste", Integer(impl=tag_encode(5, klass=TagClassContext))), ) seq = Seq() seq["erste"] = Integer(64) - self.assertSequenceEqual(seq.encode(), hexdec("3003850140")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3003850140")) class Seq(Sequence): schema = ( @@ -7326,7 +7318,7 @@ ("erste", Integer(expl=tag_ctxc(5))), ) seq = Seq() seq["erste"] = Integer(64) - self.assertSequenceEqual(seq.encode(), hexdec("3005a503020140")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3005a503020140")) class Seq(Sequence): schema = ( @@ -7337,21 +7329,21 @@ )), ) seq = Seq() seq["erste"] = Null() - self.assertSequenceEqual(seq.encode(), hexdec("30028000")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("30028000")) seq["erste"] = None - self.assertSequenceEqual(seq.encode(), hexdec("3000")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3000")) self.assertSequenceEqual( UTCTime(datetime(1970, 1, 1, 0, 0)).encode(), - hexdec("170d3730303130313030303030305a"), + bytes.fromhex("170d3730303130313030303030305a"), ) self.assertSequenceEqual( UTCTime(datetime(2009, 11, 15, 22, 56, 16)).encode(), - hexdec("170d3039313131353232353631365a"), + bytes.fromhex("170d3039313131353232353631365a"), ) self.assertSequenceEqual( GeneralizedTime(datetime(2100, 4, 5, 12, 1, 1)).encode(), - hexdec("180f32313030303430353132303130315a"), + bytes.fromhex("180f32313030303430353132303130315a"), ) class Seq(Sequence): @@ -7362,44 +7354,44 @@ seq = Seq() seq["erste"] = GeneralizedTime(datetime(2009, 11, 15, 22, 56, 16)) self.assertSequenceEqual( seq.encode(), - hexdec("3011180f32303039313131353232353631365a"), + bytes.fromhex("3011180f32303039313131353232353631365a"), ) self.assertSequenceEqual( BitString((1, b"\x80")).encode(), - hexdec("03020780"), + bytes.fromhex("03020780"), ) self.assertSequenceEqual( BitString((12, b"\x81\xF0")).encode(), - hexdec("03030481f0"), + bytes.fromhex("03030481f0"), ) self.assertSequenceEqual( ObjectIdentifier("1.2.3.4").encode(), - hexdec("06032a0304"), + bytes.fromhex("06032a0304"), ) self.assertSequenceEqual( ObjectIdentifier("1.2.840.133549.1.1.5").encode(), - hexdec("06092a864888932d010105"), + bytes.fromhex("06092a864888932d010105"), ) self.assertSequenceEqual( ObjectIdentifier("2.100.3").encode(), - hexdec("0603813403"), + bytes.fromhex("0603813403"), ) self.assertSequenceEqual( PrintableString("test").encode(), - hexdec("130474657374"), + bytes.fromhex("130474657374"), ) self.assertSequenceEqual( PrintableString("x" * 127).encode(), - hexdec("137F" + "78" * 127), + bytes.fromhex("137F" + "78" * 127), ) self.assertSequenceEqual( PrintableString("x" * 128).encode(), - hexdec("138180" + "78" * 128), + bytes.fromhex("138180" + "78" * 128), ) - self.assertSequenceEqual(UTF8String("Σ").encode(), hexdec("0c02cea3")) + self.assertSequenceEqual(UTF8String("Σ").encode(), bytes.fromhex("0c02cea3")) class Seq(Sequence): schema = ( @@ -7407,7 +7399,7 @@ ("erste", IA5String()), ) seq = Seq() seq["erste"] = IA5String("test") - self.assertSequenceEqual(seq.encode(), hexdec("3006160474657374")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3006160474657374")) class Seq(Sequence): schema = ( @@ -7415,11 +7407,11 @@ ("erste", PrintableString()), ) seq = Seq() seq["erste"] = PrintableString("test") - self.assertSequenceEqual(seq.encode(), hexdec("3006130474657374")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3006130474657374")) # Asterisk is actually not allowable pyderasn.PRINTABLE_ALLOWABLE_CHARS |= set(b"*") seq["erste"] = PrintableString("test*") - self.assertSequenceEqual(seq.encode(), hexdec("30071305746573742a")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("30071305746573742a")) pyderasn.PRINTABLE_ALLOWABLE_CHARS -= set(b"*") class Seq(Sequence): @@ -7429,13 +7421,13 @@ ("zweite", Integer()), ) seq = Seq() seq["zweite"] = Integer(64) - self.assertSequenceEqual(seq.encode(), hexdec("3003020140")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3003020140")) class Seq(SetOf): schema = Integer() seq = Seq() seq.append(Integer(10)) - self.assertSequenceEqual(seq.encode(), hexdec("310302010a")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("310302010a")) class _SeqOf(SequenceOf): schema = PrintableString() @@ -7446,7 +7438,7 @@ _seqof = _SeqOf() _seqof.append(PrintableString("1")) seqof = SeqOf() seqof.append(_seqof) - self.assertSequenceEqual(seqof.encode(), hexdec("30053003130131")) + self.assertSequenceEqual(seqof.encode(), bytes.fromhex("30053003130131")) class Seq(Sequence): schema = ( @@ -7454,11 +7446,11 @@ ("erste", Integer(default=1)), ) seq = Seq() seq["erste"] = Integer(0) - self.assertSequenceEqual(seq.encode(), hexdec("3003020100")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3003020100")) seq["erste"] = Integer(1) - self.assertSequenceEqual(seq.encode(), hexdec("3000")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3000")) seq["erste"] = Integer(2) - self.assertSequenceEqual(seq.encode(), hexdec("3003020102")) + self.assertSequenceEqual(seq.encode(), bytes.fromhex("3003020102")) class TestPP(TestCase): @@ -7835,7 +7827,7 @@ class TestX690PrefixedType(TestCase): def test_1(self): self.assertSequenceEqual( VisibleString("Jones").encode(), - hexdec("1A054A6F6E6573"), + bytes.fromhex("1A054A6F6E6573"), ) def test_2(self): @@ -7844,7 +7836,7 @@ VisibleString( "Jones", impl=tag_encode(3, klass=TagClassApplication), ).encode(), - hexdec("43054A6F6E6573"), + bytes.fromhex("43054A6F6E6573"), ) def test_3(self): @@ -7856,7 +7848,7 @@ impl=tag_encode(3, klass=TagClassApplication), ), expl=tag_ctxc(2), ).encode(), - hexdec("A20743054A6F6E6573"), + bytes.fromhex("A20743054A6F6E6573"), ) def test_4(self): @@ -7868,13 +7860,13 @@ impl=tag_encode(3, klass=TagClassApplication), ).encode(), impl=tag_encode(7, form=TagFormConstructed, klass=TagClassApplication), ).encode(), - hexdec("670743054A6F6E6573"), + bytes.fromhex("670743054A6F6E6573"), ) def test_5(self): self.assertSequenceEqual( VisibleString("Jones", impl=tag_ctxp(2)).encode(), - hexdec("82054A6F6E6573"), + bytes.fromhex("82054A6F6E6573"), )