Implement zephyr urandom and monotime (#19142)
* implement urandom for Zephyr * add monotime on zephyr Co-authored-by: Jaremy Creechley <jaremy.creechley@panthalassa.com>
This commit is contained in:
parent
bec4900165
commit
6976d18519
2 changed files with 18 additions and 1 deletions
|
|
@ -76,6 +76,10 @@ when defined(js):
|
||||||
elif defined(posix) and not defined(osx):
|
elif defined(posix) and not defined(osx):
|
||||||
import posix
|
import posix
|
||||||
|
|
||||||
|
when defined(zephyr):
|
||||||
|
proc k_uptime_ticks(): int64 {.importc: "k_uptime_ticks", header: "<kernel.h>".}
|
||||||
|
proc k_ticks_to_ns_floor64(ticks: int64): int64 {.importc: "k_ticks_to_ns_floor64", header: "<kernel.h>".}
|
||||||
|
|
||||||
elif defined(windows):
|
elif defined(windows):
|
||||||
proc QueryPerformanceCounter(res: var uint64) {.
|
proc QueryPerformanceCounter(res: var uint64) {.
|
||||||
importc: "QueryPerformanceCounter", stdcall, dynlib: "kernel32".}
|
importc: "QueryPerformanceCounter", stdcall, dynlib: "kernel32".}
|
||||||
|
|
@ -98,6 +102,9 @@ proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
|
||||||
mach_timebase_info(machAbsoluteTimeFreq)
|
mach_timebase_info(machAbsoluteTimeFreq)
|
||||||
result = MonoTime(ticks: ticks * machAbsoluteTimeFreq.numer div
|
result = MonoTime(ticks: ticks * machAbsoluteTimeFreq.numer div
|
||||||
machAbsoluteTimeFreq.denom)
|
machAbsoluteTimeFreq.denom)
|
||||||
|
elif defined(zephyr):
|
||||||
|
let ticks = k_ticks_to_ns_floor64(k_uptime_ticks())
|
||||||
|
result = MonoTime(ticks: ticks)
|
||||||
elif defined(posix):
|
elif defined(posix):
|
||||||
var ts: Timespec
|
var ts: Timespec
|
||||||
discard clock_gettime(CLOCK_MONOTONIC, ts)
|
discard clock_gettime(CLOCK_MONOTONIC, ts)
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ when defined(posix):
|
||||||
import posix
|
import posix
|
||||||
|
|
||||||
const
|
const
|
||||||
batchImplOS = defined(freebsd) or defined(openbsd) or (defined(macosx) and not defined(ios))
|
batchImplOS = defined(freebsd) or defined(openbsd) or defined(zephyr) or (defined(macosx) and not defined(ios))
|
||||||
batchSize {.used.} = 256
|
batchSize {.used.} = 256
|
||||||
|
|
||||||
when batchImplOS:
|
when batchImplOS:
|
||||||
|
|
@ -207,6 +207,16 @@ elif defined(openbsd):
|
||||||
proc getRandomImpl(p: pointer, size: int): int {.inline.} =
|
proc getRandomImpl(p: pointer, size: int): int {.inline.} =
|
||||||
result = getentropy(p, cint(size)).int
|
result = getentropy(p, cint(size)).int
|
||||||
|
|
||||||
|
elif defined(zephyr):
|
||||||
|
proc sys_csrand_get(dst: pointer, length: csize_t): cint {.importc: "sys_csrand_get", header: "<random/rand32.h>".}
|
||||||
|
# Fill the destination buffer with cryptographically secure
|
||||||
|
# random data values
|
||||||
|
#
|
||||||
|
|
||||||
|
proc getRandomImpl(p: pointer, size: int): int {.inline.} =
|
||||||
|
# 0 if success, -EIO if entropy reseed error
|
||||||
|
result = sys_csrand_get(p, csize_t(size)).int
|
||||||
|
|
||||||
elif defined(freebsd):
|
elif defined(freebsd):
|
||||||
type cssize_t {.importc: "ssize_t", header: "<sys/types.h>".} = int
|
type cssize_t {.importc: "ssize_t", header: "<sys/types.h>".} = int
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue