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:
Ayke van Laethem
2021-06-19 16:19:41 +02:00
committed by Ron Evans
parent d8ac7ccaae
commit d94f42f6e2
7 changed files with 298 additions and 15 deletions
+23
View File
@@ -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")
}
}
+1
View File
@@ -3,3 +3,4 @@ ENV2: VALUE2
arg: first
arg: second
random number check was successful