key_test.go

 1package identity
 2
 3import (
 4	"crypto/rsa"
 5	"encoding/json"
 6	"testing"
 7
 8	"github.com/stretchr/testify/require"
 9
10	"github.com/MichaelMure/git-bug/repository"
11)
12
13func TestPublicKeyJSON(t *testing.T) {
14	k := generatePublicKey()
15
16	dataJSON, err := json.Marshal(k)
17	require.NoError(t, err)
18
19	var read Key
20	err = json.Unmarshal(dataJSON, &read)
21	require.NoError(t, err)
22
23	require.Equal(t, k, &read)
24}
25
26func TestStoreLoad(t *testing.T) {
27	repo := repository.NewMockRepoKeyring()
28
29	// public + private
30	k := GenerateKey()
31
32	// Store
33
34	dataJSON, err := json.Marshal(k)
35	require.NoError(t, err)
36
37	err = k.storePrivate(repo)
38	require.NoError(t, err)
39
40	// Load
41
42	var read Key
43	err = json.Unmarshal(dataJSON, &read)
44	require.NoError(t, err)
45
46	err = read.EnsurePrivateKey(repo)
47	require.NoError(t, err)
48
49	require.Equal(t, k.public, read.public)
50
51	require.IsType(t, (*rsa.PrivateKey)(nil), k.private.PrivateKey)
52
53	// See https://github.com/golang/crypto/pull/175
54	rsaPriv := read.private.PrivateKey.(*rsa.PrivateKey)
55	back := rsaPriv.Primes[0]
56	rsaPriv.Primes[0] = rsaPriv.Primes[1]
57	rsaPriv.Primes[1] = back
58
59	require.True(t, k.private.PrivateKey.(*rsa.PrivateKey).Equal(read.private.PrivateKey))
60}