]> Cypherpunks repositories - gostls13.git/commitdiff
crypto: add wasip1 support
authorJohan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Sat, 25 Mar 2023 17:35:11 +0000 (10:35 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 11 Apr 2023 20:54:07 +0000 (20:54 +0000)
Adds crypto/dsa, crypto/rand, x509 files and changes for the new
wasip1 port.

For #58141

Co-authored-by: Richard Musiol <neelance@gmail.com>
Co-authored-by: Achille Roussel <achille.roussel@gmail.com>
Co-authored-by: Julien Fabre <ju.pryz@gmail.com>
Co-authored-by: Evan Phoenix <evan@phx.io>
Change-Id: I9609e3d021cd7e06b813eedf5912febc52cc0f2c
Reviewed-on: https://go-review.googlesource.com/c/go/+/479624
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Run-TryBot: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Auto-Submit: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>

src/crypto/rand/rand.go
src/crypto/rand/rand_wasip1.go [new file with mode: 0644]
src/crypto/x509/root_unix.go
src/crypto/x509/root_wasm.go [moved from src/crypto/x509/root_js.go with 94% similarity]

index ac2635d1b3eecf007ac8f801380de1c024b07f3b..62738e2cb1a7df8a8cf3e3ec48d5a772ef91d4ae 100644 (file)
@@ -16,7 +16,8 @@ import "io"
 // On OpenBSD and macOS, Reader uses getentropy(2).
 // On other Unix-like systems, Reader reads from /dev/urandom.
 // On Windows systems, Reader uses the RtlGenRandom API.
-// On Wasm, Reader uses the Web Crypto API.
+// On JS/Wasm, Reader uses the Web Crypto API.
+// On WASIP1/Wasm, Reader uses random_get from wasi_snapshot_preview1.
 var Reader io.Reader
 
 // Read is a helper function that calls Reader.Read using io.ReadFull.
diff --git a/src/crypto/rand/rand_wasip1.go b/src/crypto/rand/rand_wasip1.go
new file mode 100644 (file)
index 0000000..984f99d
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build wasip1
+
+package rand
+
+import "syscall"
+
+func init() {
+       Reader = &reader{}
+}
+
+type reader struct{}
+
+func (r *reader) Read(b []byte) (int, error) {
+       // This uses the wasi_snapshot_preview1 random_get syscall defined in
+       // https://github.com/WebAssembly/WASI/blob/23a52736049f4327dd335434851d5dc40ab7cad1/legacy/preview1/docs.md#-random_getbuf-pointeru8-buf_len-size---result-errno.
+       // The definition does not explicitly guarantee that the entire buffer will
+       // be filled, but this appears to be the case in all runtimes tested.
+       err := syscall.RandomGet(b)
+       if err != nil {
+               return 0, err
+       }
+       return len(b), nil
+}
index aa54f891ca003a6c9dcaedc50a95a8c28569fa85..c513b20169d1d951a8786abf0b3eda35ade4e228 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build aix || dragonfly || freebsd || (js && wasm) || linux || netbsd || openbsd || solaris
+//go:build aix || dragonfly || freebsd || (js && wasm) || linux || netbsd || openbsd || solaris || wasip1
 
 package x509
 
similarity index 94%
rename from src/crypto/x509/root_js.go
rename to src/crypto/x509/root_wasm.go
index 7b3f1e486ff5cb2e4dcd60c565186d0641936136..275c9213d9594db6c5742e818a5efdf2057d351c 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build js && wasm
+//go:build wasm
 
 package x509