|
|
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package openpgp
import "hash"
// NewCanonicalTextHash reformats text written to it into the canonical
// form and then applies the hash h. See RFC 4880, section 5.2.1.
func NewCanonicalTextHash(h hash.Hash) hash.Hash { return &canonicalTextHash{h, 0} }
type canonicalTextHash struct { h hash.Hash s int }
var newline = []byte{'\r', '\n'}
func (cth *canonicalTextHash) Write(buf []byte) (int, error) { start := 0
for i, c := range buf { switch cth.s { case 0: if c == '\r' { cth.s = 1 } else if c == '\n' { cth.h.Write(buf[start:i]) cth.h.Write(newline) start = i + 1 } case 1: cth.s = 0 } }
cth.h.Write(buf[start:]) return len(buf), nil }
func (cth *canonicalTextHash) Sum(in []byte) []byte { return cth.h.Sum(in) }
func (cth *canonicalTextHash) Reset() { cth.h.Reset() cth.s = 0 }
func (cth *canonicalTextHash) Size() int { return cth.h.Size() }
func (cth *canonicalTextHash) BlockSize() int { return cth.h.BlockSize() }
|