// ============================================================================= // Std::Crypto — backward-compatible wrapper (delegates to submodules) // // Migration note: new code should use the submodules directly: // Std::Crypto::Hash::{Hash_Sha256, ...} // Std::Crypto::Hmac::{Hmac_Sha256, ...} // Std::Crypto::Base64::{Base64_Encode, Base64URL_Encode, ...} // Std::Crypto::Random::{Random_Bytes, ...} // Std::Crypto::Jwt::{Jwt_EncodeHS256, ...} // ============================================================================= module Std::Crypto { import Std::Mem::{Alloc, Free}; import Std::String::{String_Len}; // Re-use the same externs from submodules (merged by compiler) extern func bux_sha256(data: String, len: int, out: *void); extern func bux_hmac_sha256(key: String, keylen: int, msg: String, msglen: int, out: *void); extern func bux_random_bytes(buf: *void, len: int) -> int; extern func bux_base64_encode(data: String, len: int) -> String; extern func bux_base64_decode(data: String, len: int, outlen: *int) -> String; extern func bux_bytes_to_hex(data: *void, len: int) -> String; // --- Legacy function names (delegate to new submodule functions) --- // SHA-256 → hex func Crypto_Sha256(data: String) -> String { let len: int = String_Len(data) as int; let hashBuf: *void = Alloc(32); bux_sha256(data, len, hashBuf); let result: String = bux_bytes_to_hex(hashBuf as *void, 32); Free(hashBuf); return result; } // HMAC-SHA256 → hex func Crypto_HmacSha256(key: String, message: String) -> String { let keylen: int = String_Len(key) as int; let msglen: int = String_Len(message) as int; let hmacBuf: *void = Alloc(32); bux_hmac_sha256(key, keylen, message, msglen, hmacBuf); let result: String = bux_bytes_to_hex(hmacBuf as *void, 32); Free(hmacBuf); return result; } // Random bytes → base64 func Crypto_RandomBytes(n: int) -> String { if n <= 0 { return ""; } let buf: *void = Alloc(n as uint); if bux_random_bytes(buf, n) != 1 { Free(buf); return ""; } let result: String = bux_base64_encode(buf as String, n); Free(buf); return result; } // Base64 encode func Crypto_Base64Encode(s: String) -> String { return bux_base64_encode(s, String_Len(s) as int); } // HMAC-SHA256 raw → base64 func Crypto_HmacSha256Raw(key: String, message: String) -> String { let keylen: int = String_Len(key) as int; let msglen: int = String_Len(message) as int; let hmacBuf: *void = Alloc(32); bux_hmac_sha256(key, keylen, message, msglen, hmacBuf); let result: String = bux_base64_encode(hmacBuf as String, 32); Free(hmacBuf); return result; } // Base64 decode func Crypto_Base64Decode(s: String) -> String { let outlen: int = 0; return bux_base64_decode(s, String_Len(s) as int, &outlen); } }