nim-bearssl/tests/test_rand.nim
Jacek Sieka f0ea93f77e
rand: convenience API (#28)
Helpers to generate random numbers, including simple Nim types

* disable C++ tests
  * there are too many `const` vs `non-const` issues to run these tests -
C++ never actually worked
* add generateBytes to make fresh seqs

Co-authored-by: Mamy Ratsimbazafy <mamy_github@numforge.co>
Co-authored-by: Etan Kissling <etan@status.im>
2022-06-15 22:53:40 +02:00

63 lines
1.4 KiB
Nim

import
unittest2,
../bearssl/rand
{.used.}
suite "random":
test "simple random ops":
# Some of these tests may end up triggering false fails, but given their
# probability, should be fine
let rng = HmacDrbgContext.new()
var v: array[1024, byte]
rng[].generate(v)
let v2 = rng[].generate(array[1024, byte])
check:
v != default(array[1024, byte]) # probable
v2 != default(array[1024, byte]) # probable
for i in 0..<1000:
doAssert cast[int](rng[].generate(bool)) in [0, 1]
var bools: array[64 * 1024, bool]
rng[].generate(bools)
check:
true in bools # probable
false in bools # probable
var
xxx = newSeq[int](1024)
yyy = xxx
rng[].generate(xxx)
check:
xxx != yyy # probable
test "seed":
for seed in [@[byte 0], @[byte 1], @[byte 1, 1], @[byte 42, 13, 37]]:
var
rng = HmacDrbgContext.init(seed)
rng2 = HmacDrbgContext.init(seed)
check:
rng.generate(uint64) == rng2.generate(uint64)
for seed in [@[0], @[1], @[1, 1], @[42, 1337, -5]]:
var
rng = HmacDrbgContext.init(seed)
rng2 = HmacDrbgContext.init(seed)
check:
rng.generate(uint64) == rng2.generate(uint64)
test "antiseed":
var
rng = HmacDrbgContext.init([0])
rng2 = HmacDrbgContext.init([1])
check:
rng.generate(array[1024, byte]) != rng2.generate(array[1024, byte])