MCPcopy Create free account
hub / github.com/cameri/nostream / hkdfExpand

Function hkdfExpand

src/utils/nip44.ts:13–29  ·  view source on GitHub ↗
(prk: Buffer, info: Buffer, length: number)

Source from the content-addressed store, hash-verified

11
12// HKDF-expand: OKM = T(1) || T(2) || ... where T(n) = HMAC-SHA256(PRK, T(n-1) || info || n)
13function hkdfExpand(prk: Buffer, info: Buffer, length: number): Buffer {
14 const hashLen = 32
15 const n = Math.ceil(length / hashLen)
16 const okm = Buffer.alloc(n * hashLen)
17 let prev = Buffer.alloc(0)
18
19 for (let i = 1; i <= n; i++) {
20 const hmac = createHmac('sha256', prk)
21 hmac.update(prev)
22 hmac.update(info)
23 hmac.update(Buffer.from([i]))
24 prev = hmac.digest()
25 prev.copy(okm, (i - 1) * hashLen)
26 }
27
28 return okm.subarray(0, length)
29}
30
31/**
32 * Derive a conversation key from a sender private key and recipient public key.

Callers 1

getMessageKeysFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected