]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/md5: provide a top-level Sum function
authorRob Pike <r@golang.org>
Wed, 26 Jun 2013 18:29:30 +0000 (11:29 -0700)
committerRob Pike <r@golang.org>
Wed, 26 Jun 2013 18:29:30 +0000 (11:29 -0700)
Makes it easy to ask the simple question, what is the hash of this data?
Also mark block as non-escaping.

R=golang-dev, agl
CC=golang-dev
https://golang.org/cl/10624044

src/pkg/crypto/md5/md5.go
src/pkg/crypto/md5/md5_test.go
src/pkg/crypto/md5/md5block_decl.go

index 825e5c8a28295fd6d1b75fbf9b527b63669f84d1..1a1f35fabc0d7b696d1201ec3601583f260bc6ac 100644 (file)
@@ -88,7 +88,11 @@ func (d *digest) Write(p []byte) (nn int, err error) {
 func (d0 *digest) Sum(in []byte) []byte {
        // Make a copy of d0 so that caller can keep writing and summing.
        d := *d0
+       hash := d.checkSum()
+       return append(in, hash[:]...)
+}
 
+func (d *digest) checkSum() [Size]byte {
        // Padding.  Add a 1 bit and 0 bits until 56 bytes mod 64.
        len := d.len
        var tmp [64]byte
@@ -118,5 +122,13 @@ func (d0 *digest) Sum(in []byte) []byte {
                digest[i*4+3] = byte(s >> 24)
        }
 
-       return append(in, digest[:]...)
+       return digest
+}
+
+// Sum returns the MD5 checksum of the data.
+func Sum(data []byte) [Size]byte {
+       var d digest
+       d.Reset()
+       d.Write(data)
+       return d.checkSum()
 }
index 3ef4519b9ad4b8d8601d80f24b88def07bf46e0c..4901655e778f861ce61af0dc880a892e43ae0020 100644 (file)
@@ -53,6 +53,10 @@ var golden = []md5Test{
 func TestGolden(t *testing.T) {
        for i := 0; i < len(golden); i++ {
                g := golden[i]
+               s := fmt.Sprintf("%x", Sum([]byte(g.in)))
+               if s != g.out {
+                       t.Fatalf("Sum function: md5(%s) = %s want %s", g.in, s, g.out)
+               }
                c := New()
                buf := make([]byte, len(g.in)+4)
                for j := 0; j < 3+4; j++ {
index 14190c6ff29d159756f22d3155cb6a730abeeb35..3365200860a131310d9dc6b58dbf41a4482e5c20 100644 (file)
@@ -6,4 +6,6 @@
 
 package md5
 
+//go:noescape
+
 func block(dig *digest, p []byte)