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}