File: key_test.go

package info (click to toggle)
golang-github-smallstep-crypto 0.57.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,284 kB
  • sloc: sh: 53; makefile: 36
file content (80 lines) | stat: -rw-r--r-- 2,008 bytes parent folder | download | duplicates (2)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package tpm

import (
	"crypto"
	"crypto/x509"
	"encoding/base64"
	"encoding/json"
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"go.step.sm/crypto/keyutil"
	"go.step.sm/crypto/minica"
	"go.step.sm/crypto/x509util"
)

func TestKey_MarshalJSON(t *testing.T) {
	ca, err := minica.New(
		minica.WithGetSignerFunc(
			func() (crypto.Signer, error) {
				return keyutil.GenerateSigner("RSA", "", 2048)
			},
		),
	)
	require.NoError(t, err)

	signer, err := keyutil.GenerateSigner("RSA", "", 2048)
	require.NoError(t, err)

	cr, err := x509util.NewCertificateRequest(signer)
	require.NoError(t, err)
	cr.Subject.CommonName = "testkey"

	csr, err := cr.GetCertificateRequest()
	require.NoError(t, err)

	cert, err := ca.SignCSR(csr)
	require.NoError(t, err)

	key := &Key{
		name:       "key1",
		data:       []byte{1, 2, 3, 4},
		attestedBy: "ak1",
		createdAt:  time.Time{},
	}

	data, err := json.Marshal(key)
	require.NoError(t, err)

	m := map[string]any{}
	err = json.Unmarshal(data, &m)
	require.NoError(t, err)

	require.Equal(t, m["name"], key.name)
	require.Equal(t, m["data"], base64.StdEncoding.EncodeToString(key.data))
	require.Equal(t, m["attestedBy"], key.attestedBy)
	require.Equal(t, m["chain"], nil)
	require.Equal(t, m["createdAt"], key.createdAt.Format("2006-01-02T15:04:05Z"))

	key = &Key{
		name:       "key2",
		data:       []byte{1, 2, 3, 4},
		attestedBy: "ak1",
		chain:      []*x509.Certificate{cert, ca.Intermediate},
		createdAt:  time.Time{},
	}

	data, err = json.Marshal(key)
	require.NoError(t, err)

	m = map[string]any{}
	err = json.Unmarshal(data, &m)
	require.NoError(t, err)

	require.Equal(t, m["name"], key.name)
	require.Equal(t, m["data"], base64.StdEncoding.EncodeToString(key.data))
	require.Equal(t, m["attestedBy"], key.attestedBy)
	require.Equal(t, m["chain"], []any{base64.StdEncoding.EncodeToString(cert.Raw), base64.StdEncoding.EncodeToString(ca.Intermediate.Raw)})
	require.Equal(t, m["createdAt"], key.createdAt.Format("2006-01-02T15:04:05Z"))
}