mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-14 20:19:51 +00:00
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import pytest
|
|
from keycard.commands.unblock_pin import unblock_pin
|
|
from keycard import constants
|
|
|
|
|
|
def test_unblock_pin_with_valid_str(card):
|
|
puk = '123456789012'
|
|
pin = '123456'
|
|
unblock_pin(card, puk + pin)
|
|
card.send_secure_apdu.assert_called_once_with(
|
|
ins=constants.INS_UNBLOCK_PIN,
|
|
data=(puk + pin).encode('utf-8')
|
|
)
|
|
|
|
|
|
def test_unblock_pin_with_valid_bytes(card):
|
|
data = b'123456789012123456'
|
|
unblock_pin(card, data)
|
|
card.send_secure_apdu.assert_called_once_with(
|
|
ins=constants.INS_UNBLOCK_PIN,
|
|
data=data
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize('bad_input', [
|
|
'12345678901212345', # Too short
|
|
'1234567890121234567', # Too long
|
|
b'12345678901212345', # Too short (bytes)
|
|
b'1234567890121234567', # Too long (bytes)
|
|
])
|
|
def test_unblock_pin_invalid_length(card, bad_input):
|
|
with pytest.raises(ValueError, match='exactly 18 digits'):
|
|
unblock_pin(card, bad_input)
|
|
|
|
|
|
@pytest.mark.parametrize('bad_input', [
|
|
'12345678901A123456', # Non-digit in PUK
|
|
'12345678901212345A', # Non-digit in PIN
|
|
'ABCDEFGHIJKL123456', # All non-digits in PUK
|
|
])
|
|
def test_unblock_pin_invalid_digits(card, bad_input):
|
|
with pytest.raises(ValueError, match='must be numeric digits'):
|
|
unblock_pin(card, bad_input)
|