1package pds
2
3import (
4 "bytes"
5 "crypto/ecdsa"
6 "crypto/elliptic"
7 "encoding/json"
8 "fmt"
9 "testing"
10
11 "github.com/lestrrat-go/jwx/v2/jwk"
12)
13
14// make a root signing key for testing
15func TestJWK_GenKey(t *testing.T) {
16 // to get the same values every time, we need to create a static source
17 // of "randomness"
18 rdr := bytes.NewReader([]byte("01234567890123456789012345678901234567890123456789ABCDEF"))
19 raw, err := ecdsa.GenerateKey(elliptic.P384(), rdr)
20 if err != nil {
21 fmt.Printf("failed to generate new ECDSA private key: %s\n", err)
22 return
23 }
24
25 key, err := jwk.FromRaw(raw)
26 if err != nil {
27 fmt.Printf("failed to create ECDSA key: %s\n", err)
28 return
29 }
30 if _, ok := key.(jwk.ECDSAPrivateKey); !ok {
31 fmt.Printf("expected jwk.ECDSAPrivateKey, got %T\n", key)
32 return
33 }
34
35 key.Set(jwk.KeyIDKey, "mykey")
36
37 buf, err := json.MarshalIndent(key, "", " ")
38 if err != nil {
39 fmt.Printf("failed to marshal key into JSON: %s\n", err)
40 return
41 }
42 fmt.Printf("%s\n", buf)
43
44 // OUTPUT:
45 // {
46 // "crv": "P-384",
47 // "d": "ODkwMTIzNDU2Nzg5MDEyMz7deMbyLt8g4cjcxozuIoygLLlAeoQ1AfM9TSvxkFHJ",
48 // "kid": "mykey",
49 // "kty": "EC",
50 // "x": "gvvRMqm1w5aHn7sVNA2QUJeOVcedUnmiug6VhU834gzS9k87crVwu9dz7uLOdoQl",
51 // "y": "7fVF7b6J_6_g6Wu9RuJw8geWxEi5ja9Gp2TSdELm5u2E-M7IF-bsxqcdOj3n1n7N"
52 // }
53}