1 // Copyright 2011 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.
11 "golang.org/x/crypto/openpgp/errors"
17 // TestReader wraps a []byte and returns reads of a specific length.
18 type testReader struct {
23 func (t *testReader) Read(buf []byte) (n int, err error) {
39 func testMDCReader(t *testing.T) {
40 mdcPlaintext, _ := hex.DecodeString(mdcPlaintextHex)
42 for stride := 1; stride < len(mdcPlaintext)/2; stride++ {
43 r := &testReader{data: mdcPlaintext, stride: stride}
44 mdcReader := &seMDCReader{in: r, h: sha1.New()}
45 body, err := ioutil.ReadAll(mdcReader)
47 t.Errorf("stride: %d, error: %s", stride, err)
50 if !bytes.Equal(body, mdcPlaintext[:len(mdcPlaintext)-22]) {
51 t.Errorf("stride: %d: bad contents %x", stride, body)
55 err = mdcReader.Close()
57 t.Errorf("stride: %d, error on Close: %s", stride, err)
61 mdcPlaintext[15] ^= 80
63 r := &testReader{data: mdcPlaintext, stride: 2}
64 mdcReader := &seMDCReader{in: r, h: sha1.New()}
65 _, err := ioutil.ReadAll(mdcReader)
67 t.Errorf("corruption test, error: %s", err)
70 err = mdcReader.Close()
72 t.Error("corruption: no error")
73 } else if _, ok := err.(*errors.SignatureError); !ok {
74 t.Errorf("corruption: expected SignatureError, got: %s", err)
78 const mdcPlaintextHex = "a302789c3b2d93c4e0eb9aba22283539b3203335af44a134afb800c849cb4c4de10200aff40b45d31432c80cb384299a0655966d6939dfdeed1dddf980"
80 func TestSerialize(t *testing.T) {
81 buf := bytes.NewBuffer(nil)
83 key := make([]byte, c.KeySize())
85 w, err := SerializeSymmetricallyEncrypted(buf, c, key, nil)
87 t.Errorf("error from SerializeSymmetricallyEncrypted: %s", err)
91 contents := []byte("hello world\n")
98 t.Errorf("error from Read: %s", err)
102 se, ok := p.(*SymmetricallyEncrypted)
104 t.Errorf("didn't read a *SymmetricallyEncrypted")
108 r, err := se.Decrypt(c, key)
110 t.Errorf("error from Decrypt: %s", err)
114 contentsCopy := bytes.NewBuffer(nil)
115 _, err = io.Copy(contentsCopy, r)
117 t.Errorf("error from io.Copy: %s", err)
120 if !bytes.Equal(contentsCopy.Bytes(), contents) {
121 t.Errorf("contents not equal got: %x want: %x", contentsCopy.Bytes(), contents)