|
|
@ -1,79 +1,80 @@
|
|
|
|
from common import *
|
|
|
|
from common import * # isort:skip
|
|
|
|
|
|
|
|
from trezorcrypto import aesgcm, curve25519
|
|
|
|
|
|
|
|
|
|
|
|
import storage
|
|
|
|
import storage
|
|
|
|
from trezor import utils
|
|
|
|
from trezor import utils
|
|
|
|
from trezor.wire.thp.crypto import IV_1, IV_2, Handshake
|
|
|
|
|
|
|
|
from trezorcrypto import aesgcm, curve25519
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if utils.USE_THP:
|
|
|
|
if utils.USE_THP:
|
|
|
|
from trezor.wire.thp import crypto
|
|
|
|
from trezor.wire.thp import crypto
|
|
|
|
|
|
|
|
from trezor.wire.thp.crypto import IV_1, IV_2, Handshake
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_dummy_device_secret():
|
|
|
|
def get_dummy_device_secret():
|
|
|
|
return b"\x01\x02\x03\x04\x05\x06\x07\x08\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
|
|
return b"\x01\x02\x03\x04\x05\x06\x07\x08\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(utils.USE_THP, "only needed for THP")
|
|
|
|
@unittest.skipUnless(utils.USE_THP, "only needed for THP")
|
|
|
|
class TestTrezorHostProtocolCrypto(unittest.TestCase):
|
|
|
|
class TestTrezorHostProtocolCrypto(unittest.TestCase):
|
|
|
|
key_1 = b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07"
|
|
|
|
if utils.USE_THP:
|
|
|
|
handshake = Handshake()
|
|
|
|
handshake = Handshake()
|
|
|
|
# 0:key, 1:nonce, 2:auth_data, 3:plaintext, 4:expected_ciphertext, 5:expected_tag
|
|
|
|
key_1 = b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07"
|
|
|
|
vectors_enc = [
|
|
|
|
# 0:key, 1:nonce, 2:auth_data, 3:plaintext, 4:expected_ciphertext, 5:expected_tag
|
|
|
|
(
|
|
|
|
vectors_enc = [
|
|
|
|
key_1,
|
|
|
|
(
|
|
|
|
0,
|
|
|
|
key_1,
|
|
|
|
b"\x55\x64",
|
|
|
|
0,
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09",
|
|
|
|
b"\x55\x64",
|
|
|
|
b"e2c9dd152fbee5821ea7",
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09",
|
|
|
|
b"10625812de81b14a46b9f1e5100a6d0c",
|
|
|
|
b"e2c9dd152fbee5821ea7",
|
|
|
|
),
|
|
|
|
b"10625812de81b14a46b9f1e5100a6d0c",
|
|
|
|
(
|
|
|
|
),
|
|
|
|
key_1,
|
|
|
|
(
|
|
|
|
1,
|
|
|
|
key_1,
|
|
|
|
b"\x55\x64",
|
|
|
|
1,
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09",
|
|
|
|
b"\x55\x64",
|
|
|
|
b"79811619ddb07c2b99f8",
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09",
|
|
|
|
b"71c6b872cdc499a7e9a3c7441f053214",
|
|
|
|
b"79811619ddb07c2b99f8",
|
|
|
|
),
|
|
|
|
b"71c6b872cdc499a7e9a3c7441f053214",
|
|
|
|
(
|
|
|
|
),
|
|
|
|
key_1,
|
|
|
|
(
|
|
|
|
369,
|
|
|
|
key_1,
|
|
|
|
b"\x55\x64",
|
|
|
|
369,
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
|
|
|
|
b"\x55\x64",
|
|
|
|
b"03bd030390f2dfe815a61c2b157a064f",
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
|
|
|
|
b"c1200f8a7ae9a6d32cef0fff878d55c2",
|
|
|
|
b"03bd030390f2dfe815a61c2b157a064f",
|
|
|
|
),
|
|
|
|
b"c1200f8a7ae9a6d32cef0fff878d55c2",
|
|
|
|
(
|
|
|
|
),
|
|
|
|
key_1,
|
|
|
|
(
|
|
|
|
369,
|
|
|
|
key_1,
|
|
|
|
b"\x55\x64\x73\x82\x91",
|
|
|
|
369,
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
|
|
|
|
b"\x55\x64\x73\x82\x91",
|
|
|
|
b"03bd030390f2dfe815a61c2b157a064f",
|
|
|
|
b"\x00\x01\x02\x03\x04\05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
|
|
|
|
b"693ac160cd93a20f7fc255f049d808d0",
|
|
|
|
b"03bd030390f2dfe815a61c2b157a064f",
|
|
|
|
),
|
|
|
|
b"693ac160cd93a20f7fc255f049d808d0",
|
|
|
|
]
|
|
|
|
),
|
|
|
|
# 0:chaining key, 1:input, 2:output_1, 3:output:2
|
|
|
|
]
|
|
|
|
vectors_hkdf = [
|
|
|
|
# 0:chaining key, 1:input, 2:output_1, 3:output:2
|
|
|
|
(
|
|
|
|
vectors_hkdf = [
|
|
|
|
crypto.PROTOCOL_NAME,
|
|
|
|
(
|
|
|
|
b"\x01\x02",
|
|
|
|
crypto.PROTOCOL_NAME,
|
|
|
|
b"c784373a217d6be057cddc6068e6748f255fc8beb6f99b7b90cbc64aad947514",
|
|
|
|
b"\x01\x02",
|
|
|
|
b"12695451e29bf08ffe5e4e6ab734b0c3d7cdd99b16cd409f57bd4eaa874944ba",
|
|
|
|
b"c784373a217d6be057cddc6068e6748f255fc8beb6f99b7b90cbc64aad947514",
|
|
|
|
),
|
|
|
|
b"12695451e29bf08ffe5e4e6ab734b0c3d7cdd99b16cd409f57bd4eaa874944ba",
|
|
|
|
(
|
|
|
|
),
|
|
|
|
b"\xc7\x84\x37\x3a\x21\x7d\x6b\xe0\x57\xcd\xdc\x60\x68\xe6\x74\x8f\x25\x5f\xc8\xbe\xb6\xf9\x9b\x7b\x90\xcb\xc6\x4a\xad\x94\x75\x14",
|
|
|
|
(
|
|
|
|
b"\x31\x41\x59\x26\x52\x12\x34\x56\x78\x89\x04\xaa",
|
|
|
|
b"\xc7\x84\x37\x3a\x21\x7d\x6b\xe0\x57\xcd\xdc\x60\x68\xe6\x74\x8f\x25\x5f\xc8\xbe\xb6\xf9\x9b\x7b\x90\xcb\xc6\x4a\xad\x94\x75\x14",
|
|
|
|
b"f88c1e08d5c3bae8f6e4a3d3324c8cbc60a805603e399e69c4bf4eacb27c2f48",
|
|
|
|
b"\x31\x41\x59\x26\x52\x12\x34\x56\x78\x89\x04\xaa",
|
|
|
|
b"5f0216bdb7110ee05372286974da8c9c8b96e2efa15b4af430755f462bd79a76",
|
|
|
|
b"f88c1e08d5c3bae8f6e4a3d3324c8cbc60a805603e399e69c4bf4eacb27c2f48",
|
|
|
|
),
|
|
|
|
b"5f0216bdb7110ee05372286974da8c9c8b96e2efa15b4af430755f462bd79a76",
|
|
|
|
]
|
|
|
|
),
|
|
|
|
vectors_iv = [
|
|
|
|
]
|
|
|
|
(0, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
|
|
|
|
vectors_iv = [
|
|
|
|
(1, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"),
|
|
|
|
(0, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
|
|
|
|
(7, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07"),
|
|
|
|
(1, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"),
|
|
|
|
(1025, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01"),
|
|
|
|
(7, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07"),
|
|
|
|
(4294967295, b"\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff"),
|
|
|
|
(1025, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01"),
|
|
|
|
(0xFFFFFFFFFFFFFFFF, b"\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff"),
|
|
|
|
(4294967295, b"\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff"),
|
|
|
|
]
|
|
|
|
(0xFFFFFFFFFFFFFFFF, b"\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff"),
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
def setUp(self):
|
|
|
|
utils.DISABLE_ENCRYPTION = False
|
|
|
|
utils.DISABLE_ENCRYPTION = False
|
|
|
|