1
0
mirror of https://github.com/golang/go synced 2024-10-02 10:18:33 -06:00

crypto/sha1: always test the portable block function too

So it doesn't bitrot.

LGTM=agl
R=golang-codereviews, agl
CC=golang-codereviews
https://golang.org/cl/62270043
This commit is contained in:
Brad Fitzpatrick 2014-02-12 11:27:36 -08:00
parent bf0d71af29
commit 14c5c8a93a
3 changed files with 25 additions and 7 deletions

View File

@ -7,6 +7,7 @@
package sha1 package sha1
import ( import (
"crypto/rand"
"fmt" "fmt"
"io" "io"
"testing" "testing"
@ -90,6 +91,18 @@ func TestBlockSize(t *testing.T) {
} }
} }
// Tests that blockGeneric (pure Go) and block (in assembly for amd64, 386, arm) match.
func TestBlockGeneric(t *testing.T) {
gen, asm := New().(*digest), New().(*digest)
buf := make([]byte, BlockSize*20) // arbitrary factor
rand.Read(buf)
blockGeneric(gen, buf)
block(asm, buf)
if *gen != *asm {
t.Error("block and blockGeneric resulted in different states")
}
}
var bench = New() var bench = New()
var buf = make([]byte, 8192) var buf = make([]byte, 8192)

View File

@ -2,12 +2,6 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build !amd64,!386,!arm
// SHA1 block step.
// In its own file so that a faster assembly or C version
// can be substituted easily.
package sha1 package sha1
const ( const (
@ -17,7 +11,9 @@ const (
_K3 = 0xCA62C1D6 _K3 = 0xCA62C1D6
) )
func block(dig *digest, p []byte) { // blockGeneric is a portable, pure Go version of the SHA1 block step.
// It's used by sha1block_generic.go and tests.
func blockGeneric(dig *digest, p []byte) {
var w [16]uint32 var w [16]uint32
h0, h1, h2, h3, h4 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4] h0, h1, h2, h3, h4 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4]

View File

@ -0,0 +1,9 @@
// Copyright 2014 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.
// +build !amd64,!386,!arm
package sha1
var block = blockGeneric