mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-14 03:59:30 +00:00
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from ecdsa import ECDH, SigningKey, SECP256k1, VerifyingKey
|
|
from keycard.crypto.aes import aes_cbc_encrypt
|
|
|
|
|
|
def test_full_crypto_vector():
|
|
card_pubkey_bytes = bytes.fromhex(
|
|
'04525481c70263f79c29092e95cfc972e0eb427ea31fe6cc6c96787eb12205737'
|
|
'd431929f0837c66a4ee514578a7d5eb78087927851b15b691a79cdea431bd63d9'
|
|
)
|
|
ephemeral_private_bytes = bytes.fromhex(
|
|
'e3b9a83efa7b113bac4562a77c496de21a9f91a17fa8dcb2384ed7154bb43c5c'
|
|
)
|
|
iv = bytes.fromhex('d2c5feedf4bdb935057f8c78cf92395e')
|
|
expected_ciphertext = bytes.fromhex(
|
|
'4707ca7edf4218c416f252967da55f1b6e2e65f0ffa0305f71501f53aa283fd5'
|
|
'aaa8b049e75288c01034f25893db43d4db4bd6dfc4a6546658dd22227082aa58'
|
|
)
|
|
|
|
ephemeral_key = SigningKey.from_string(
|
|
ephemeral_private_bytes,
|
|
curve=SECP256k1
|
|
)
|
|
card_pubkey = VerifyingKey.from_string(
|
|
card_pubkey_bytes,
|
|
curve=SECP256k1
|
|
)
|
|
|
|
ecdh = ECDH(
|
|
curve=SECP256k1,
|
|
private_key=ephemeral_key,
|
|
public_key=card_pubkey
|
|
)
|
|
shared_secret = ecdh.generate_sharedsecret_bytes()
|
|
|
|
pin = b'123456'
|
|
puk = b'123456789012'
|
|
pairing_secret = b'A' * 32
|
|
plaintext = pin + puk + pairing_secret
|
|
|
|
ciphertext: bytes = aes_cbc_encrypt(shared_secret, iv, plaintext)
|
|
|
|
assert ciphertext == expected_ciphertext, (
|
|
"Ciphertext does not match expected test vector"
|
|
)
|
|
|
|
|
|
def test_crypto_vector_fails_on_mismatch():
|
|
bogus = b"\x00" * 48
|
|
actual = b"\x01" * 48
|
|
assert bogus != actual, "Test vector should intentionally fail mismatch"
|