1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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/. */
#ifndef mozilla_dom_WebAuthnArgs_H_
#define mozilla_dom_WebAuthnArgs_H_
#include "mozilla/dom/WebAuthnTransactionChild.h"
#include "mozilla/ipc/BackgroundParent.h"
#include "nsIWebAuthnArgs.h"
namespace mozilla::dom {
class WebAuthnRegisterArgs final : public nsIWebAuthnRegisterArgs {
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIWEBAUTHNREGISTERARGS
explicit WebAuthnRegisterArgs(const nsCString& aOrigin,
const nsCString& aClientDataJSON,
const bool aPrivateBrowsing,
const WebAuthnMakeCredentialInfo& aInfo)
: mOrigin(aOrigin),
mClientDataJSON(aClientDataJSON),
mPrivateBrowsing(aPrivateBrowsing),
mInfo(aInfo),
mEnforceCredentialProtectionPolicy(false),
mCredProps(false),
mHmacCreateSecret(false),
mLargeBlobSupportRequired(Nothing()),
mMinPinLength(false),
mPrf(false) {
for (const WebAuthnExtension& ext : mInfo.Extensions()) {
switch (ext.type()) {
case WebAuthnExtension::TWebAuthnExtensionCredProtect:
mCredentialProtectionPolicy.emplace(
ext.get_WebAuthnExtensionCredProtect().policy());
mEnforceCredentialProtectionPolicy =
ext.get_WebAuthnExtensionCredProtect().required();
break;
case WebAuthnExtension::TWebAuthnExtensionCredProps:
mCredProps = ext.get_WebAuthnExtensionCredProps().credProps();
break;
case WebAuthnExtension::TWebAuthnExtensionHmacSecret:
mHmacCreateSecret =
ext.get_WebAuthnExtensionHmacSecret().hmacCreateSecret();
break;
case WebAuthnExtension::TWebAuthnExtensionLargeBlob:
mLargeBlobSupportRequired =
ext.get_WebAuthnExtensionLargeBlob().flag();
break;
case WebAuthnExtension::TWebAuthnExtensionMinPinLength:
mMinPinLength =
ext.get_WebAuthnExtensionMinPinLength().minPinLength();
break;
case WebAuthnExtension::TWebAuthnExtensionPrf:
mPrf = true;
break;
case WebAuthnExtension::T__None:
break;
}
}
}
private:
~WebAuthnRegisterArgs() = default;
const nsCString mOrigin;
const nsCString mClientDataJSON;
const bool mPrivateBrowsing;
const WebAuthnMakeCredentialInfo mInfo;
Maybe<CredentialProtectionPolicy> mCredentialProtectionPolicy;
bool mEnforceCredentialProtectionPolicy;
// Flags to indicate whether an extension is being requested.
bool mCredProps;
bool mHmacCreateSecret;
Maybe<bool> mLargeBlobSupportRequired;
bool mMinPinLength;
bool mPrf;
};
class WebAuthnSignArgs final : public nsIWebAuthnSignArgs {
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIWEBAUTHNSIGNARGS
explicit WebAuthnSignArgs(const nsCString& aOrigin,
const nsCString& aClientDataJSON,
const bool aPrivateBrowsing,
const WebAuthnGetAssertionInfo& aInfo)
: mOrigin(aOrigin),
mClientDataJSON(aClientDataJSON),
mPrivateBrowsing(aPrivateBrowsing),
mInfo(aInfo),
mPrf(false) {
for (const WebAuthnExtension& ext : mInfo.Extensions()) {
switch (ext.type()) {
case WebAuthnExtension::TWebAuthnExtensionCredProtect:
break;
case WebAuthnExtension::TWebAuthnExtensionCredProps:
break;
case WebAuthnExtension::TWebAuthnExtensionHmacSecret:
break;
case WebAuthnExtension::TWebAuthnExtensionMinPinLength:
break;
case WebAuthnExtension::TWebAuthnExtensionLargeBlob:
if (ext.get_WebAuthnExtensionLargeBlob().flag().isSome()) {
bool read = ext.get_WebAuthnExtensionLargeBlob().flag().ref();
mLargeBlobRead.emplace(read);
if (!read) {
mLargeBlobWrite.AppendElements(
ext.get_WebAuthnExtensionLargeBlob().write());
}
}
break;
case WebAuthnExtension::TWebAuthnExtensionPrf:
mPrf = ext.get_WebAuthnExtensionPrf().eval().isSome() ||
ext.get_WebAuthnExtensionPrf().evalByCredentialMaybe();
break;
case WebAuthnExtension::T__None:
break;
}
}
}
private:
~WebAuthnSignArgs() = default;
const nsCString mOrigin;
const nsCString mClientDataJSON;
const bool mPrivateBrowsing;
const WebAuthnGetAssertionInfo mInfo;
Maybe<bool> mLargeBlobRead;
nsTArray<uint8_t> mLargeBlobWrite;
bool mPrf;
};
} // namespace mozilla::dom
#endif // mozilla_dom_WebAuthnArgs_H_
|