From 256c8ca5ed41a003413190cda6ab3eac8c8eb49c Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Mon, 14 Oct 2024 20:05:47 +0300 Subject: [PATCH] feat: move to noble hash scrypt impl --- packages/better-auth/src/crypto/buffer.ts | 2 +- packages/better-auth/src/crypto/password.ts | 31 +++++---------------- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/packages/better-auth/src/crypto/buffer.ts b/packages/better-auth/src/crypto/buffer.ts index 7f3d9046..fb616674 100644 --- a/packages/better-auth/src/crypto/buffer.ts +++ b/packages/better-auth/src/crypto/buffer.ts @@ -1,5 +1,5 @@ export function constantTimeEqual( - a: ArrayBuffer, + a: ArrayBuffer | Uint8Array, b: ArrayBuffer | Uint8Array, ): boolean { const aBuffer = new Uint8Array(a); diff --git a/packages/better-auth/src/crypto/password.ts b/packages/better-auth/src/crypto/password.ts index f321acf0..4fa87c01 100644 --- a/packages/better-auth/src/crypto/password.ts +++ b/packages/better-auth/src/crypto/password.ts @@ -1,7 +1,6 @@ -import { scrypt } from "node:crypto"; import { decodeHex, encodeHex } from "oslo/encoding"; import { constantTimeEqual } from "./buffer"; - +import { scryptAsync } from "@noble/hashes/scrypt"; const config = { N: 16384, r: 16, @@ -9,28 +8,12 @@ const config = { dkLen: 64, }; -async function generateKey( - password: string, - salt: string, -): Promise { - return await new Promise((resolve, reject) => { - scrypt( - password.normalize("NFKC"), - salt!, - config.dkLen, - { - N: config.N, - p: config.p, - r: config.r, - // errors when 128 * N * r > `maxmem` (approximately) - maxmem: 128 * config.N * config.r * 2, - }, - (err, buff) => { - if (err) return reject(err); - // @ts-ignore - return resolve(buff); - }, - ); +async function generateKey(password: string, salt: string) { + return await scryptAsync(password.normalize("NFKC"), salt, { + N: config.N, + p: config.p, + r: config.r, + maxmem: 128 * config.N * config.r * 2, }); }