summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/authentication/generateAuthenticationOptions.ts6
-rw-r--r--packages/server/src/helpers/__mocks__/generateChallenge.ts40
-rw-r--r--packages/server/src/helpers/generateChallenge.ts4
-rw-r--r--packages/server/src/registration/generateRegistrationOptions.ts6
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",