diff options
Diffstat (limited to 'vendor/golang.org/x/crypto/openpgp/canonical_text.go')
-rw-r--r-- | vendor/golang.org/x/crypto/openpgp/canonical_text.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text.go b/vendor/golang.org/x/crypto/openpgp/canonical_text.go new file mode 100644 index 0000000..e601e38 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/canonical_text.go | |||
@@ -0,0 +1,59 @@ | |||
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 openpgp | ||
6 | |||
7 | import "hash" | ||
8 | |||
9 | // NewCanonicalTextHash reformats text written to it into the canonical | ||
10 | // form and then applies the hash h. See RFC 4880, section 5.2.1. | ||
11 | func NewCanonicalTextHash(h hash.Hash) hash.Hash { | ||
12 | return &canonicalTextHash{h, 0} | ||
13 | } | ||
14 | |||
15 | type canonicalTextHash struct { | ||
16 | h hash.Hash | ||
17 | s int | ||
18 | } | ||
19 | |||
20 | var newline = []byte{'\r', '\n'} | ||
21 | |||
22 | func (cth *canonicalTextHash) Write(buf []byte) (int, error) { | ||
23 | start := 0 | ||
24 | |||
25 | for i, c := range buf { | ||
26 | switch cth.s { | ||
27 | case 0: | ||
28 | if c == '\r' { | ||
29 | cth.s = 1 | ||
30 | } else if c == '\n' { | ||
31 | cth.h.Write(buf[start:i]) | ||
32 | cth.h.Write(newline) | ||
33 | start = i + 1 | ||
34 | } | ||
35 | case 1: | ||
36 | cth.s = 0 | ||
37 | } | ||
38 | } | ||
39 | |||
40 | cth.h.Write(buf[start:]) | ||
41 | return len(buf), nil | ||
42 | } | ||
43 | |||
44 | func (cth *canonicalTextHash) Sum(in []byte) []byte { | ||
45 | return cth.h.Sum(in) | ||
46 | } | ||
47 | |||
48 | func (cth *canonicalTextHash) Reset() { | ||
49 | cth.h.Reset() | ||
50 | cth.s = 0 | ||
51 | } | ||
52 | |||
53 | func (cth *canonicalTextHash) Size() int { | ||
54 | return cth.h.Size() | ||
55 | } | ||
56 | |||
57 | func (cth *canonicalTextHash) BlockSize() int { | ||
58 | return cth.h.BlockSize() | ||
59 | } | ||