Spaces:
Sleeping
Sleeping
| /** | |
| * BLAKE3 - The fastest pure JavaScript implementation | |
| * | |
| * Features: | |
| * - All 3 modes: hash, keyed (MAC), derive_key | |
| * - XOF (eXtendable Output Function) support | |
| * - Automatic WASM SIMD acceleration for large inputs | |
| * - Zero dependencies | |
| * - Tree-shakeable exports | |
| * | |
| * @example | |
| * ```typescript | |
| * import { hash, createKeyed, createDeriveKey } from 'blake3-jit'; | |
| * | |
| * // Simple hashing | |
| * const digest = hash(new Uint8Array([1, 2, 3])); | |
| * | |
| * // Keyed hashing (MAC) | |
| * const mac = createKeyed(key).update(data).finalize(); | |
| * | |
| * // Key derivation | |
| * const derived = createDeriveKey("my context").update(material).finalize(64); | |
| * ``` | |
| */ | |
| // Core exports | |
| export { Hasher, XofReader } from "./hasher.js"; | |
| export { hash, hashInto, warmupSimd } from "./hash.js"; | |
| // Convenience imports | |
| import { Hasher } from "./hasher.js"; | |
| /** | |
| * Create a new keyed hasher (MAC). | |
| * | |
| * @param key - 32-byte key | |
| * @returns A new Hasher configured for keyed hashing | |
| * | |
| * @example | |
| * ```typescript | |
| * const key = new Uint8Array(32); // Your 32-byte key | |
| * crypto.getRandomValues(key); | |
| * | |
| * const mac = createKeyed(key) | |
| * .update(message) | |
| * .finalize(); | |
| * ``` | |
| */ | |
| export function createKeyed(key: Uint8Array): Hasher { | |
| return Hasher.newKeyed(key); | |
| } | |
| /** | |
| * Create a new key derivation hasher. | |
| * | |
| * @param context - Context string for domain separation | |
| * @returns A new Hasher configured for key derivation | |
| * | |
| * @example | |
| * ```typescript | |
| * const derivedKey = createDeriveKey("my-app encryption key v1") | |
| * .update(inputKeyMaterial) | |
| * .finalize(32); | |
| * ``` | |
| */ | |
| export function createDeriveKey(context: string): Hasher { | |
| return Hasher.newDeriveKey(context); | |
| } | |
| /** | |
| * Create a new regular hasher for incremental hashing. | |
| * | |
| * @returns A new Hasher | |
| * | |
| * @example | |
| * ```typescript | |
| * const hasher = createHasher(); | |
| * hasher.update(chunk1); | |
| * hasher.update(chunk2); | |
| * const digest = hasher.finalize(); | |
| * ``` | |
| */ | |
| export function createHasher(): Hasher { | |
| return new Hasher(); | |
| } | |
| // Import for default export | |
| import { hash, hashInto, warmupSimd } from "./hash.js"; | |
| // Pre-warm SIMD in browser environments (non-blocking) | |
| // This avoids initialization latency on first large hash | |
| if (typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined") { | |
| queueMicrotask(() => { | |
| warmupSimd(); | |
| }); | |
| } | |
| // Default export for convenience | |
| export default { | |
| hash, | |
| hashInto, | |
| Hasher, | |
| createHasher, | |
| createKeyed, | |
| createDeriveKey, | |
| }; | |