10 var signedData = []struct {
18 `-----BEGIN PGP SIGNED MESSAGE-----
22 -----BEGIN PGP SIGNATURE-----
24 `, true, "SHA1", "body", "-----BEGIN PGP SIGNATURE-----\nsig\n"},
26 `-----BEGIN PGP SIGNED MESSAGE-----
31 -----BEGIN PGP SIGNATURE-----
33 `, false, "", "body", "-----BEGIN PGP SIGNATURE-----\nsig\n"},
36 func TestSigned(t *testing.T) {
37 for _, x := range signedData {
38 c, err := ParseSigned([]byte(x.text))
40 t.Errorf("parsing %q failed: %s\n", x.text, err)
43 if string(c.Body) != x.body {
44 t.Errorf("expected: %q, got %q\n", x.body, c.Body)
46 if string(c.Signature) != x.sig {
47 t.Errorf("expected: %q, got %q\n", x.sig, c.Signature)
50 for _, x := range signedData {
54 c := &Signed{x.hash, []byte(x.body), []byte(x.sig)}
55 s, err := FormatSigned(c)
57 t.Errorf("formating %#v failed: %s\n", c, err)
60 if string(s) != x.text {
61 t.Errorf("expected: %q, got %q\n", x.text, s)
66 var docData = []struct {
74 `Content-Type: text/vnd.epoint.draft; charset=utf-8
79 `, true, "Draft", []string{"K1", "K2-Foo", "K3"}, []string{"v1", "v 2", "v 3"}},
81 `Content-Type: text/vnd.epoint.debit; charset=utf-8
86 `, true, "DebitCert", []string{"K1", "K2-Foo", "K3"}, []string{" v1", "v 2", "v 3"}},
88 `Content-Type: text/vnd.epoint.credit; charset=utf-8
94 `, false, "CreditCert", []string{"K1", "K2-Foo", "K3"}, []string{"v1", "v 2", "v 3"}},
97 func TestDocument(t *testing.T) {
98 for _, x := range docData {
99 doc, err := ParseDocument([]byte(x.text))
101 t.Errorf("parsing %q failed: %s\n", x.text, err)
104 if string(doc.Type) != x.t {
105 t.Errorf("expected: %q, got %q\n", x.t, doc.Type)
107 if len(doc.Fields) != len(x.k) {
108 t.Errorf("expected: %d fields, got %d\n", len(x.k), len(doc.Fields))
110 for i, k := range x.k {
111 if doc.Fields[k] != x.v[i] {
112 t.Errorf("value of %s expected to be %s, got %s\n", k, x.v[i], doc.Fields[k])
116 for _, x := range docData {
122 doc.Fields = make(map[string]string)
124 for i, k := range x.k {
125 doc.Fields[k] = x.v[i]
127 s, err := FormatDocument(doc)
129 t.Errorf("formating %#v failed: %s\n", doc, err)
132 if string(s) != x.text {
133 t.Errorf("expected: %q, got %q\n", x.text, s)
138 const draftBody = `Content-Type: text/vnd.epoint.draft; charset=utf-8
140 Drawer: 000000000000000000000000000000000000000A
141 Beneficiary: 000000000000000000000000000000000000000B
143 Denomination: half euro
144 Issuer: 000000000000000000000000000000000000000D
145 Authorized-By: 000000000000000000000000000000000000000C
146 Maturity-Date: 2011-11-13T12:20:35Z
147 Expiry-Date: 2011-12-27T09:18:46Z
152 func TestDraft(t *testing.T) {
153 doc, err := ParseDocument([]byte(draftBody))
155 t.Errorf("ParseDocument failed: %s\n", err)
158 iv, err := ParseStruct(doc)
160 t.Errorf("ParseStruct %v failed: %s\n", doc, err)
165 t.Errorf("expected *Draft got %#v\n", iv)
168 doc, err = FormatStruct(d)
170 t.Errorf("format %v draft failed: %s\n", d, err)
173 s, err := FormatDocument(doc)
175 t.Errorf("format %v doc failed: %s\n", doc, err)
178 if string(s) != draftBody {
179 t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, draftBody, s)
183 const debitBody = `Content-Type: text/vnd.epoint.debit; charset=utf-8
185 Holder: 0000000000000000000000000000000000000009
188 Denomination: half euro
189 Issuer: 000000000000000000000000000000000000000B
190 Date: 2011-11-13T12:20:35Z
191 Authorized-By: 000000000000000000000000000000000000000A
194 Last-Credit-Serial: 12
195 Last-Cert: 000000000000000000000000000000000000000C
196 References: 000000000000000000000000000000000000000C
197 000000000000000000000000000000000000000F
199 Draft: 000000000000000000000000000000000000000D
200 Beneficiary: 000000000000000000000000000000000000000E
203 func TestCert(t *testing.T) {
204 doc, err := ParseDocument([]byte(debitBody))
206 t.Errorf("ParseDocument failed: %s\n", err)
209 iv, err := ParseStruct(doc)
211 t.Errorf("ParseStruct %v failed: %s\n", doc, err)
214 d, ok := iv.(*DebitCert)
216 t.Errorf("expected *DebitCert got %#v\n", iv)
219 doc, err = FormatStruct(d)
221 t.Errorf("format %v draft failed: %s\n", d, err)
224 s, err := FormatDocument(doc)
226 t.Errorf("format %v doc failed: %s\n", doc, err)
229 if string(s) != debitBody {
230 t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, debitBody, s)
234 func parsekey(key []byte) (*openpgp.Entity, error) {
235 elist, err := openpgp.ReadArmoredKeyRing(bytes.NewBuffer(key))
240 return nil, fmt.Errorf("expected one key, got %d", len(elist))
245 func TestSign(t *testing.T) {
246 k1, err := parsekey(skey1)
248 t.Errorf("parsing key1 failed: %s", err)
251 k2, err := parsekey(pkey2)
253 t.Errorf("parsing key2 failed: %s", err)
256 signed, err := Sign([]byte(debitBody), k1)
258 t.Errorf("Sign failed: %s", err)
261 err = Verify(signed, openpgp.EntityList{k1})
263 t.Errorf("Verify failed: %s", err)
265 err = Verify(signed, openpgp.EntityList{k2})
267 t.Errorf("Verify succeeded with wrong key")
271 func debitcert() (d *DebitCert, err error) {
272 doc, err := ParseDocument([]byte(debitBody))
276 iv, err := ParseStruct(doc)
280 d, ok := iv.(*DebitCert)
282 err = fmt.Errorf("expecetd *DebitCert, got %T", d)
287 func BenchmarkSign(b *testing.B) {
288 d, err := debitcert()
293 for i := 0; i < b.N; i++ {
294 k, err := parsekey(skey1)
298 _, _, err = Format(d, k)
305 func BenchmarkVerify(b *testing.B) {
306 d, err := debitcert()
310 k, err := parsekey(skey1)
314 s, _, err := Format(d, k)
319 for i := 0; i < b.N; i++ {
320 k, err := parsekey(skey1)
324 _, signed, err := Parse(s)
328 err = Verify(signed, openpgp.EntityList{k})
335 var skey1 = []byte(`-----BEGIN PGP PRIVATE KEY BLOCK-----
337 xcD7BAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
338 WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
339 boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
340 /////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
341 PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
342 rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
343 0ysQBACIdEX3XRinq+oFm3+YFu5bC1Ewry7eVxukto18dtMJnU69oMjF3x7Uio5A
344 kvYNWYPxdtLjEzk/HMo/3Mg6u/jK006CPqZRcx/m3B5R7gYb5D9PyF/tJsrht4nD
345 eDuCAT00kHKYMElgwSzXg03cFcC5AEMf6U7MsrX1JLwY5Dq12gAAoOX6RPKzHB+1
346 U7YCHnNg0H1dkf9eCuzNBklzc3VlcsJMBBMRCAAWBQIAAAAACRCRl3ps/DHg6wIZ
347 AQIbAwAAIroAoBn5gA6TmLKXU9ASu+ENhV0UxowzAKA9Y/4CiQzAeCDcKIcWCg7W
350 -----END PGP PRIVATE KEY BLOCK-----
353 var pkey2 = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK-----
355 xsDiBAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
356 WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
357 boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
358 /////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
359 PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
360 rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
361 0ysQBACFl7Go0A5UqlnmwRmsLfvAEBM2+tsIoBlBDEwcgd+nJZzCQpAqO/OpSqHk
362 Yx4imGcdknfPLkMmN+Kz9j4o0T+LZuYyblhuj2t1M9lf0Is/Go0Drf/7oc2KpHAo
363 nfKu7fkM5nfZWFsgE9TxOz8SQa2RuuhpbkpB2k0Vg2TbqTpFeM0GSXNzdWVywkwE
364 ExEIABYFAgAAAAAJEKqJF6U/VQ52AhkBAhsDAADIMwCgt/kmhRwmlzcnc1S3Qlfo
365 BD0PBa8AoG5Vm9U4gzWQM/BzVxDToJPB1ZHf
367 -----END PGP PUBLIC KEY BLOCK-----