-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
keys.go
38 lines (32 loc) · 974 Bytes
/
keys.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package test
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
// Methods to generate private keys. If generation starts slowing down test
// execution then switch over to pre-generated keys.
// NewEC256Key returns an ECDSA key over the P256 curve
func NewEC256Key(tb testing.TB) *ecdsa.PrivateKey {
key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
require.NoError(tb, err)
return key
}
// NewKeyID returns a random id useful for identifying keys
func NewKeyID(tb testing.TB) string {
choices := make([]byte, 32)
_, err := rand.Read(choices)
require.NoError(tb, err)
return keyIDFromBytes(choices)
}
func keyIDFromBytes(choices []byte) string {
const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var builder strings.Builder
for _, choice := range choices {
builder.WriteByte(alphabet[int(choice)%len(alphabet)])
}
return builder.String()
}