/** * Crypto utility functions for browser environments */ /** * Convert hex string to Uint8Array */ export function hexToBytes(hex: string): Uint8Array { if (hex.length % 2 !== 0) { throw new Error('Hex string must have even length') } const bytes = hex.match(/.{2}/g)?.map(byte => parseInt(byte, 16)) if (!bytes) { throw new Error('Invalid hex string') } return new Uint8Array(bytes) } /** * Convert Uint8Array to hex string */ export function bytesToHex(bytes: Uint8Array): string { return Array.from(bytes) .map(b => b.toString(16).padStart(2, '0')) .join('') } /** * Convert string to Uint8Array */ export function stringToBytes(str: string): Uint8Array { return new TextEncoder().encode(str) } /** * Convert Uint8Array to string */ export function bytesToString(bytes: Uint8Array): string { return new TextDecoder().decode(bytes) }