...
1
2
3
4
5 package armor
6
7 import (
8 "bytes"
9 "hash/adler32"
10 "io/ioutil"
11 "testing"
12 )
13
14 func 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", buf.String(), armorExample1)
54 }
55 }
56
57 func TestDecodeEmptyVersion(t *testing.T) {
58 buf := bytes.NewBuffer([]byte(armorExampleEmptyVersion))
59 result, err := Decode(buf)
60 if err != nil {
61 t.Error(err)
62 }
63 expectedType := "PGP SIGNATURE"
64 if result.Type != expectedType {
65 t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType)
66 }
67 if len(result.Header) != 1 {
68 t.Errorf("len(result.Header): got:%d want:1", len(result.Header))
69 }
70 v, ok := result.Header["Version"]
71 if !ok || v != "" {
72 t.Errorf("result.Header: got:%#v", result.Header)
73 }
74 }
75
76 func TestLongHeader(t *testing.T) {
77 buf := bytes.NewBuffer([]byte(armorLongLine))
78 result, err := Decode(buf)
79 if err != nil {
80 t.Error(err)
81 return
82 }
83 value, ok := result.Header["Version"]
84 if !ok {
85 t.Errorf("missing Version header")
86 }
87 if value != longValueExpected {
88 t.Errorf("got: %s want: %s", value, longValueExpected)
89 }
90 }
91
92 const armorExample1 = `-----BEGIN PGP SIGNATURE-----
93 Version: GnuPG v1.4.10 (GNU/Linux)
94
95 iJwEAAECAAYFAk1Fv/0ACgkQo01+GMIMMbsYTwQAiAw+QAaNfY6WBdplZ/uMAccm
96 4g+81QPmTSGHnetSb6WBiY13kVzK4HQiZH8JSkmmroMLuGeJwsRTEL4wbjRyUKEt
97 p1xwUZDECs234F1xiG5enc5SGlRtP7foLBz9lOsjx+LEcA4sTl5/2eZR9zyFZqWW
98 TxRjs+fJCIFuo71xb1g=
99 =/teI
100 -----END PGP SIGNATURE-----`
101
102 const armorLongLine = `-----BEGIN PGP SIGNATURE-----
103 Version: 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
104
105 iQEcBAABAgAGBQJMtFESAAoJEKsQXJGvOPsVj40H/1WW6jaMXv4BW+1ueDSMDwM8
106 kx1fLOXbVM5/Kn5LStZNt1jWWnpxdz7eq3uiqeCQjmqUoRde3YbB2EMnnwRbAhpp
107 cacnAvy9ZQ78OTxUdNW1mhX5bS6q1MTEJnl+DcyigD70HG/yNNQD7sOPMdYQw0TA
108 byQBwmLwmTsuZsrYqB68QyLHI+DUugn+kX6Hd2WDB62DKa2suoIUIHQQCd/ofwB3
109 WfCYInXQKKOSxu2YOg2Eb4kLNhSMc1i9uKUWAH+sdgJh7NBgdoE4MaNtBFkHXRvv
110 okWuf3+xA9ksp1npSY/mDvgHijmjvtpRDe6iUeqfCn8N9u9CBg8geANgaG8+QA4=
111 =wfQG
112 -----END PGP SIGNATURE-----`
113
114 const longValueExpected = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"
115
116 const armorExampleEmptyVersion = `-----BEGIN PGP SIGNATURE-----
117 Version:
118
119 wsE7BAABCgBvBYJkbfmWCRD7/MgqAV5zMEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u
120 cy5zZXF1b2lhLXBncC5vcmeMXzsJEgIm228SdxV22XgYny4adwqEgyIT9UL3F92C
121 OhYhBNGmbhojsYLJmA94jPv8yCoBXnMwAAAj1AwAiSkJPxsEcyaoYWbxc657xPW1
122 MlrbNhDBIWpKVrqQgyz7NdDZvvY0Ty+/h62HK5GQ5obAzVmQVwtUVG950TxCksg1
123 F18mqticpxg1veZQdw7DBYTk0RJTpdVBRYJ5UOtHaSJUAnqGh7OQE6Lu74vfFhNv
124 dDjpjgEc6TnJrEBOOR7+RVp7+0i4HhM3+JdfSOMMOEb6ixWEYLtfC2Zd/p0f7vP8
125 tHiqllDXDbfBCXlFl5h2LAh39o/LE0vZvwf+C9i9PgRARawWIh+xeAJsVne8FZ12
126 FD+hWZJdNUCv4iE1H7QDVv8nuPAz3WB/DQWNSfeGTZnN+ouB1cjPFscBuunO5Dss
127 k3hXy+XB5mZW6iisjUnUBknJEa43AMX+zGSaGHljEgfTGLbgEK+deOhPqKEkhUKr
128 /VlIVBXgfjQuoizme9S9juxXHdDHa+Y5Wb9rTUc1y9YPArRem51VI0OzbJ2cRnLH
129 J0YF6lYvjcTVBtmQlYeOfZsz4EABEeBYe/rbDmJC
130 =b+IB
131 -----END PGP SIGNATURE-----`
132
View as plain text