lock
[root] / mem.nim
import sodium
type
SecBuf* = object
p*: pointer
len*: int
proc mkbuf*(len: int): SecBuf =
if len <= 0:
quit("invalid length", 1)
result.p = alloc0(len)
result.len = len
if sodium_mlock(result.p, len.csize_t) != 0:
dealloc(result.p)
quit("mlock failed", 1)
proc zero*(b: SecBuf) =
sodium_memzero(b.p, b.len.csize_t)
proc free*(b: SecBuf) =
zero(b)
if sodium_munlock(b.p, b.len.csize_t) != 0:
quit("munlock failed", 1)
dealloc(b.p)