Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
var doc, tab;
add_setup(async function () {
info("Starting about:webauthn");
tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: "about:webauthn",
waitForLoad: true,
});
doc = tab.linkedBrowser.contentDocument;
});
registerCleanupFunction(async function () {
// Close tab.
await BrowserTestUtils.removeTab(tab);
});
function send_auth_data_and_check(auth_data) {
Services.obs.notifyObservers(
null,
"about-webauthn-prompt",
JSON.stringify({ type: "selected-device", auth_info: auth_data })
);
let info_text = doc.getElementById("info-text-div");
is(info_text.hidden, true, "Start prompt not hidden");
let info_section = doc.getElementById("token-info-section");
isnot(info_section.style.display, "none", "Info section hidden");
}
add_task(async function multiple_devices() {
Services.obs.notifyObservers(
null,
"about-webauthn-prompt",
JSON.stringify({ type: "select-device" })
);
let info_text = doc.getElementById("info-text-div");
is(info_text.hidden, false, "Start prompt hidden");
let field = doc.getElementById("info-text-field");
is(
field.getAttribute("data-l10n-id"),
"about-webauthn-text-select-device",
"Field does not prompt user to touch device for selection"
);
});
add_task(async function multiple_devices() {
send_auth_data_and_check(REAL_AUTH_INFO_1);
reset_about_page(doc);
send_auth_data_and_check(REAL_AUTH_INFO_2);
reset_about_page(doc);
send_auth_data_and_check(REAL_AUTH_INFO_3);
reset_about_page(doc);
});
// Yubikey BIO
const REAL_AUTH_INFO_1 = {
versions: ["U2F_V2", "FIDO_2_0", "FIDO_2_1_PRE", "FIDO_2_1"],
extensions: [
"credProtect",
"hmac-secret",
"largeBlobKey",
"credBlob",
"minPinLength",
],
aaguid: [
216, 82, 45, 159, 87, 91, 72, 102, 136, 169, 186, 153, 250, 2, 243, 91,
],
options: {
plat: false,
rk: true,
clientPin: true,
up: true,
uv: true,
pinUvAuthToken: true,
noMcGaPermissionsWithClientPin: null,
largeBlobs: true,
ep: null,
bioEnroll: true,
userVerificationMgmtPreview: true,
uvBioEnroll: null,
authnrCfg: true,
uvAcfg: null,
credMgmt: true,
credentialMgmtPreview: true,
setMinPINLength: true,
makeCredUvNotRqd: true,
alwaysUv: false,
},
max_msg_size: 1200,
pin_protocols: [2, 1],
max_credential_count_in_list: 8,
max_credential_id_length: 128,
transports: ["usb"],
algorithms: [
{ alg: -7, type: "public-key" },
{ alg: -8, type: "public-key" },
],
max_ser_large_blob_array: 1024,
force_pin_change: false,
min_pin_length: 4,
firmware_version: 328966,
max_cred_blob_length: 32,
max_rpids_for_set_min_pin_length: 1,
preferred_platform_uv_attempts: 3,
uv_modality: 2,
certifications: null,
remaining_discoverable_credentials: 20,
vendor_prototype_config_commands: null,
};
// Yubikey 5
const REAL_AUTH_INFO_2 = {
versions: ["U2F_V2", "FIDO_2_0", "FIDO_2_1_PRE"],
extensions: ["credProtect", "hmac-secret"],
aaguid: [
47, 192, 87, 159, 129, 19, 71, 234, 177, 22, 187, 90, 141, 185, 32, 42,
],
options: {
plat: false,
rk: true,
clientPin: true,
up: true,
uv: null,
pinUvAuthToken: null,
noMcGaPermissionsWithClientPin: null,
largeBlobs: null,
ep: null,
bioEnroll: null,
userVerificationMgmtPreview: null,
uvBioEnroll: null,
authnrCfg: null,
uvAcfg: null,
credMgmt: null,
credentialMgmtPreview: true,
setMinPINLength: null,
makeCredUvNotRqd: null,
alwaysUv: null,
},
max_msg_size: 1200,
pin_protocols: [1],
max_credential_count_in_list: 8,
max_credential_id_length: 128,
transports: ["nfc", "usb"],
algorithms: [
{ alg: -7, type: "public-key" },
{ alg: -8, type: "public-key" },
],
max_ser_large_blob_array: null,
force_pin_change: null,
min_pin_length: null,
firmware_version: null,
max_cred_blob_length: null,
max_rpids_for_set_min_pin_length: null,
preferred_platform_uv_attempts: null,
uv_modality: null,
certifications: null,
remaining_discoverable_credentials: null,
vendor_prototype_config_commands: null,
};
// Nitrokey 3
const REAL_AUTH_INFO_3 = {
versions: ["U2F_V2", "FIDO_2_0", "FIDO_2_1_PRE"],
extensions: ["credProtect", "hmac-secret"],
aaguid: [
47, 192, 87, 159, 129, 19, 71, 234, 177, 22, 187, 90, 141, 185, 32, 42,
],
options: {
plat: false,
rk: true,
clientPin: true,
up: true,
uv: null,
pinUvAuthToken: null,
noMcGaPermissionsWithClientPin: null,
largeBlobs: null,
ep: null,
bioEnroll: null,
userVerificationMgmtPreview: null,
uvBioEnroll: null,
authnrCfg: null,
uvAcfg: null,
credMgmt: null,
credentialMgmtPreview: true,
setMinPINLength: null,
makeCredUvNotRqd: null,
alwaysUv: null,
},
max_msg_size: 1200,
pin_protocols: [1],
max_credential_count_in_list: 8,
max_credential_id_length: 128,
transports: ["nfc", "usb"],
algorithms: [
{ alg: -7, type: "public-key" },
{ alg: -8, type: "public-key" },
],
max_ser_large_blob_array: null,
force_pin_change: null,
min_pin_length: null,
firmware_version: null,
max_cred_blob_length: null,
max_rpids_for_set_min_pin_length: null,
preferred_platform_uv_attempts: null,
uv_modality: null,
certifications: null,
remaining_discoverable_credentials: null,
vendor_prototype_config_commands: null,
};