mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 19:43:44 +00:00
crypto/rand: replace this package with a TinyGo version
This package provides access to an operating system resource
(cryptographic numbers) and so needs to be replaced with a TinyGo
version that does this in a different way.
I've made the following choices while adding this feature:
- I'm using the getentropy call whenever possible (most POSIX like
systems), because it is easier to use and more reliable. Linux is
the exception: it only added getentropy relatively recently.
- I've left bare-metal implementations to a future patch. This because
it's hard to reliably get cryptographically secure random numbers on
embedded devices: most devices do not have a hardware PRNG for this
purpose.
This commit is contained in:
committed by
Ron Evans
parent
d8ac7ccaae
commit
d94f42f6e2
Vendored
+23
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"os"
|
||||
)
|
||||
|
||||
@@ -20,4 +21,26 @@ func main() {
|
||||
for _, arg := range os.Args[1:] {
|
||||
println("arg:", arg)
|
||||
}
|
||||
|
||||
// Check for crypto/rand support.
|
||||
checkRand()
|
||||
}
|
||||
|
||||
func checkRand() {
|
||||
buf := make([]byte, 500)
|
||||
n, err := rand.Read(buf)
|
||||
if n != len(buf) || err != nil {
|
||||
println("could not read random numbers:", err)
|
||||
}
|
||||
|
||||
// Very simple test that random numbers are at least somewhat random.
|
||||
sum := 0
|
||||
for _, b := range buf {
|
||||
sum += int(b)
|
||||
}
|
||||
if sum < 95*len(buf) || sum > 159*len(buf) {
|
||||
println("random numbers don't seem that random, the average byte is", sum/len(buf))
|
||||
} else {
|
||||
println("random number check was successful")
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
@@ -3,3 +3,4 @@ ENV2: VALUE2
|
||||
|
||||
arg: first
|
||||
arg: second
|
||||
random number check was successful
|
||||
|
||||
Reference in New Issue
Block a user