0226d125845a5f9125e6fc93a172da049cd9d2fa
[epoint] / pkg / key / key_test.go
1 package key
2
3 import (
4         "bytes"
5         "crypto/openpgp"
6         "fmt"
7         "testing"
8         "time"
9 )
10
11 func testSignAndVerify(t *testing.T, priv *openpgp.Entity) {
12         msg := []byte("testing")
13         w := new(bytes.Buffer)
14         err := openpgp.DetachSign(w, priv, bytes.NewBuffer(msg))
15         if err != nil {
16                 t.Errorf("error signing: %s", err)
17                 return
18         }
19
20         _, err = openpgp.CheckDetachedSignature(openpgp.EntityList{priv}, bytes.NewBuffer(msg), w)
21         if err != nil {
22                 t.Errorf("Verify failed: %s", err)
23         }
24 }
25
26 func TestKey(t *testing.T) {
27         key, err := RandomDsaKey()
28         if err != nil {
29                 t.Errorf("gen dsa key failed: %s", err)
30                 return
31         }
32         priv, err := New(key, time.Seconds(), "a", "b", "c")
33         if err != nil {
34                 t.Errorf("New failed: %s", err)
35         } else {
36                 testSignAndVerify(t, priv)
37         }
38 }
39
40 func TestId(t *testing.T) {
41         idwant := "E51F405B809FA2DEA760603F9D33F730611CBCD9"
42         key, err := Issuer([]byte("rand"), "")
43         if err != nil {
44                 t.Errorf("Issuer failed: %s", err)
45                 return
46         }
47         id := Id(key)
48         if id != idwant {
49                 t.Errorf("Id failed: expected %s, got %s", idwant, id)
50         }
51 }
52
53 func TestIssuerHolder(t *testing.T) {
54         denomination := "1/100 EUR"
55         priv, err := Issuer([]byte("issuer-rand"), denomination)
56         if err != nil {
57                 t.Errorf("Issuer failed: %s", err)
58         } else {
59                 testSignAndVerify(t, priv)
60         }
61         wpriv := new(bytes.Buffer)
62         err = priv.SerializePrivate(wpriv)
63         if err != nil {
64                 t.Errorf("priv key serialization failed: %s", err)
65                 return
66         }
67         wpub := new(bytes.Buffer)
68         err = priv.Serialize(wpub)
69         if err != nil {
70                 t.Errorf("pub key serialization failed: %s", err)
71                 return
72         }
73         es, err := openpgp.ReadKeyRing(wpub)
74         if err != nil {
75                 t.Errorf("pub key parsing failed: %s", err)
76                 return
77         }
78         isIssuer, issuer, denom, err := Check(es[0])
79         if err != nil {
80                 t.Errorf("Check failed: %s", err)
81                 return
82         }
83         if !isIssuer {
84                 t.Errorf("expected issuer key got: %v", es[0].Identities)
85         }
86         issuerfpr := fmt.Sprintf("%X", priv.PrimaryKey.Fingerprint)
87         if issuer != issuerfpr {
88                 t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
89         }
90         if denom != denomination {
91                 t.Errorf("expected denomination %q got %q", denomination, denom)
92         }
93
94         priv, err = Holder([]byte("holder-rand"), issuerfpr, denomination)
95         if err != nil {
96                 t.Errorf("Holder failed: %s", err)
97         } else {
98                 testSignAndVerify(t, priv)
99         }
100         wpriv = new(bytes.Buffer)
101         err = priv.SerializePrivate(wpriv)
102         if err != nil {
103                 t.Errorf("priv key serialization failed: %s", err)
104                 return
105         }
106         wpub = new(bytes.Buffer)
107         err = priv.Serialize(wpub)
108         if err != nil {
109                 t.Errorf("pub key serialization failed: %s", err)
110                 return
111         }
112         es, err = openpgp.ReadKeyRing(wpub)
113         if err != nil {
114                 t.Errorf("pub key parsing failed: %s", err)
115                 return
116         }
117         isIssuer, issuer, denom, err = Check(es[0])
118         if err != nil {
119                 t.Errorf("Check failed: %s", err)
120                 return
121         }
122         if isIssuer {
123                 t.Errorf("expected non-issuer key got: %v", es[0].Identities)
124         }
125         if issuer != issuerfpr {
126                 t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
127         }
128         if denom != denomination {
129                 t.Errorf("expected denomination %q got %q", denomination, denom)
130         }
131 }