...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package crypto11
23
24 import (
25 "crypto"
26 "testing"
27 "time"
28
29 "github.com/stretchr/testify/require"
30 )
31
32 var threadCount = 32
33 var signaturesPerThread = 256
34
35 func TestThreadedRSA(t *testing.T) {
36 if testing.Short() {
37 t.Skip()
38 }
39
40 ctx, err := ConfigureFromFile("config")
41 require.NoError(t, err)
42
43 defer func() {
44 require.NoError(t, ctx.Close())
45 }()
46
47 id := randomBytes()
48 key, err := ctx.GenerateRSAKeyPair(id, rsaSize)
49 require.NoError(t, err)
50 defer func(k Signer) { _ = k.Delete() }(key)
51
52 done := make(chan int)
53 started := time.Now()
54
55 t.Logf("Starting %v threads", threadCount)
56
57 for i := 0; i < threadCount; i++ {
58 go signingRoutine(t, key, done)
59
60
61 time.Sleep(50 * time.Millisecond)
62 }
63 t.Logf("Waiting for %v threads", threadCount)
64 for i := 0; i < threadCount; i++ {
65 <-done
66 }
67 finished := time.Now()
68 ticks := finished.Sub(started)
69 elapsed := float64(ticks) / 1000000000.0
70 t.Logf("Made %v signatures in %v elapsed (%v/s)",
71 threadCount*signaturesPerThread,
72 elapsed, float64(threadCount*signaturesPerThread)/elapsed)
73 }
74
75 func signingRoutine(t *testing.T, key crypto.Signer, done chan int) {
76 for i := 0; i < signaturesPerThread; i++ {
77 testRsaSigningPKCS1v15(t, key, crypto.SHA1)
78
79
80 time.Sleep(50 * time.Millisecond)
81 }
82 done <- 1
83 }
84
View as plain text