mirror of
https://github.com/codex-storage/nim-websock.git
synced 2025-02-09 01:04:19 +00:00
* Use seq[byte] to store data. * Working bytes conversion. * Refactor the code. * Add test. * Add websocket test and fix closing handshake. * Add MsgReader to read data in external buffer. * rework frame reading * don't do toTitleCase * fix examples * use byte for more comfort * rework message reading + api * fix tests * adding specific exception types * minor cleanup * fixing tests * more tests * check the fin flag at the correct place * info for debug * split data not encoded frames * more tests * wip - control messages * closing flow and more explicit exception handling * test close and pings * add tests task to nimble * adding ci * change recv semantics * add frame tests * remove echo * better frame tests * fix * fix * handle continuation frames properly * more close logic handling * wip tests * handle close reasons properly * test control frames encoding * don't pass ws to event callbacks * fix masking and use correct base64 encoding * fix ci * addressing review comments * fix client example * i386 ci fix * wip ci * fix reading offset * don't read if socket closed * fix ci * wip * don't read if socket is closed Co-authored-by: Arijit Das <arijit@status.im> Co-authored-by: Arijit Das <arijitad.in@gmail.com>
27 lines
849 B
Nim
27 lines
849 B
Nim
import bearssl
|
|
|
|
## Random helpers: similar as in stdlib, but with BrHmacDrbgContext rng
|
|
const randMax = 18_446_744_073_709_551_615'u64
|
|
|
|
|
|
proc rand*(rng: var BrHmacDrbgContext, max: Natural): int =
|
|
if max == 0: return 0
|
|
var x: uint64
|
|
while true:
|
|
brHmacDrbgGenerate(addr rng, addr x, csize_t(sizeof(x)))
|
|
if x < randMax - (randMax mod (uint64(max) + 1'u64)): # against modulo bias
|
|
return int(x mod (uint64(max) + 1'u64))
|
|
|
|
proc genMaskKey*(rng: ref BrHmacDrbgContext): array[4, char] =
|
|
## Generates a random key of 4 random chars.
|
|
proc r(): char = char(rand(rng[], 255))
|
|
return [r(), r(), r(), r()]
|
|
|
|
proc genWebSecKey*(rng: ref BrHmacDrbgContext): seq[byte] =
|
|
var key = newSeq[byte](16)
|
|
proc r(): byte = byte(rand(rng[], 255))
|
|
## Generates a random key of 16 random chars.
|
|
for i in 0..15:
|
|
key.add(r())
|
|
return key
|