Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* IPC Transaction protocol for the WebAuthn DOM API. This IPC protocol allows
* the content process to call to the parent to access hardware for
* authentication registration and challenges. All transactions start in the
* child process, and the parent replies with a "Confirm*" message, or a
* "Cancel" message if there was an error (no hardware available, no registered
* keys, etc) or interruption (another transaction was started in another
* content process). Similarly, the content process can also request a cancel,
* either triggered explicitly by the user/script or due to UI events like
* selecting a different tab.
*/
include protocol PWindowGlobal;
using mozilla::dom::MaybeDiscardedBrowsingContext from "mozilla/dom/BrowsingContext.h";
namespace mozilla {
namespace dom {
struct WebAuthnAuthenticatorSelection {
nsString residentKey;
nsString userVerificationRequirement;
nsString? authenticatorAttachment;
};
struct WebAuthnScopedCredential {
uint8_t[] id;
uint8_t transports;
};
struct WebAuthnExtensionCredProps {
bool credProps;
};
struct WebAuthnExtensionHmacSecret {
bool hmacCreateSecret;
};
struct WebAuthnExtensionMinPinLength {
bool minPinLength;
};
struct WebAuthnExtensionPrf {
WebAuthnExtensionPrfValues? eval;
bool evalByCredentialMaybe;
WebAuthnExtensionPrfEvalByCredentialEntry[] evalByCredential;
};
struct WebAuthnExtensionPrfValues {
uint8_t[] first;
bool secondMaybe;
uint8_t[] second;
};
struct WebAuthnExtensionPrfEvalByCredentialEntry {
uint8_t[] credentialId;
WebAuthnExtensionPrfValues eval;
};
union WebAuthnExtension {
WebAuthnExtensionCredProps;
WebAuthnExtensionHmacSecret;
WebAuthnExtensionMinPinLength;
WebAuthnExtensionPrf;
};
struct WebAuthnExtensionResultAppId {
bool AppId;
};
struct WebAuthnExtensionResultCredProps {
bool rk;
};
struct WebAuthnExtensionResultHmacSecret {
bool hmacCreateSecret;
};
struct WebAuthnExtensionResultPrf {
bool? enabled;
WebAuthnExtensionPrfValues? results;
};
union WebAuthnExtensionResult {
WebAuthnExtensionResultAppId;
WebAuthnExtensionResultCredProps;
WebAuthnExtensionResultHmacSecret;
WebAuthnExtensionResultPrf;
};
struct WebAuthnMakeCredentialRpInfo {
nsString Name;
};
struct WebAuthnMakeCredentialUserInfo {
uint8_t[] Id;
nsString Name;
nsString DisplayName;
};
struct CoseAlg {
long alg;
};
struct WebAuthnMakeCredentialInfo {
nsCString RpId;
uint8_t[] Challenge;
uint32_t TimeoutMS;
WebAuthnScopedCredential[] ExcludeList;
WebAuthnMakeCredentialRpInfo Rp;
WebAuthnMakeCredentialUserInfo User;
CoseAlg[] coseAlgs;
WebAuthnExtension[] Extensions;
WebAuthnAuthenticatorSelection AuthenticatorSelection;
nsString attestationConveyancePreference;
};
struct WebAuthnMakeCredentialResult {
nsCString ClientDataJSON;
uint8_t[] AttestationObject;
uint8_t[] KeyHandle;
nsString[] Transports;
WebAuthnExtensionResult[] Extensions;
nsString? AuthenticatorAttachment;
};
union WebAuthnMakeCredentialResponse {
nsresult;
WebAuthnMakeCredentialResult;
};
struct WebAuthnGetAssertionInfo {
nsCString RpId;
nsCString? AppId;
uint8_t[] Challenge;
uint32_t TimeoutMS;
WebAuthnScopedCredential[] AllowList;
WebAuthnExtension[] Extensions;
nsString userVerificationRequirement;
bool ConditionallyMediated;
};
struct WebAuthnGetAssertionResult {
nsCString ClientDataJSON;
uint8_t[] KeyHandle;
uint8_t[] Signature;
uint8_t[] AuthenticatorData;
WebAuthnExtensionResult[] Extensions;
uint8_t[] UserHandle;
nsString? AuthenticatorAttachment;
};
union WebAuthnGetAssertionResponse {
nsresult;
WebAuthnGetAssertionResult;
};
async protocol PWebAuthnTransaction {
manager PWindowGlobal;
parent:
async RequestRegister(WebAuthnMakeCredentialInfo aTransactionInfo) returns (WebAuthnMakeCredentialResponse response);
async RequestSign(WebAuthnGetAssertionInfo aTransactionInfo) returns (WebAuthnGetAssertionResponse response);
async RequestIsUVPAA() returns (bool available);
async RequestCancel();
child:
async __delete__();
};
}
}