pub fn hex_encode(bytes: &[u8]) -> String
Encodes bytes as lowercase hex (client-side convenience, used by tests and the demo).