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