@web5/agent
Version:
40 lines (33 loc) • 1.46 kB
text/typescript
import { CryptoAlgorithm } from '@web5/crypto';
import type { DeriveKeyBytesParams } from '../types/params-direct.js';
import { Hkdf, HkdfParams } from '../primitives/hkdf.js';
import { KeyBytesDeriver } from '../types/key-deriver.js';
/**
* The `HkdfDeriveKeyBytesParams` interface defines the algorithm-specific parameters that should be
* passed into the `deriveKeyBytes()` method when using the HKDF algorithm.
*/
export interface HkdfDeriveKeyBytesParams extends DeriveKeyBytesParams {
/** Specifies the algorithm variant for HKDF key derivation.
* The value determines the hash function that will be used and must be one of the following:
* - `"HKDF-256"`: HKDF with SHA-256.
* - `"HKDF-384"`: HKDF with SHA-384.
* - `"HKDF-512"`: HKDF with SHA-512.
*/
algorithm: 'HKDF-256' | 'HKDF-384' | 'HKDF-512';
}
export class HkdfAlgorithm extends CryptoAlgorithm
implements KeyBytesDeriver<HkdfDeriveKeyBytesParams, Uint8Array> {
public async deriveKeyBytes({ algorithm, ...params }:
HkdfDeriveKeyBytesParams & Omit<HkdfParams, 'hash'>
): Promise<Uint8Array> {
// Map algorithm name to hash function.
const hash = {
'HKDF-256' : 'SHA-256' as const,
'HKDF-384' : 'SHA-384' as const,
'HKDF-512' : 'SHA-512' as const
}[algorithm];
// Derive a cryptographic byte array using HKDF.
const derivedKeyBytes = await Hkdf.deriveKeyBytes({ ...params, hash });
return derivedKeyBytes;
}
}