9 var signedData = []struct {
17 `-----BEGIN PGP SIGNED MESSAGE-----
21 -----BEGIN PGP SIGNATURE-----
23 `, true, "SHA1", "body", "-----BEGIN PGP SIGNATURE-----\nsig\n"},
25 `-----BEGIN PGP SIGNED MESSAGE-----
30 -----BEGIN PGP SIGNATURE-----
32 `, false, "", "body", "-----BEGIN PGP SIGNATURE-----\nsig\n"},
35 func TestSigned(t *testing.T) {
36 for _, x := range signedData {
37 c, err := ParseSigned([]byte(x.text))
39 t.Errorf("parsing %q failed: %s\n", x.text, err)
42 if string(c.Body) != x.body {
43 t.Errorf("expected: %q, got %q\n", x.body, c.Body)
45 if string(c.Signature) != x.sig {
46 t.Errorf("expected: %q, got %q\n", x.sig, c.Signature)
49 for _, x := range signedData {
53 c := &Signed{x.hash, []byte(x.body), []byte(x.sig)}
54 s, err := FormatSigned(c)
56 t.Errorf("formating %#v failed: %s\n", c, err)
59 if string(s) != x.text {
60 t.Errorf("expected: %q, got %q\n", x.text, s)
65 var docData = []struct {
73 `Content-Type: text/vnd.epoint.draft; charset=utf-8
78 `, true, "Draft", []string{"K1", "K2-Foo", "K3"}, []string{"v1", "v 2", "v 3"}},
80 `Content-Type: text/vnd.epoint.debit; charset=utf-8
85 `, true, "DebitCert", []string{"K1", "K2-Foo", "K3"}, []string{" v1", "v 2", "v 3"}},
87 `Content-Type: text/vnd.epoint.credit; charset=utf-8
93 `, false, "CreditCert", []string{"K1", "K2-Foo", "K3"}, []string{"v1", "v 2", "v 3"}},
96 func TestDocument(t *testing.T) {
97 for _, x := range docData {
98 doc, err := ParseDocument([]byte(x.text))
100 t.Errorf("parsing %q failed: %s\n", x.text, err)
103 if string(doc.Type) != x.t {
104 t.Errorf("expected: %q, got %q\n", x.t, doc.Type)
106 if len(doc.Fields) != len(x.k) {
107 t.Errorf("expected: %d fields, got %d\n", len(x.k), len(doc.Fields))
109 for i, k := range x.k {
110 if doc.Fields[k] != x.v[i] {
111 t.Errorf("value of %s expected to be %s, got %s\n", k, x.v[i], doc.Fields[k])
115 for _, x := range docData {
121 doc.Fields = make(map[string]string)
123 for i, k := range x.k {
124 doc.Fields[k] = x.v[i]
126 s, err := FormatDocument(doc)
128 t.Errorf("formating %#v failed: %s\n", doc, err)
131 if string(s) != x.text {
132 t.Errorf("expected: %q, got %q\n", x.text, s)
137 const draftBody = `Content-Type: text/vnd.epoint.draft; charset=utf-8
139 Drawer: 000000000000000000000000000000000000000A
140 Beneficiary: 000000000000000000000000000000000000000B
142 Denomination: half euro
143 Issuer: 000000000000000000000000000000000000000D
144 Authorized-By: 000000000000000000000000000000000000000C
145 Maturity-Date: 2011-11-13T12:20:35Z
146 Expiry-Date: 2011-12-27T09:18:46Z
151 func TestDraft(t *testing.T) {
152 doc, err := ParseDocument([]byte(draftBody))
154 t.Errorf("ParseDocument failed: %s\n", err)
157 iv, err := ParseStruct(doc)
159 t.Errorf("ParseStruct %v failed: %s\n", doc, err)
164 t.Errorf("expected *Draft got %#v\n", iv)
167 doc, err = FormatStruct(d)
169 t.Errorf("format %v draft failed: %s\n", d, err)
172 s, err := FormatDocument(doc)
174 t.Errorf("format %v doc failed: %s\n", doc, err)
177 if string(s) != draftBody {
178 t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, draftBody, s)
182 const debitBody = `Content-Type: text/vnd.epoint.debit; charset=utf-8
184 Holder: 0000000000000000000000000000000000000009
187 Denomination: half euro
188 Issuer: 000000000000000000000000000000000000000B
189 Date: 2011-11-13T12:20:35Z
190 Authorized-By: 000000000000000000000000000000000000000A
193 Last-Credit-Serial: 12
194 Last-Cert: 000000000000000000000000000000000000000C
195 References: 000000000000000000000000000000000000000C
196 000000000000000000000000000000000000000F
198 Draft: 000000000000000000000000000000000000000D
199 Beneficiary: 000000000000000000000000000000000000000E
202 func TestCert(t *testing.T) {
203 doc, err := ParseDocument([]byte(debitBody))
205 t.Errorf("ParseDocument failed: %s\n", err)
208 iv, err := ParseStruct(doc)
210 t.Errorf("ParseStruct %v failed: %s\n", doc, err)
213 d, ok := iv.(*DebitCert)
215 t.Errorf("expected *DebitCert got %#v\n", iv)
218 doc, err = FormatStruct(d)
220 t.Errorf("format %v draft failed: %s\n", d, err)
223 s, err := FormatDocument(doc)
225 t.Errorf("format %v doc failed: %s\n", doc, err)
228 if string(s) != debitBody {
229 t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, debitBody, s)
233 func parsekey(key []byte, t *testing.T) *openpgp.Entity {
234 elist, err := openpgp.ReadArmoredKeyRing(bytes.NewBuffer(key))
240 t.Errorf("expected one key, got %d", len(elist))
246 func TestSign(t *testing.T) {
247 k1 := parsekey(skey1, t)
248 k2 := parsekey(pkey2, t)
249 if k1 == nil || k2 == nil {
250 t.Errorf("parsing keys failed")
253 signed, err := Sign([]byte(debitBody), k1)
255 t.Errorf("Sign failed: %s", err)
258 err = Verify(signed, openpgp.EntityList{k1})
260 t.Errorf("Verify failed: %s", err)
262 err = Verify(signed, openpgp.EntityList{k2})
264 t.Errorf("Verify succeeded with wrong key")
268 var skey1 = []byte(`-----BEGIN PGP PRIVATE KEY BLOCK-----
270 xcD7BAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
271 WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
272 boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
273 /////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
274 PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
275 rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
276 0ysQBACIdEX3XRinq+oFm3+YFu5bC1Ewry7eVxukto18dtMJnU69oMjF3x7Uio5A
277 kvYNWYPxdtLjEzk/HMo/3Mg6u/jK006CPqZRcx/m3B5R7gYb5D9PyF/tJsrht4nD
278 eDuCAT00kHKYMElgwSzXg03cFcC5AEMf6U7MsrX1JLwY5Dq12gAAoOX6RPKzHB+1
279 U7YCHnNg0H1dkf9eCuzNBklzc3VlcsJMBBMRCAAWBQIAAAAACRCRl3ps/DHg6wIZ
280 AQIbAwAAIroAoBn5gA6TmLKXU9ASu+ENhV0UxowzAKA9Y/4CiQzAeCDcKIcWCg7W
283 -----END PGP PRIVATE KEY BLOCK-----
286 var pkey2 = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK-----
288 xsDiBAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
289 WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
290 boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
291 /////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
292 PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
293 rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
294 0ysQBACFl7Go0A5UqlnmwRmsLfvAEBM2+tsIoBlBDEwcgd+nJZzCQpAqO/OpSqHk
295 Yx4imGcdknfPLkMmN+Kz9j4o0T+LZuYyblhuj2t1M9lf0Is/Go0Drf/7oc2KpHAo
296 nfKu7fkM5nfZWFsgE9TxOz8SQa2RuuhpbkpB2k0Vg2TbqTpFeM0GSXNzdWVywkwE
297 ExEIABYFAgAAAAAJEKqJF6U/VQ52AhkBAhsDAADIMwCgt/kmhRwmlzcnc1S3Qlfo
298 BD0PBa8AoG5Vm9U4gzWQM/BzVxDToJPB1ZHf
300 -----END PGP PUBLIC KEY BLOCK-----