diff options
Diffstat (limited to 'packages/taler-util/src/kdf.ts')
-rw-r--r-- | packages/taler-util/src/kdf.ts | 47 |
1 files changed, 0 insertions, 47 deletions
diff --git a/packages/taler-util/src/kdf.ts b/packages/taler-util/src/kdf.ts index 7710de90c..8f4314340 100644 --- a/packages/taler-util/src/kdf.ts +++ b/packages/taler-util/src/kdf.ts @@ -58,50 +58,3 @@ export function hmacSha512(key: Uint8Array, message: Uint8Array): Uint8Array { export function hmacSha256(key: Uint8Array, message: Uint8Array): Uint8Array { return hmac(sha256, 64, key, message); } - -/** - * HMAC-SHA512-SHA256 (see RFC 5869). - */ -export function kdfKw(args: { - outputLength: number; - ikm: Uint8Array; - salt?: Uint8Array; - info?: Uint8Array; -}) { - return kdf(args.outputLength, args.ikm, args.salt, args.info); -} - -export function kdf( - outputLength: number, - ikm: Uint8Array, - salt?: Uint8Array, - info?: Uint8Array, -): Uint8Array { - salt = salt ?? new Uint8Array(64); - // extract - const prk = hmacSha512(salt, ikm); - - info = info ?? new Uint8Array(0); - - // expand - const N = Math.ceil(outputLength / 32); - const output = new Uint8Array(N * 32); - for (let i = 0; i < N; i++) { - let buf; - if (i == 0) { - buf = new Uint8Array(info.byteLength + 1); - buf.set(info, 0); - } else { - buf = new Uint8Array(info.byteLength + 1 + 32); - for (let j = 0; j < 32; j++) { - buf[j] = output[(i - 1) * 32 + j]; - } - buf.set(info, 32); - } - buf[buf.length - 1] = i + 1; - const chunk = hmacSha256(prk, buf); - output.set(chunk, i * 32); - } - - return output.slice(0, outputLength); -} |