diff options
Diffstat (limited to 'packages/server/src')
-rw-r--r-- | packages/server/src/helpers/generateChallenge.ts | 10 | ||||
-rw-r--r-- | packages/server/src/helpers/toHash.ts | 25 |
2 files changed, 6 insertions, 29 deletions
diff --git a/packages/server/src/helpers/generateChallenge.ts b/packages/server/src/helpers/generateChallenge.ts index b10e3d3..8277674 100644 --- a/packages/server/src/helpers/generateChallenge.ts +++ b/packages/server/src/helpers/generateChallenge.ts @@ -1,4 +1,4 @@ -import { webcrypto } from 'node:crypto'; +import { isoCrypto } from './iso'; /** * Generate a suitably random value to be used as an attestation or assertion challenge @@ -14,13 +14,7 @@ export function generateChallenge(): Uint8Array { */ const challenge = new Uint8Array(32); - if (globalThis.crypto) { - // We're in a browser-like runtime, use global Crypto - globalThis.crypto.getRandomValues(challenge); - } else { - // We're in Node, use Node's Crypto - webcrypto.getRandomValues(challenge); - } + isoCrypto.getRandomValues(challenge); return challenge; } diff --git a/packages/server/src/helpers/toHash.ts b/packages/server/src/helpers/toHash.ts index 64123df..9295507 100644 --- a/packages/server/src/helpers/toHash.ts +++ b/packages/server/src/helpers/toHash.ts @@ -1,31 +1,14 @@ -import { webcrypto } from 'node:crypto'; - -import { isoUint8Array } from './iso'; +import { isoUint8Array, isoCrypto } from './iso'; /** - * Returns hash digest of the given data using the given algorithm. - * @param data Data to hash - * @return The hash + * Returns hash digest of the given data, using the given algorithm when provided */ export async function toHash(data: Uint8Array | string, algorithm = 'SHA-256'): Promise<Uint8Array> { - if (/sha\d{1,3}/i.test(algorithm)) { - // Convert algorithms like "SHA1", "SHA256", etc... into values like "SHA-1", "SHA-256", etc... - // that `.digest()` will accept - algorithm = algorithm.toUpperCase().replace('SHA', 'SHA-'); - } - if (typeof data === 'string') { data = isoUint8Array.fromUTF8String(data); } - let hashed: ArrayBuffer - if (globalThis.crypto) { - // We're in a browser-like runtime, use global Crypto - hashed = await globalThis.crypto.subtle.digest(algorithm, data); - } else { - // We're in Node, use Node's Crypto - hashed = await webcrypto.subtle.digest(algorithm, data); - } + const digest = isoCrypto.digest(data, algorithm); - return new Uint8Array(hashed); + return digest; } |