From d41b2be3a7576e8b80596d8c600be587bbbbff3e Mon Sep 17 00:00:00 2001 From: John <50754967+j-bm@users.noreply.github.com> Date: Wed, 17 Aug 2022 00:41:27 -0400 Subject: [PATCH] crypt: implement crypto.rand.read/1 for OpenBSD and FreeBSD (#15437) --- vlib/crypto/rand/rand_freebsd.c.v | 16 ++++++++++++++++ vlib/crypto/rand/rand_openbsd.c.v | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 vlib/crypto/rand/rand_freebsd.c.v create mode 100644 vlib/crypto/rand/rand_openbsd.c.v diff --git a/vlib/crypto/rand/rand_freebsd.c.v b/vlib/crypto/rand/rand_freebsd.c.v new file mode 100644 index 000000000..4d4d5e5cf --- /dev/null +++ b/vlib/crypto/rand/rand_freebsd.c.v @@ -0,0 +1,16 @@ +// Copyright (c) 2022 John Lloyd. All rights reserved. +// Use of this source code is governed by an MIT license +// that can be found in the LICENSE file. + +module rand + +#include + +fn C.arc4random_buf(p &byte, n usize) + +// read returns an array of `bytes_needed` random bytes read from the OS. +pub fn read(bytes_needed int) ?[]u8 { + mut buffer := unsafe { malloc_noscan(bytes_needed) } + C.arc4random_buf(buffer, bytes_needed) + return unsafe { buffer.vbytes(bytes_needed) } +} diff --git a/vlib/crypto/rand/rand_openbsd.c.v b/vlib/crypto/rand/rand_openbsd.c.v new file mode 100644 index 000000000..4d4d5e5cf --- /dev/null +++ b/vlib/crypto/rand/rand_openbsd.c.v @@ -0,0 +1,16 @@ +// Copyright (c) 2022 John Lloyd. All rights reserved. +// Use of this source code is governed by an MIT license +// that can be found in the LICENSE file. + +module rand + +#include + +fn C.arc4random_buf(p &byte, n usize) + +// read returns an array of `bytes_needed` random bytes read from the OS. +pub fn read(bytes_needed int) ?[]u8 { + mut buffer := unsafe { malloc_noscan(bytes_needed) } + C.arc4random_buf(buffer, bytes_needed) + return unsafe { buffer.vbytes(bytes_needed) } +} -- 2.30.2