Skip to content

Commit

Permalink
Merge pull request #367 from Nitrokey/nk3-test-provisioner
Browse files Browse the repository at this point in the history
nk3 test: Fix provisioner test
  • Loading branch information
robin-nitrokey committed Apr 11, 2023
2 parents 764ebe4 + adb2361 commit a77096c
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions pynitrokey/cli/nk3/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
AID_ADMIN = [0xA0, 0x00, 0x00, 0x08, 0x47, 0x00, 0x00, 0x00, 0x01]
AID_PROVISIONER = [0xA0, 0x00, 0x00, 0x08, 0x47, 0x01, 0x00, 0x00, 0x01]

DEFAULT_EXCLUDES = ["bootloader"]
DEFAULT_EXCLUDES = ["bootloader", "provisioner"]


ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType]
Expand Down Expand Up @@ -187,10 +187,15 @@ def test_bootloader_configuration(
return TestResult(TestStatus.FAILURE, "bootloader not locked")


try:
from smartcard import System
from smartcard.CardConnection import CardConnection
from smartcard.Exceptions import NoCardException
@test_case("provisioner", "Firmware mode")
def test_firmware_mode(ctx: TestContext, device: Nitrokey3Base) -> TestResult:
try:
from smartcard import System
from smartcard.CardConnection import CardConnection
from smartcard.Exceptions import NoCardException
except ImportError:
logger.debug("pcsc feature is deactivated, skipping firmware mode test")
return TestResult(TestStatus.SKIPPED, "pcsc feature is deactivated")

def find_smartcard(uuid: Uuid) -> CardConnection:
for reader in System.readers():
Expand Down Expand Up @@ -218,20 +223,14 @@ def select(conn: CardConnection, aid: list[int]) -> bool:
_, sw1, sw2 = conn.transmit(apdu)
return (sw1, sw2) == (0x90, 0x00)

@test_case("provisioner", "Firmware mode")
def test_firmware_mode(ctx: TestContext, device: Nitrokey3Base) -> TestResult:
uuid = device.uuid()
if not uuid:
return TestResult(TestStatus.SKIPPED, "no UUID")
conn = find_smartcard(uuid)
if select(conn, AID_PROVISIONER):
return TestResult(TestStatus.FAILURE, "provisioner application active")
else:
return TestResult(TestStatus.SUCCESS)

except ImportError:
logger.debug("pcsc feature is deactivated, skipping firmware mode test")
pass
uuid = device.uuid()
if not uuid:
return TestResult(TestStatus.SKIPPED, "no UUID")
conn = find_smartcard(uuid)
if select(conn, AID_PROVISIONER):
return TestResult(TestStatus.FAILURE, "provisioner application active")
else:
return TestResult(TestStatus.SUCCESS)


@test_case("fido2", "FIDO2")
Expand Down

0 comments on commit a77096c

Please sign in to comment.