1from ykman.device import get_name 2from ykman.base import YUBIKEY 3from yubikit.core import TRANSPORT 4from yubikit.management import ( 5 CAPABILITY, 6 FORM_FACTOR, 7 DeviceInfo, 8 DeviceConfig, 9 Version, 10) 11from typing import cast 12 13 14def info(form_factor): 15 return DeviceInfo( 16 config=cast(DeviceConfig, None), 17 serial=None, 18 version=Version(5, 3, 0), 19 form_factor=form_factor, 20 supported_capabilities={TRANSPORT.USB: 0xFF}, # type: ignore 21 is_locked=False, 22 is_fips=False, 23 ) 24 25 26def info_nfc(form_factor): 27 with_nfc = info(form_factor) 28 with_nfc.supported_capabilities[TRANSPORT.NFC] = 0xFF 29 return with_nfc 30 31 32def test_yk5_formfactors(): 33 kt = YUBIKEY.YK4 34 assert get_name(info(FORM_FACTOR.USB_A_KEYCHAIN), kt) == "YubiKey 5A" 35 assert get_name(info_nfc(FORM_FACTOR.USB_A_KEYCHAIN), kt) == "YubiKey 5 NFC" 36 assert get_name(info(FORM_FACTOR.USB_A_NANO), kt) == "YubiKey 5 Nano" 37 assert get_name(info(FORM_FACTOR.USB_C_KEYCHAIN), kt) == "YubiKey 5C" 38 assert get_name(info_nfc(FORM_FACTOR.USB_C_KEYCHAIN), kt) == "YubiKey 5C NFC" 39 assert get_name(info(FORM_FACTOR.USB_C_NANO), kt) == "YubiKey 5C Nano" 40 assert get_name(info(FORM_FACTOR.USB_C_LIGHTNING), kt) == "YubiKey 5Ci" 41 assert get_name(info(FORM_FACTOR.USB_A_BIO), kt) == "YubiKey Bio" 42 assert get_name(info(FORM_FACTOR.USB_C_BIO), kt) == "YubiKey C Bio" 43 assert get_name(info(FORM_FACTOR.UNKNOWN), kt) == "YubiKey 5" 44 assert get_name(info_nfc(FORM_FACTOR.UNKNOWN), kt) == "YubiKey 5 NFC" 45 46 47def fido(device_info): 48 device_info.supported_capabilities[TRANSPORT.USB] = ( 49 CAPABILITY.U2F | CAPABILITY.FIDO2 50 ) 51 if TRANSPORT.NFC in device_info.supported_capabilities: 52 device_info.supported_capabilities[TRANSPORT.NFC] = ( 53 CAPABILITY.U2F | CAPABILITY.FIDO2 54 ) 55 return device_info 56 57 58def test_yk5_fido(): 59 kt = YUBIKEY.YK4 60 assert ( 61 get_name(fido(info(FORM_FACTOR.USB_A_BIO)), kt) == "YubiKey Bio - FIDO Edition" 62 ) 63 assert ( 64 get_name(fido(info(FORM_FACTOR.USB_C_BIO)), kt) 65 == "YubiKey C Bio - FIDO Edition" 66 ) 67 68 69def fips(device_info): 70 device_info.is_fips = True 71 return device_info 72 73 74def test_yk5_fips_formfactors(): 75 kt = YUBIKEY.YK4 76 assert get_name(fips(info(FORM_FACTOR.USB_A_KEYCHAIN)), kt) == "YubiKey 5A FIPS" 77 assert ( 78 get_name(fips(info_nfc(FORM_FACTOR.USB_A_KEYCHAIN)), kt) == "YubiKey 5 NFC FIPS" 79 ) 80 assert get_name(fips(info(FORM_FACTOR.USB_A_NANO)), kt) == "YubiKey 5 Nano FIPS" 81 assert get_name(fips(info(FORM_FACTOR.USB_C_KEYCHAIN)), kt) == "YubiKey 5C FIPS" 82 assert ( 83 get_name(fips(info_nfc(FORM_FACTOR.USB_C_KEYCHAIN)), kt) 84 == "YubiKey 5C NFC FIPS" 85 ) 86 assert get_name(fips(info(FORM_FACTOR.USB_C_NANO)), kt) == "YubiKey 5C Nano FIPS" 87 assert get_name(fips(info(FORM_FACTOR.USB_C_LIGHTNING)), kt) == "YubiKey 5Ci FIPS" 88 assert get_name(fips(info(FORM_FACTOR.USB_A_BIO)), kt) == "YubiKey Bio FIPS" 89 assert get_name(fips(info(FORM_FACTOR.USB_C_BIO)), kt) == "YubiKey C Bio FIPS" 90 assert get_name(fips(info(FORM_FACTOR.UNKNOWN)), kt) == "YubiKey 5 FIPS" 91 assert get_name(fips(info_nfc(FORM_FACTOR.UNKNOWN)), kt) == "YubiKey 5 NFC FIPS" 92