34df359554bdb39a67f69476212ea186b9163c2b
[epoint] / dsakey / dsakey_test.go
1 package dsakey
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 := GenKey()
28         if err != nil {
29                 t.Errorf("gen dsa key failed: %s", err)
30                 return
31         }
32         priv, err := NewEntity(key, time.Seconds(), "a", "b", "c")
33         if err != nil {
34                 t.Errorf("new entity failed: %s", err)
35         } else {
36                 testSignAndVerify(t, priv)
37         }
38 }
39
40 func TestGenIssuer(t *testing.T) {
41         denomination := "1/100 EUR"
42         priv, err := NewIssuerEntity([]byte("issuer-rand"), denomination)
43         if err != nil {
44                 t.Errorf("new entity failed: %s", err)
45         } else {
46                 testSignAndVerify(t, priv)
47         }
48         wpriv := new(bytes.Buffer)
49         err = priv.SerializePrivate(wpriv)
50         if err != nil {
51                 t.Errorf("priv key serialization failed: %s", err)
52                 return
53         }
54         wpub := new(bytes.Buffer)
55         err = priv.Serialize(wpub)
56         if err != nil {
57                 t.Errorf("pub key serialization failed: %s", err)
58                 return
59         }
60         es, err := openpgp.ReadKeyRing(wpub)
61         if err != nil {
62                 t.Errorf("pub key parsing failed: %s", err)
63                 return
64         }
65         isIssuer, issuer, denom, err := CheckEntity(es[0])
66         if err != nil {
67                 t.Errorf("pub key parsing failed: %s", err)
68                 return
69         }
70         if !isIssuer {
71                 t.Errorf("expected issuer key got: %v", es[0].Identities)
72         }
73         issuerfpr := fmt.Sprintf("%X", priv.PrimaryKey.Fingerprint)
74         if issuer != issuerfpr {
75                 t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
76         }
77         if denom != denomination {
78                 t.Errorf("expected denomination %q got %q", denomination, denom)
79         }
80
81         priv, err = NewHolderEntity([]byte("holder-rand"), issuerfpr, denomination)
82         if err != nil {
83                 t.Errorf("new entity failed: %s", err)
84         } else {
85                 testSignAndVerify(t, priv)
86         }
87         wpriv = new(bytes.Buffer)
88         err = priv.SerializePrivate(wpriv)
89         if err != nil {
90                 t.Errorf("priv key serialization failed: %s", err)
91                 return
92         }
93         wpub = new(bytes.Buffer)
94         err = priv.Serialize(wpub)
95         if err != nil {
96                 t.Errorf("pub key serialization failed: %s", err)
97                 return
98         }
99         es, err = openpgp.ReadKeyRing(wpub)
100         if err != nil {
101                 t.Errorf("pub key parsing failed: %s", err)
102                 return
103         }
104         isIssuer, issuer, denom, err = CheckEntity(es[0])
105         if err != nil {
106                 t.Errorf("pub key parsing failed: %s", err)
107                 return
108         }
109         if isIssuer {
110                 t.Errorf("expected non-issuer key got: %v", es[0].Identities)
111         }
112         if issuer != issuerfpr {
113                 t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
114         }
115         if denom != denomination {
116                 t.Errorf("expected denomination %q got %q", denomination, denom)
117         }
118 }