Commit 4cf73890 authored by Rob Pike's avatar Rob Pike

crypto/sha1: provide a top-level Sum function

Makes it easy to ask the simple question, what is the hash of this data?

R=golang-dev, rsc, bradfitz
CC=golang-dev
https://golang.org/cl/10571043
parent 148fac79
...@@ -90,9 +90,13 @@ func (d *digest) Write(p []byte) (nn int, err error) { ...@@ -90,9 +90,13 @@ func (d *digest) Write(p []byte) (nn int, err error) {
func (d0 *digest) Sum(in []byte) []byte { func (d0 *digest) Sum(in []byte) []byte {
// Make a copy of d0 so that caller can keep writing and summing. // Make a copy of d0 so that caller can keep writing and summing.
d := *d0 d := *d0
hash := d.checkSum()
return append(in, hash[:]...)
}
// Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. func (d *digest) checkSum() [Size]byte {
len := d.len len := d.len
// Padding. Add a 1 bit and 0 bits until 56 bytes mod 64.
var tmp [64]byte var tmp [64]byte
tmp[0] = 0x80 tmp[0] = 0x80
if len%64 < 56 { if len%64 < 56 {
...@@ -120,5 +124,13 @@ func (d0 *digest) Sum(in []byte) []byte { ...@@ -120,5 +124,13 @@ func (d0 *digest) Sum(in []byte) []byte {
digest[i*4+3] = byte(s) digest[i*4+3] = byte(s)
} }
return append(in, digest[:]...) return digest
}
// Sum returns the SHA1 checksum of the data.
func Sum(data []byte) [Size]byte {
var d digest
d.Reset()
d.Write(data)
return d.checkSum()
} }
...@@ -54,6 +54,10 @@ var golden = []sha1Test{ ...@@ -54,6 +54,10 @@ var golden = []sha1Test{
func TestGolden(t *testing.T) { func TestGolden(t *testing.T) {
for i := 0; i < len(golden); i++ { for i := 0; i < len(golden); i++ {
g := golden[i] g := golden[i]
s := fmt.Sprintf("%x", Sum([]byte(g.in)))
if s != g.out {
t.Fatalf("Sum function: sha1(%s) = %s want %s", g.in, s, g.out)
}
c := New() c := New()
for j := 0; j < 3; j++ { for j := 0; j < 3; j++ {
if j < 2 { if j < 2 {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment