UNPKG

@li0ard/streebog

Version:

Streebog hash function in pure TypeScript

33 lines (32 loc) 1.12 kB
import { concatBytes, hexToBytes } from "@noble/hashes/utils"; import { Streebog256HMAC } from "./index"; import { numberToBytesBE } from "./utils"; /** * `KDF_GOSTR3411_2012_256` * * @param key Initial key * @param label Label * @param seed Seed */ export const kdf_gostr3411_2012_256 = (key, label, seed) => { return Streebog256HMAC(key).update(concatBytes(hexToBytes("01"), label, hexToBytes("00"), seed, hexToBytes("0100"))).digest(); // Also we can use: // return kdf_tree_gostr3411_2012_256(key, label, seed, 1)[0] }; /** * `KDF_TREE_GOSTR3411_2012_256` * * @param key Initial key * @param label Label * @param seed Seed * @param keys Number of generated keys * @param i_len Length of iterations value (`R`) */ export const kdf_tree_gostr3411_2012_256 = (key, label, seed, keys, i_len = 1) => { let keymat = []; let length = numberToBytesBE(BigInt(keys) * 32n * 8n, 1); for (let i = 0; i < keys; i++) { keymat.push(Streebog256HMAC(key).update(concatBytes(numberToBytesBE(i + 1, i_len), label, hexToBytes("00"), seed, length)).digest()); } return keymat; };