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:
parent
8d1109986c
commit
9fb6e328a0
21
src/trezor/crypto/der.py
Normal file
21
src/trezor/crypto/der.py
Normal 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
|
53
tests/test_trezor.crypto.der.py
Normal file
53
tests/test_trezor.crypto.der.py
Normal 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()
|
Loading…
Reference in New Issue
Block a user