~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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.
 
4
 
 
5
package packet
 
6
 
 
7
import (
 
8
        "bytes"
 
9
        "crypto/sha1"
 
10
        "encoding/hex"
 
11
        "golang.org/x/crypto/openpgp/errors"
 
12
        "io"
 
13
        "io/ioutil"
 
14
        "testing"
 
15
)
 
16
 
 
17
// TestReader wraps a []byte and returns reads of a specific length.
 
18
type testReader struct {
 
19
        data   []byte
 
20
        stride int
 
21
}
 
22
 
 
23
func (t *testReader) Read(buf []byte) (n int, err error) {
 
24
        n = t.stride
 
25
        if n > len(t.data) {
 
26
                n = len(t.data)
 
27
        }
 
28
        if n > len(buf) {
 
29
                n = len(buf)
 
30
        }
 
31
        copy(buf, t.data)
 
32
        t.data = t.data[n:]
 
33
        if len(t.data) == 0 {
 
34
                err = io.EOF
 
35
        }
 
36
        return
 
37
}
 
38
 
 
39
func testMDCReader(t *testing.T) {
 
40
        mdcPlaintext, _ := hex.DecodeString(mdcPlaintextHex)
 
41
 
 
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)
 
46
                if err != nil {
 
47
                        t.Errorf("stride: %d, error: %s", stride, err)
 
48
                        continue
 
49
                }
 
50
                if !bytes.Equal(body, mdcPlaintext[:len(mdcPlaintext)-22]) {
 
51
                        t.Errorf("stride: %d: bad contents %x", stride, body)
 
52
                        continue
 
53
                }
 
54
 
 
55
                err = mdcReader.Close()
 
56
                if err != nil {
 
57
                        t.Errorf("stride: %d, error on Close: %s", stride, err)
 
58
                }
 
59
        }
 
60
 
 
61
        mdcPlaintext[15] ^= 80
 
62
 
 
63
        r := &testReader{data: mdcPlaintext, stride: 2}
 
64
        mdcReader := &seMDCReader{in: r, h: sha1.New()}
 
65
        _, err := ioutil.ReadAll(mdcReader)
 
66
        if err != nil {
 
67
                t.Errorf("corruption test, error: %s", err)
 
68
                return
 
69
        }
 
70
        err = mdcReader.Close()
 
71
        if err == nil {
 
72
                t.Error("corruption: no error")
 
73
        } else if _, ok := err.(*errors.SignatureError); !ok {
 
74
                t.Errorf("corruption: expected SignatureError, got: %s", err)
 
75
        }
 
76
}
 
77
 
 
78
const mdcPlaintextHex = "a302789c3b2d93c4e0eb9aba22283539b3203335af44a134afb800c849cb4c4de10200aff40b45d31432c80cb384299a0655966d6939dfdeed1dddf980"
 
79
 
 
80
func TestSerialize(t *testing.T) {
 
81
        buf := bytes.NewBuffer(nil)
 
82
        c := CipherAES128
 
83
        key := make([]byte, c.KeySize())
 
84
 
 
85
        w, err := SerializeSymmetricallyEncrypted(buf, c, key, nil)
 
86
        if err != nil {
 
87
                t.Errorf("error from SerializeSymmetricallyEncrypted: %s", err)
 
88
                return
 
89
        }
 
90
 
 
91
        contents := []byte("hello world\n")
 
92
 
 
93
        w.Write(contents)
 
94
        w.Close()
 
95
 
 
96
        p, err := Read(buf)
 
97
        if err != nil {
 
98
                t.Errorf("error from Read: %s", err)
 
99
                return
 
100
        }
 
101
 
 
102
        se, ok := p.(*SymmetricallyEncrypted)
 
103
        if !ok {
 
104
                t.Errorf("didn't read a *SymmetricallyEncrypted")
 
105
                return
 
106
        }
 
107
 
 
108
        r, err := se.Decrypt(c, key)
 
109
        if err != nil {
 
110
                t.Errorf("error from Decrypt: %s", err)
 
111
                return
 
112
        }
 
113
 
 
114
        contentsCopy := bytes.NewBuffer(nil)
 
115
        _, err = io.Copy(contentsCopy, r)
 
116
        if err != nil {
 
117
                t.Errorf("error from io.Copy: %s", err)
 
118
                return
 
119
        }
 
120
        if !bytes.Equal(contentsCopy.Bytes(), contents) {
 
121
                t.Errorf("contents not equal got: %x want: %x", contentsCopy.Bytes(), contents)
 
122
        }
 
123
}