diff options
Diffstat (limited to 'packages/server/src')
4 files changed, 29 insertions, 27 deletions
diff --git a/packages/server/src/authentication/generateAuthenticationOptions.ts b/packages/server/src/authentication/generateAuthenticationOptions.ts index 92efaa8..57eb9e0 100644 --- a/packages/server/src/authentication/generateAuthenticationOptions.ts +++ b/packages/server/src/authentication/generateAuthenticationOptions.ts @@ -29,12 +29,12 @@ export type GenerateAuthenticationOptionsOpts = { * @param extensions Additional plugins the authenticator or browser should use during authentication * @param rpID Valid domain name (after `https://`) */ -export function generateAuthenticationOptions( +export async function generateAuthenticationOptions( options: GenerateAuthenticationOptionsOpts = {}, -): PublicKeyCredentialRequestOptionsJSON { +): Promise<PublicKeyCredentialRequestOptionsJSON> { const { allowCredentials, - challenge = generateChallenge(), + challenge = await generateChallenge(), timeout = 60000, userVerification = "preferred", extensions, diff --git a/packages/server/src/helpers/__mocks__/generateChallenge.ts b/packages/server/src/helpers/__mocks__/generateChallenge.ts index 1473e38..fddc202 100644 --- a/packages/server/src/helpers/__mocks__/generateChallenge.ts +++ b/packages/server/src/helpers/__mocks__/generateChallenge.ts @@ -1,20 +1,22 @@ -export function generateChallenge(): Uint8Array { - return Uint8Array.from([ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - ]); +export function generateChallenge(): Promise<Uint8Array> { + return new Promise((resolve) => { + resolve(Uint8Array.from([ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + ])); + }); } diff --git a/packages/server/src/helpers/generateChallenge.ts b/packages/server/src/helpers/generateChallenge.ts index e5a2b08..8d804eb 100644 --- a/packages/server/src/helpers/generateChallenge.ts +++ b/packages/server/src/helpers/generateChallenge.ts @@ -3,7 +3,7 @@ import { isoCrypto } from "./iso/index.ts"; /** * Generate a suitably random value to be used as an attestation or assertion challenge */ -export function generateChallenge(): Uint8Array { +export async function generateChallenge(): Promise<Uint8Array> { /** * WebAuthn spec says that 16 bytes is a good minimum: * @@ -14,7 +14,7 @@ export function generateChallenge(): Uint8Array { */ const challenge = new Uint8Array(32); - isoCrypto.getRandomValues(challenge); + await isoCrypto.getRandomValues(challenge); return challenge; } diff --git a/packages/server/src/registration/generateRegistrationOptions.ts b/packages/server/src/registration/generateRegistrationOptions.ts index 66c3e81..bf5bf59 100644 --- a/packages/server/src/registration/generateRegistrationOptions.ts +++ b/packages/server/src/registration/generateRegistrationOptions.ts @@ -94,15 +94,15 @@ const defaultSupportedAlgorithmIDs: COSEAlgorithmIdentifier[] = [-8, -7, -257]; * @param supportedAlgorithmIDs Array of numeric COSE algorithm identifiers supported for * attestation by this RP. See https://www.iana.org/assignments/cose/cose.xhtml#algorithms */ -export function generateRegistrationOptions( +export async function generateRegistrationOptions( options: GenerateRegistrationOptionsOpts, -): PublicKeyCredentialCreationOptionsJSON { +): Promise<PublicKeyCredentialCreationOptionsJSON> { const { rpName, rpID, userID, userName, - challenge = generateChallenge(), + challenge = await generateChallenge(), userDisplayName = userName, timeout = 60000, attestationType = "none", |