def test_get_ecdh_secret(self, client): pubkey = PrivateKey().pubkey.serialize(compressed=False) payload = Bip32Path.build(DEFAULT_PATH) + pubkey client.apdu_exchange(self.INS, payload, sw1=P1.FIRST, sw2=Curve.PRIME256)
def test_sign_too_large(self, client): max_size = 8000 path = Bip32Path.build(DEFAULT_PATH) payload = path + b"a" * (max_size - 4) with pytest.raises(CommException) as e: self._send_payload(client, payload) assert e.value.sw in [0x6700, 0x6813]
def test_path_too_long(self, client): path = Bip32Path.build(DEFAULT_PATH + "/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0") with pytest.raises(CommException) as e: client.apdu_exchange(self.INS, path, P1.NO_SIGNATURE, P2.NON_CONFIRM) assert e.value.sw == 0x6a80
def test_invalid_hash_len(self, client): payload = Bip32Path.build(DEFAULT_PATH) + b"a" with pytest.raises(CommException) as e: client.apdu_exchange(self.INS, payload, sw1=P1.FIRST, sw2=Curve.PRIME256) assert e.value.sw == 0x6700
def test_sign_valid_tx(self, client, raw_tx_path): with open(raw_tx_path, "r") as fp: tx = fp.read() tx = bytes.fromhex(tx) path = Bip32Path.build(DEFAULT_PATH) payload = path + tx self._send_payload(client, payload)
def test_sign_valid_tx(self, client, raw_tx_path): if raw_tx_path.endswith("19-really-stupid-tx.raw"): pytest.skip(f"skip invalid tx {raw_tx_path}") with open(raw_tx_path, "rb") as fp: tx = fp.read() path = Bip32Path.build(DEFAULT_PATH) payload = path + tx self._send_payload(client, payload)
def test_sign_ssh_blob(self, client): requests = [ b"0\x00", b"username", b"22", b"333\x00", b"4444", b"55555" ] payload = Bip32Path.build(DEFAULT_PATH) for i, request in enumerate(requests): length = len(request) if i == 0 or i == 3: length -= 1 payload += length.to_bytes(4, "big") payload += request data = client.apdu_exchange(self.INS, payload, sw1=P1.FIRST, sw2=Curve.PRIME256) assert data.startswith(b"\x30")
def test_sign_direct_hash(self, client): payload = Bip32Path.build(DEFAULT_PATH) + b"a" * 32 client.apdu_exchange(self.INS, payload, P1.FIRST, Curve.PRIME256)
def test_sign_generic_hash(self, client): payload = Bip32Path.build(DEFAULT_PATH) + b"a" client.apdu_exchange(self.INS, payload, P1.FIRST, Curve.PRIME256) client.apdu_exchange(self.INS, b"b", P1.NEXT, Curve.PRIME256) client.apdu_exchange(self.INS, b"b", P1.LAST, Curve.PRIME256)
def test_path_too_long(self, client): path = Bip32Path.build(DEFAULT_PATH + "/0/0/0/0/0/0") with pytest.raises(CommException) as e: client.apdu_exchange(self.INS, path, P1.FIRST, Curve.PRIME256) assert e.value.sw == 0x6a80
def test_get_public_key(self, client): path = Bip32Path.build(DEFAULT_PATH) client.apdu_exchange(self.INS, path, P1.FIRST, Curve.PRIME256)
def test_sign_invalid_tx(self, client): path = Bip32Path.build(DEFAULT_PATH) payload = path + b"a" * (40) with pytest.raises(CommException) as e: self._send_payload(client, payload) assert e.value.sw in [0x6803, 0x6807]
def test_get_public_key(self, client): path = Bip32Path.build(DEFAULT_PATH) client.apdu_exchange(self.INS, path, P1.NON_CONFIRM, P2.CURVE_SECP256K1)
def test_get_public_key(self, client): path = Bip32Path.build(DEFAULT_PATH) client.apdu_exchange(self.INS, path, P1.NO_SIGNATURE, P2.NON_CONFIRM)