Cybersecurity-Projects/PROJECTS/advanced/hsm-emulator/src/api/random.zig

22 lines
968 B
Zig

// ©AngelaMos | 2026
// random.zig
const ck = @import("../ck.zig");
const state = @import("../core/state.zig");
pub fn C_SeedRandom(hSession: ck.CK_SESSION_HANDLE, _: [*]ck.CK_BYTE, _: ck.CK_ULONG) callconv(.c) ck.CK_RV {
const inst = state.acquire() orelse return ck.CKR_CRYPTOKI_NOT_INITIALIZED;
defer state.mutex.unlock();
if (inst.sessions.get(hSession) == null) return ck.CKR_SESSION_HANDLE_INVALID;
return ck.CKR_RANDOM_SEED_NOT_SUPPORTED;
}
pub fn C_GenerateRandom(hSession: ck.CK_SESSION_HANDLE, pRandomData: [*]ck.CK_BYTE, ulRandomLen: ck.CK_ULONG) callconv(.c) ck.CK_RV {
const inst = state.acquire() orelse return ck.CKR_CRYPTOKI_NOT_INITIALIZED;
defer state.mutex.unlock();
if (inst.sessions.get(hSession) == null) return ck.CKR_SESSION_HANDLE_INVALID;
if (ulRandomLen == 0) return ck.CKR_OK;
inst.io().randomSecure(pRandomData[0..@intCast(ulRandomLen)]) catch return ck.CKR_FUNCTION_FAILED;
return ck.CKR_OK;
}