SHA-256 over data, returned as a 32-byte raw string. Useful when you need to feed the digest into another binary protocol; for human display use sha256_hex.
**Caveat:** treats data as a NUL-terminated cstring, so embedded NUL bytes truncate the input. Hash binary blobs with embedded NULs via a future sha256_bytes(*ByteBuffer) once that's wired.
let raw: string = sha256("hello");
hex_encode(raw); // 2cf24dba...8b9824 (32 bytes)