1// Copyright 2010 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package armor
6
7import (
8	"bytes"
9	"hash/adler32"
10	"io/ioutil"
11	"testing"
12)
13
14func TestDecodeEncode(t *testing.T) {
15	buf := bytes.NewBuffer([]byte(armorExample1))
16	result, err := Decode(buf)
17	if err != nil {
18		t.Error(err)
19	}
20	expectedType := "PGP SIGNATURE"
21	if result.Type != expectedType {
22		t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType)
23	}
24	if len(result.Header) != 1 {
25		t.Errorf("len(result.Header): got:%d want:1", len(result.Header))
26	}
27	v, ok := result.Header["Version"]
28	if !ok || v != "GnuPG v1.4.10 (GNU/Linux)" {
29		t.Errorf("result.Header: got:%#v", result.Header)
30	}
31
32	contents, err := ioutil.ReadAll(result.Body)
33	if err != nil {
34		t.Error(err)
35	}
36
37	if adler32.Checksum(contents) != 0x27b144be {
38		t.Errorf("contents: got: %x", contents)
39	}
40
41	buf = bytes.NewBuffer(nil)
42	w, err := Encode(buf, result.Type, result.Header)
43	if err != nil {
44		t.Error(err)
45	}
46	_, err = w.Write(contents)
47	if err != nil {
48		t.Error(err)
49	}
50	w.Close()
51
52	if !bytes.Equal(buf.Bytes(), []byte(armorExample1)) {
53		t.Errorf("got: %s\nwant: %s", string(buf.Bytes()), armorExample1)
54	}
55}
56
57func TestLongHeader(t *testing.T) {
58	buf := bytes.NewBuffer([]byte(armorLongLine))
59	result, err := Decode(buf)
60	if err != nil {
61		t.Error(err)
62		return
63	}
64	value, ok := result.Header["Version"]
65	if !ok {
66		t.Errorf("missing Version header")
67	}
68	if value != longValueExpected {
69		t.Errorf("got: %s want: %s", value, longValueExpected)
70	}
71}
72
73const armorExample1 = `-----BEGIN PGP SIGNATURE-----
74Version: GnuPG v1.4.10 (GNU/Linux)
75
76iJwEAAECAAYFAk1Fv/0ACgkQo01+GMIMMbsYTwQAiAw+QAaNfY6WBdplZ/uMAccm
774g+81QPmTSGHnetSb6WBiY13kVzK4HQiZH8JSkmmroMLuGeJwsRTEL4wbjRyUKEt
78p1xwUZDECs234F1xiG5enc5SGlRtP7foLBz9lOsjx+LEcA4sTl5/2eZR9zyFZqWW
79TxRjs+fJCIFuo71xb1g=
80=/teI
81-----END PGP SIGNATURE-----`
82
83const armorLongLine = `-----BEGIN PGP SIGNATURE-----
84Version: 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
85
86iQEcBAABAgAGBQJMtFESAAoJEKsQXJGvOPsVj40H/1WW6jaMXv4BW+1ueDSMDwM8
87kx1fLOXbVM5/Kn5LStZNt1jWWnpxdz7eq3uiqeCQjmqUoRde3YbB2EMnnwRbAhpp
88cacnAvy9ZQ78OTxUdNW1mhX5bS6q1MTEJnl+DcyigD70HG/yNNQD7sOPMdYQw0TA
89byQBwmLwmTsuZsrYqB68QyLHI+DUugn+kX6Hd2WDB62DKa2suoIUIHQQCd/ofwB3
90WfCYInXQKKOSxu2YOg2Eb4kLNhSMc1i9uKUWAH+sdgJh7NBgdoE4MaNtBFkHXRvv
91okWuf3+xA9ksp1npSY/mDvgHijmjvtpRDe6iUeqfCn8N9u9CBg8geANgaG8+QA4=
92=wfQG
93-----END PGP SIGNATURE-----`
94
95const longValueExpected = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"
96