mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
use Security.framework with SecRandomCopyBytes for rand_bytes on darwin
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
package crypto
|
||||||
|
|
||||||
|
import "core:fmt"
|
||||||
|
import "core:sys/darwin"
|
||||||
|
|
||||||
|
_rand_bytes :: proc(dst: []byte) {
|
||||||
|
res := darwin.SecRandomCopyBytes(count=len(dst), bytes=raw_data(dst))
|
||||||
|
if res != .Success {
|
||||||
|
panic(fmt.tprintf("crypto/rand_bytes: SecRandomCopyBytes returned non-zero result: %v", res))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
//+build freebsd, openbsd, darwin
|
//+build freebsd, openbsd
|
||||||
package crypto
|
package crypto
|
||||||
|
|
||||||
foreign import libc "system:c"
|
foreign import libc "system:c"
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
//+build darwin
|
||||||
|
package darwin
|
||||||
|
|
||||||
|
foreign import security "system:Security.framework"
|
||||||
|
|
||||||
|
// A reference to a random number generator.
|
||||||
|
SecRandomRef :: distinct rawptr
|
||||||
|
|
||||||
|
OSStatus :: distinct i32
|
||||||
|
|
||||||
|
errSec :: enum OSStatus {
|
||||||
|
Success = 0, // No error.
|
||||||
|
Unimplemented = -4, // Function or operation not implemented.
|
||||||
|
|
||||||
|
// Many more...
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign security {
|
||||||
|
// Synonym for nil, uses a cryptographically secure random number generator.
|
||||||
|
kSecRandomDefault: SecRandomRef
|
||||||
|
|
||||||
|
// Generates an array of cryptographically secure random bytes.
|
||||||
|
SecRandomCopyBytes :: proc(rnd: SecRandomRef = kSecRandomDefault, count: uint, bytes: [^]byte) -> errSec ---
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user