1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-29 10:58:21 +00:00

trezor.crypto: add der module

This commit is contained in:
Pavol Rusnak 2016-11-08 16:59:08 +01:00
parent 8d1109986c
commit 9fb6e328a0
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
2 changed files with 74 additions and 0 deletions

21
src/trezor/crypto/der.py Normal file
View File

@ -0,0 +1,21 @@
def convert_length(l: int):
if l < 0x80:
return bytes([l])
elif l <= 0xFF:
return bytes([0x81, l])
elif l <= 0xFFFF:
return bytes([0x82, l & 0xFF, l >> 8])
else:
raise ValueError
def convert_int(i: bytes):
i = i.lstrip(b'\x00')
if i[0] >= 0x80:
i = b'\x00' + i
return b'\x02' + convert_length(len(i)) + i
def convert_seq(seq: tuple):
res = b''
for i in seq:
res += convert_int(i)
return b'\x30' + convert_length(len(res)) + res

View File

@ -0,0 +1,53 @@
from common import *
from trezor.crypto import der
class TestCryptoDer(unittest.TestCase):
vectors_sig = [
("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_encode_sig_der(self):
for r, s, d in self.vectors_sig:
r, s, d = unhexlify(r), unhexlify(s), unhexlify(d)
d2 = der.convert_seq((r,s))
self.assertEqual(d, d2)
if __name__ == '__main__':
unittest.main()