About 2 months ago there was an update to Android/Google Play services that adds support for CTAP2 using the native system UI.
The catch is that the SELECT APDU is done using extended-length which is usually not supported by the GlobalPlatform manager of JavaCards; to get around that the applet needs to be marked as default selected (for instance giving it the CardReset privilege) and it then will handle the "fake" SELECT like it would a real one thanks to these lines already present in the code:
if (cla_ins == (short) 0x00A4 && p1_p2 == (short) 0x0400) {
// Applet-select command, probably part of test shenanigans
handleAppletSelect(apdu);
return;
}
I tested it on the Android 17 beta, but it should also work on the latest Android 16 release assuming Google Play Services are up to date.
It's worth mentioning that the app Authnkey (available on F-Droid or repackaged as FIDO Bridge - Authnkey on the Google Play Store) did allow to use the applet on Android for CTAP2/passkeys; but now the flow is native and consistent (but it still doesn't allow to manage credentials, then you still need an app).
About 2 months ago there was an update to Android/Google Play services that adds support for CTAP2 using the native system UI.
The catch is that the SELECT APDU is done using extended-length which is usually not supported by the GlobalPlatform manager of JavaCards; to get around that the applet needs to be marked as default selected (for instance giving it the
CardResetprivilege) and it then will handle the "fake" SELECT like it would a real one thanks to these lines already present in the code:I tested it on the Android 17 beta, but it should also work on the latest Android 16 release assuming Google Play Services are up to date.
It's worth mentioning that the app Authnkey (available on F-Droid or repackaged as FIDO Bridge - Authnkey on the Google Play Store) did allow to use the applet on Android for CTAP2/passkeys; but now the flow is native and consistent (but it still doesn't allow to manage credentials, then you still need an app).