main.go raw
1 package main
2
3 import (
4 "fmt"
5 "common/crypto/secp256k1"
6 "common/crypto/sha256"
7 "common/helpers"
8 "syscall/js"
9 "time"
10 )
11
12 func main() {
13 seckey := sha256.Sum([]byte("benchmark test secret key material"))
14 pubkey, ok := secp256k1.PubKeyFromSecKey(seckey)
15 if !ok {
16 fmt.Println("FAIL: PubKeyFromSecKey")
17 return
18 }
19
20 fmt.Println("=== smesh crypto benchmark (Go WASM) ===")
21 fmt.Printf("pubkey: %s\n", helpers.HexEncode(pubkey[:]))
22
23 const n = 100
24
25 // Pre-hash messages.
26 var msgs [n][32]byte
27 for i := range msgs {
28 msgs[i] = sha256.Sum([]byte(fmt.Sprintf("benchmark message %d", i)))
29 }
30
31 // Aux randomness (zeros for deterministic bench).
32 var aux [32]byte
33
34 // Sign.
35 start := time.Now()
36 var sigs [n][64]byte
37 for i := range msgs {
38 sigs[i], _ = secp256k1.SignSchnorr(seckey, msgs[i], aux)
39 }
40 signDur := time.Since(start)
41
42 // Verify.
43 start = time.Now()
44 valid := 0
45 for i := range msgs {
46 if secp256k1.VerifySchnorr(pubkey, msgs[i], sigs[i]) {
47 valid++
48 }
49 }
50 verifyDur := time.Since(start)
51
52 fmt.Printf("\nsign %d ops: %v (%.1f ops/sec)\n", n, signDur, float64(n)/signDur.Seconds())
53 fmt.Printf("verify %d ops: %v (%.1f ops/sec)\n", n, verifyDur, float64(n)/verifyDur.Seconds())
54 fmt.Printf("valid: %d/%d\n", valid, n)
55
56 // Keep alive briefly so output flushes.
57 done := make(chan struct{})
58 js.Global().Get("setTimeout").Invoke(js.FuncOf(func(this js.Value, args []js.Value) any {
59 close(done)
60 return nil
61 }), 100)
62 <-done
63 }
64