from common import * # isort:skip from trezor.crypto import der class TestCryptoDer(unittest.TestCase): vectors_seq = [ ( ( "9a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b70771", "2b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781", ), "30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781", ), ( ( "6666666666666666666666666666666666666666666666666666666666666666", "7777777777777777777777777777777777777777777777777777777777777777", ), "30440220666666666666666666666666666666666666666666666666666666666666666602207777777777777777777777777777777777777777777777777777777777777777", ), ( ( "6666666666666666666666666666666666666666666666666666666666666666", "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", ), "304502206666666666666666666666666666666666666666666666666666666666666666022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", ), ( ( "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "7777777777777777777777777777777777777777777777777777777777777777", ), "3045022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee02207777777777777777777777777777777777777777777777777777777777777777", ), ( ( "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), "3046022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee022100ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ), ( ( "0000000000000000000000000000000000000000000000000000000000000066", "0000000000000000000000000000000000000000000000000000000000000077", ), "3006020166020177", ), ( ( "0000000000000000000000000000000000000000000000000000000000000066", "00000000000000000000000000000000000000000000000000000000000000ee", ), "3007020166020200ee", ), ( ( "00000000000000000000000000000000000000000000000000000000000000ee", "0000000000000000000000000000000000000000000000000000000000000077", ), "3007020200ee020177", ), ( ( "00000000000000000000000000000000000000000000000000000000000000ee", "00000000000000000000000000000000000000000000000000000000000000ff", ), "3008020200ee020200ff", ), ] def test_der_encode_seq(self): for s, d in self.vectors_seq: s = tuple(unhexlify(i) for i in s) d = unhexlify(d) d2 = der.encode_seq(s) self.assertEqual(d2, d) s = [i.lstrip(b"\x00") for i in s] s2 = der.decode_seq(d) self.assertEqual(s2, s) def test_der_encode_decode_long_seq(self): for length in (1, 127, 128, 129, 255, 256, 257): raw_int = bytes((i & 0xFE) + 1 for i in range(length)) for leading_zeros in range(3): encoded = der.encode_seq((b"\x00" * leading_zeros + raw_int,)) decoded = der.decode_seq(encoded) self.assertEqual(decoded, [raw_int]) for zeroes in range(3): encoded = der.encode_seq((b"\x00" * zeroes,)) decoded = der.decode_seq(encoded) self.assertEqual(decoded, [b"\x00"]) if __name__ == "__main__": unittest.main()