22 lines
968 B
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;
|
|
}
|