lock

[root] / mem.nim

476B

raw
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)