I am developing a FIDO 2.0 authenticator and all of the conformance tests have passed except for one (HID-1 Test CTAP2 HID support - test P-11) as shown in the following screenshot. I've tested with both the version 1.5.2 and 1.6.48 conformance tools and both yield the exact same results.
I've captured all of the USB reports being sent and received over the USB HID interface and all of them appear correct. However the conformance test assertion regarding the CTAPHID_KEEPALIVE with STATUS_UPNEEDED is failing. It is expecting the CTAPHID_KEEPALIVE (0x3B) but it's reporting that it received undefined (0x00). I've spent countless hours trying to figure out why the conformance tool is complaining and am at a loss as to what I could possibly be doing wrong. What's odd is the previous test (P-10) follows a similar pattern where it sends a MakeCredential request, waits for a CTAPHID_KEEPALIVE, and then sends a CTAPHID_CANCEL - that test is successful.
Can anybody offer any suggestions for further troubleshooting? For example, is there a way to capture all of the USB reports being sent and received inside the conformance tool itself? And are there any subtle timing dependencies in the conformance tool that might be contributing to what I am seeing? From the USB HID driver's perspective it is successfully sending and receiving all USB reports to/from the authenticator on behalf of the conformance tool application. There are no errors and all I/O requests from the conformance tool to read/write USB reports are being completed successfully as shown in the following trace. Any help would be greatly appreciated.
Client sends CTAPHID_INIT and authenticator responds with a CID of 0x2F.
01-Jun-2022 21:02:51 - 5300:4500 - outputReport=
01-Jun-2022 21:02:51 - 5300:4500 - {
01-Jun-2022 21:02:51 - 5300:4500 - ff ff ff ff 86 00 08 bd 74 49 4e 99 a6 d0 51 00 ........tIN...Q.
01-Jun-2022 21:02:51 - 5300:4500 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:4500 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:4500 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:4500 - }
01-Jun-2022 21:02:51 - 5300:6444 - inputReport=
01-Jun-2022 21:02:51 - 5300:6444 - {
01-Jun-2022 21:02:51 - 5300:6444 - ff ff ff ff 86 00 11 bd 74 49 4e 99 a6 d0 51 2f ........tIN...Q/
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 02 00 00 00 05 eb ef 45 00 00 00 00 00 ..........E.....
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:6444 - }
Client sends CTAPHID_CBOR with a GetAssertion request containing a non-existent credential id.
01-Jun-2022 21:02:51 - 5300:4500 - outputReport=
01-Jun-2022 21:02:51 - 5300:4500 - {
01-Jun-2022 21:02:51 - 5300:4500 - 2f 00 00 00 90 00 6c 02 a3 01 6d 6b 69 77 69 70 /.....l...mkiwip
01-Jun-2022 21:02:51 - 5300:4500 - 6f 69 73 65 64 2e 6b 79 02 58 20 89 c9 52 25 28 oised.ky.X ..R%(
01-Jun-2022 21:02:51 - 5300:4500 - c2 42 9f cd 05 89 60 88 34 c2 9f 5e cf 29 03 99 .B....`.4..^.)..
01-Jun-2022 21:02:51 - 5300:4500 - 2e 5c ef d2 0c c2 3b 18 c6 66 79 03 81 a2 62 69 .\....;..fy...bi
01-Jun-2022 21:02:51 - 5300:4500 - }
01-Jun-2022 21:02:51 - 5300:4500 - outputReport=
01-Jun-2022 21:02:51 - 5300:4500 - {
01-Jun-2022 21:02:51 - 5300:4500 - 2f 00 00 00 00 64 58 20 8d fd 95 74 23 e5 84 63 /....dX ...t#..c
01-Jun-2022 21:02:51 - 5300:4500 - a8 d5 7d 0f ec d5 8d 6d b2 19 06 af 54 f8 51 49 ..}....m....T.QI
01-Jun-2022 21:02:51 - 5300:4500 - 85 3e a5 38 3f 93 c0 44 64 74 79 70 65 6a 70 75 .>.8?..Ddtypejpu
01-Jun-2022 21:02:51 - 5300:4500 - 62 6c 69 63 2d 6b 65 79 00 00 00 00 00 00 00 00 blic-key........
01-Jun-2022 21:02:51 - 5300:4500 - }
Authenticator responds with CTAPHID_KEEPALIVE containing STATUS_UPNEEDED. [NOTE: The Conformance Test tool does not appear to receive this USB report even though the USB driver has successfully reported the I/O read request as being completed.]
01-Jun-2022 21:02:51 - 5300:6444 - inputReport=
01-Jun-2022 21:02:51 - 5300:6444 - {
01-Jun-2022 21:02:51 - 5300:6444 - 2f 00 00 00 bb 00 01 02 00 00 00 00 00 00 00 00 /...............
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:51 - 5300:6444 - }
Authenticator responds with CTAPHID_CBOR containing a status of CTAP2_ERR_NO_CREDENTIALS (0x2E).
01-Jun-2022 21:02:52 - 5300:6444 - inputReport=
01-Jun-2022 21:02:52 - 5300:6444 - {
01-Jun-2022 21:02:52 - 5300:6444 - 2f 00 00 00 90 00 01 2e 00 00 00 00 00 00 00 00 /...............
01-Jun-2022 21:02:52 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:52 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:52 - 5300:6444 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01-Jun-2022 21:02:52 - 5300:6444 - }