-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathpgp_test.go
100 lines (85 loc) · 2.69 KB
/
pgp_test.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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package pgp
import (
"bytes"
"io/ioutil"
"log"
"math/rand"
"path/filepath"
"testing"
"github.com/nikirill/go-crypto/openpgp"
"github.com/stretchr/testify/require"
)
func TestSerialization(t *testing.T) {
var m map[string]*openpgp.Entity
var entities openpgp.EntityList
var err error
var buf bytes.Buffer
m, _ = analyzeRandomSksDumpFile(t)
for _, key := range m {
err = key.Serialize(&buf)
require.NoError(t, err)
entities, err = openpgp.ReadKeyRing(bytes.NewBuffer(buf.Bytes()))
require.NoError(t, err)
require.Equal(t, 1, len(entities))
require.Equal(t, key.PrimaryKey.PublicKey, entities[0].PrimaryKey.PublicKey)
buf.Reset()
}
}
func TestWriteThenLoadKeys(t *testing.T) {
var m1 map[string]*openpgp.Entity
var m2 []*Key
var entities openpgp.EntityList
var err error
tmpDir := "../../data/sks-tmp/"
m1, fileName := analyzeRandomSksDumpFile(t)
err = WriteKeysOnDisk(tmpDir, m1)
require.NoError(t, err)
m2, err = LoadKeysFromDisk([]string{fileName})
for _, key := range m2 {
//fmt.Printf("%s\n", key.ID)
entities, err = openpgp.ReadKeyRing(bytes.NewBuffer(key.Packet))
require.NoError(t, err)
require.Equal(t, 1, len(entities))
require.Equal(t, m1[key.ID].PrimaryKey, entities[0].PrimaryKey)
require.Equal(t, PrimaryEmail(m1[key.ID]), PrimaryEmail(entities[0]))
require.Equal(t, key.ID, PrimaryEmail(m1[key.ID]))
}
}
func analyzeRandomSksDumpFile(t *testing.T) (map[string]*openpgp.Entity, string) {
files, err := ioutil.ReadDir("../../data/sks-dump/")
require.NoError(t, err)
j := rand.Intn(len(files))
m, err := AnalyzeKeyDump([]string{files[j].Name()})
require.NoError(t, err)
return m, files[j].Name()
}
func TestGetEmailAddressFromId(t *testing.T) {
var email string
var err error
re := compileRegexToMatchEmail()
// expected format
email, err = getEmailAddressFromPGPId("Alice Wonderland <[email protected]>", re)
require.NoError(t, err)
require.Equal(t, "[email protected]", email)
// still valid email
email, err = getEmailAddressFromPGPId("Michael Steiner <[email protected]>", re)
require.NoError(t, err)
require.Equal(t, "[email protected]", email)
// id without email
email, err = getEmailAddressFromPGPId("Alice Wonderland", re)
require.Error(t, err)
// empty email
email, err = getEmailAddressFromPGPId("Alice Wonderland <>", re)
require.Error(t, err)
// non-valid email
email, err = getEmailAddressFromPGPId("Bob <[email protected]>", re)
require.Error(t, err)
}
func TestLoadKeysFromDisk(t *testing.T) {
sksDir := filepath.Join("../../data", SksParsedFolder)
files, err := GetFilesThatMatch(sksDir, SksParsedFullFileName)
require.NoError(t, err)
keys, err := LoadKeysFromDisk(files)
require.NoError(t, err)
log.Println(len(keys))
}