1/** sha256 of bytes as lowercase hex. Web Crypto only — works in Deno and Workers. */2export async function sha256hex(bytes: Uint8Array): Promise<string> {3 const digest = await crypto.subtle.digest("SHA-256", bytes as BufferSource);4 return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, "0")).join("");5}