gecko-dev/dom/webauthn/PWebAuthnTransaction.ipdl
Tim Taubert 2a252e45a4 Bug 1464015 - Web Authentication - Rework IPC layer for future Android/Windows support r=jcj
Reviewers: jcj

Reviewed By: jcj

Subscribers: mgoodwin

Bug #: 1464015

Differential Revision: https://phabricator.services.mozilla.com/D1378
2018-05-30 16:06:09 +02:00

128 lines
3.4 KiB
Plaintext

/* 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 PBackground;
using struct mozilla::null_t from "ipc/IPCMessageUtils.h";
namespace mozilla {
namespace dom {
struct WebAuthnAuthenticatorSelection {
bool requireResidentKey;
bool requireUserVerification;
bool requirePlatformAttachment;
};
struct WebAuthnScopedCredential {
uint8_t[] id;
uint8_t transports;
};
struct WebAuthnExtensionAppId {
uint8_t[] AppId;
};
union WebAuthnExtension {
WebAuthnExtensionAppId;
};
struct WebAuthnExtensionResultAppId {
bool AppId;
};
union WebAuthnExtensionResult {
WebAuthnExtensionResultAppId;
};
struct WebAuthnMakeCredentialExtraInfo {
WebAuthnExtension[] Extensions;
WebAuthnAuthenticatorSelection AuthenticatorSelection;
bool RequestDirectAttestation;
};
union WebAuthnMaybeMakeCredentialExtraInfo {
WebAuthnMakeCredentialExtraInfo;
null_t;
};
struct WebAuthnMakeCredentialInfo {
nsString Origin;
nsString RpId;
uint8_t[] Challenge;
nsCString ClientDataJSON;
uint32_t TimeoutMS;
WebAuthnScopedCredential[] ExcludeList;
WebAuthnMaybeMakeCredentialExtraInfo Extra;
};
struct WebAuthnMakeCredentialResult {
nsCString ClientDataJSON;
uint8_t[] AttestationObject;
uint8_t[] KeyHandle;
/* Might be empty if the token implementation doesn't support CTAP1. */
uint8_t[] RegistrationData;
};
struct WebAuthnGetAssertionExtraInfo {
WebAuthnExtension[] Extensions;
bool RequireUserVerification;
};
union WebAuthnMaybeGetAssertionExtraInfo {
WebAuthnGetAssertionExtraInfo;
null_t;
};
struct WebAuthnGetAssertionInfo {
nsString Origin;
nsString RpId;
uint8_t[] Challenge;
nsCString ClientDataJSON;
uint32_t TimeoutMS;
WebAuthnScopedCredential[] AllowList;
WebAuthnMaybeGetAssertionExtraInfo Extra;
};
struct WebAuthnGetAssertionResult {
nsCString ClientDataJSON;
uint8_t[] KeyHandle;
uint8_t[] Signature;
uint8_t[] AuthenticatorData;
WebAuthnExtensionResult[] Extensions;
/* Might be empty if the token implementation doesn't support CTAP1. */
uint8_t[] SignatureData;
};
async protocol PWebAuthnTransaction {
manager PBackground;
parent:
async RequestRegister(uint64_t aTransactionId, WebAuthnMakeCredentialInfo aTransactionInfo);
async RequestSign(uint64_t aTransactionId, WebAuthnGetAssertionInfo aTransactionInfo);
async RequestCancel(uint64_t aTransactionId);
async DestroyMe();
child:
async __delete__();
async ConfirmRegister(uint64_t aTransactionId, WebAuthnMakeCredentialResult aResult);
async ConfirmSign(uint64_t aTransactionId, WebAuthnGetAssertionResult aResult);
async Abort(uint64_t aTransactionId, nsresult Error);
};
}
}