[ IoTest( name: "Verify", cmd_resp: [ VerifyApplicationPin(), VerifyApplicationPin(pin: "3131313131313131", expected_status: RemainingRetries(2)), VerifyGlobalPin(expected_status: KeyReferenceNotFound), ] ), IoTest( name: "Select", cmd_resp: [ Select ] ), IoTest( name: "Default management key", cmd_resp: [ AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ) ] ), IoTest( name: "Aes management key", cmd_resp: [ AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), SetManagementKey( key: ( algorithm: Aes256, key: "0102030405060708 0102030405060708 0102030405060708 0102030405060708" ) ), AuthenticateManagement( key: ( algorithm: Aes256, key: "0102030405060708 0102030405060708 0102030405060708 0102030405060708" ) ) ] ), IoTest( name: "unauthenticated set management key", cmd_resp: [ SetManagementKey( key: ( algorithm: Aes256, key: "0102030405060708 0102030405060708 0102030405060708 0102030405060708" ), expected_status: SecurityStatusNotSatisfied, ), AuthenticateManagement( key: ( algorithm: Aes256, key: "0102030405060708 0102030405060708 0102030405060708 0102030405060708" ), expected_status_challenge: IncorrectP1OrP2Parameter, expected_status_response: IncorrectP1OrP2Parameter, ) ] ), IoTest( name: "Generate key", cmd_resp: [ AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), IoData( input: "00 47 009A 05 AC 03 80 01 11", output: Len(70), ) ] ), IoTest( name: "PUT DATA", cmd_resp: [ GetData( input: "5C 01 7E", output: Data("7e 12 4f 0b a000000308000010000100 5f2f 02 4010") ), GetData( input: "5C 03 5FC102", output: Len(61) ), PutData( input: "5C 03 5FC102 53 10 000102030405060708090A0B0C0D0E0F", expected_status: SecurityStatusNotSatisfied ), GetData( input: "5C 03 5FC102", output: Len(61) ), AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), PutData( input: "5C 03 5FC102 53 10 000102030405060708090A0B0C0D0E0F", ), GetData( input: "5C 03 5FC102", output: Data("53 10 000102030405060708090A0B0C0D0E0F") ), PutData( input: "5C 01 7E 53 10 000102030405060708090A0B0C0D0E0F", ), GetData( input: "5C 01 7E", output: Data("7e 10 000102030405060708090A0B0C0D0E0F") ), ] ), IoTest( name: "RESET FAILED", cmd_resp: [ Reset( expected_status: ConditionsOfUseNotSatisfied, ), VerifyApplicationPin(pin: "3131313131313131", expected_status: RemainingRetries(2)), VerifyApplicationPin(pin: "3131313131313131", expected_status: RemainingRetries(1)), VerifyApplicationPin(pin: "3131313131313131", expected_status: OperationBlocked), Reset(), ] ), IoTest( name: "UUID", uuid_config: None, cmd_resp: [ GetData( input: "5C 03 5FC102", output: Len(61), ), AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), PutData( input: "5C 03 5FC102 53 3b 3019d4e739d821086c1084210d8360d8210842108421804210c3f3341000112233445566778899aabbccddeeff350839393939313233313e00fe00", ), GetData( input: "5C 03 5FC102", output: Data("53 3b 3019d4e739d821086c1084210d8360d8210842108421804210c3f3341000112233445566778899aabbccddeeff350839393939313233313e00fe00"), ), ] ), IoTest( name: "With UUID", uuid_config: WithUuid("00112233445566778899AABBCCDDEEFF"), cmd_resp: [ GetData( input: "5C 03 5FC102", output: Data("53 3b 3019d4e739d821086c1084210d8360d8210842108421804210c3f3341000112233445566778899aabbccddeeff350839393939313233313e00fe00"), ), AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), PutData( input: "5C 03 5FC102 53 3b 3019d4e739d821086c1084210d8360d8210842108421804210c3f33410B0BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB30839393939313233313e00fe00", ), GetData( input: "5C 03 5FC102", output: Data("53 3b 3019d4e739d821086c1084210d8360d8210842108421804210c3f33410B0BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB30839393939313233313e00fe00"), ), ] ), IoTest( name: "Change reference with too short PIN", cmd_resp: [ ChangePin( new: "31323334FFFFFFFF", expected_status: IncorrectDataParameter, ), ], ), IoTest( name: "Change reference with too short PIN", cmd_resp: [ ChangePin( new: "3232323232323232", old: "3333333333FFFFFF", expected_status: IncorrectDataParameter, ), ], ), IoTest( name: "Pin and Puk", uuid_config: WithBoth("00112233445566778899AABBCCDDEEFF"), cmd_resp: [ ChangePin( new: "313131313131FFFF", ), ChangePuk( new: "0102030405060708", ), VerifyApplicationPin(pin: "313233343536FFFF", expected_status: RemainingRetries(2)), ChangePuk( old: "0102030405060708", new: "AABBCCDDEEFF0011", ), ] ), IoTest( name: "RSA signature value", uuid_config: WithBoth("00112233445566778899AABBCCDDEEFF"), cmd_resp: [ AuthenticateManagement( key: ( algorithm: Tdes, key: "0102030405060708 0102030405060708 0102030405060708" ) ), ImportRsaKey( p: "f39c20ab767b26d5a086b6b4d3bf354d1e08fed0d6d473f70ca89240ddd6f4727c16d0085879d24474d200858a13d17fe388237a5c0477ceb43b0a38111d062378fdec70acb10d0c1970b23ed14f920e8d235d67df7d09006b1d38c58d6ee68df046a00f67e190c466660a27775bc595c914d82959a0d327725311e9291f7829", q: "c96dc86e7c16b50c520c6eddedc8a0f3a899bdd2e0c1ea78361466fc4e6733dd1677afb69bd3d049b4bf50725e998a75d1c5e0257754bc48181acb6cdef217033db29d992c487e75ee6d312b51e3d11472c8393bfb004b666afccdfcd6f3950fc5aeac0a7ee1d599ae95deaf32370c47b811ec04feeb21f09162133b0e9d24c1", e: "010001", // dq: "8c6cfdd390acdff143ee29088d32568b27da6eccea26268941e27d5d9e6732700aaecc103998b457fe2b763115a46333fa57c2093ca515520983fc97dce1d78b49e3111ded12691f5c6641661b04010a096f6eff52e084b0551c039b265bd06a9b7d47b1557da9c5274292697f4f833f28a34df0b9ab41110eb9da004d12dec1", // dp: "ec67f3f0512f5bd56e4dad1ab86e531c7e6c3e548e56681f34429683aa84c27e235bc4108543db40a19975f621b3efd7cb07bf5e2bd40e2c230d34728a70ff1707806ba6408024e83bfbf88e2b73ab8ac17eb3536d379ab7b43b0c6ff23bd033a81bf19261be2d4ddb0d65073db66a7d5c410530c390e5b8df222c3c77b2d959", // qinv: "aceae8faeb532417a93170013886844ea6842ce48d3563ccaa5d76c2b4508a8c1dffa112466e04523626f0bafb113c615bccd36d57044fbbd35e71a34baf2578b10966dcd551109819830df4879948ae59a1f0f7c6475fcc6aabef9017f0a840fbee9521564aedbea12726a3d85fd07fdb37624a318fd50ddd02153d98d83f7e", ), VerifyApplicationPin(), Sign( algo: 0x07, key_reference: 0x9A, data: "01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", output: Data(" 7c 82 0104 82 820100 0b2c35952261a19225aff67826bceadc9ae8ad2b1093bfefa59c54eb578f98a2031e88bdaa9a01630bd7fd0045d105adc9f8d8a0ba09559ef54336a526a64ddca659182f9db713b59ab54ad5aa9dc252e93d817e4a74a237f37704e5e95f4db86618572de02f20a563bf30b04fcea0a17dcc5d45903448b776cadf1dcc0413f6fbc2130fa2570035bac0173410af7e7ac30cbc76bae5f17cff3deaeff1dd674e33dc16d00078d07f10f6cabadc7ce781c6fd81f9b52540a163629d2feb3bd47e548e07c78336724875f801fcc9bcf847a459161ab3cba623e2c52a8a61d4ba271a2bc526f99052d4bcfea7c9b391baeec2326cc5b44a3c4b26b3aeba38fde759 "), ) ] ), ]