diff options
Diffstat (limited to 'vendor/github.com/minio/sha256-simd')
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/cpuid_other.go | 6 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256.go | 131 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.go | 3 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.s | 2 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.go | 6 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256block_amd64.go | 14 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256block_amd64.s (renamed from vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.s) | 4 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256block_arm64.go | 13 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256block_arm64.s | 4 | ||||
| -rw-r--r-- | vendor/github.com/minio/sha256-simd/sha256block_other.go | 11 | 
10 files changed, 134 insertions, 60 deletions
diff --git a/vendor/github.com/minio/sha256-simd/cpuid_other.go b/vendor/github.com/minio/sha256-simd/cpuid_other.go index cd9fbf2d9..97af6a195 100644 --- a/vendor/github.com/minio/sha256-simd/cpuid_other.go +++ b/vendor/github.com/minio/sha256-simd/cpuid_other.go @@ -23,6 +23,11 @@ import (  	"github.com/klauspost/cpuid/v2"  ) +var ( +	hasIntelSha = runtime.GOARCH == "amd64" && cpuid.CPU.Supports(cpuid.SHA, cpuid.SSSE3, cpuid.SSE4) +	hasAvx512   = cpuid.CPU.Supports(cpuid.AVX512F, cpuid.AVX512DQ, cpuid.AVX512BW, cpuid.AVX512VL) +) +  func hasArmSha2() bool {  	if cpuid.CPU.Has(cpuid.SHA2) {  		return true @@ -42,5 +47,4 @@ func hasArmSha2() bool {  		return false  	}  	return bytes.Contains(cpuInfo, []byte(sha256Feature)) -  } diff --git a/vendor/github.com/minio/sha256-simd/sha256.go b/vendor/github.com/minio/sha256-simd/sha256.go index b137ead9f..f146bbdb5 100644 --- a/vendor/github.com/minio/sha256-simd/sha256.go +++ b/vendor/github.com/minio/sha256-simd/sha256.go @@ -19,10 +19,8 @@ package sha256  import (  	"crypto/sha256"  	"encoding/binary" +	"errors"  	"hash" -	"runtime" - -	"github.com/klauspost/cpuid/v2"  )  // Size - The size of a SHA256 checksum in bytes. @@ -68,42 +66,34 @@ func (d *digest) Reset() {  type blockfuncType int  const ( -	blockfuncGeneric blockfuncType = iota -	blockfuncSha     blockfuncType = iota -	blockfuncArm     blockfuncType = iota +	blockfuncStdlib blockfuncType = iota +	blockfuncIntelSha +	blockfuncArmSha2 +	blockfuncForceGeneric = -1  )  var blockfunc blockfuncType  func init() { -	blockfunc = blockfuncGeneric  	switch { -	case hasSHAExtensions(): -		blockfunc = blockfuncSha +	case hasIntelSha: +		blockfunc = blockfuncIntelSha  	case hasArmSha2(): -		blockfunc = blockfuncArm -	default: -		blockfunc = blockfuncGeneric +		blockfunc = blockfuncArmSha2  	}  } -var avx512 = cpuid.CPU.Supports(cpuid.AVX512F, cpuid.AVX512DQ, cpuid.AVX512BW, cpuid.AVX512VL) - -// hasSHAExtensions return  whether the cpu supports SHA extensions. -func hasSHAExtensions() bool { -	return cpuid.CPU.Supports(cpuid.SHA, cpuid.SSSE3, cpuid.SSE4) && runtime.GOARCH == "amd64" -} -  // New returns a new hash.Hash computing the SHA256 checksum.  func New() hash.Hash { -	if blockfunc != blockfuncGeneric { -		d := new(digest) -		d.Reset() -		return d +	if blockfunc == blockfuncStdlib { +		// Fallback to the standard golang implementation +		// if no features were found. +		return sha256.New()  	} -	// Fallback to the standard golang implementation -	// if no features were found. -	return sha256.New() + +	d := new(digest) +	d.Reset() +	return d  }  // Sum256 - single caller sha256 helper @@ -272,11 +262,11 @@ func (d *digest) checkSum() (digest [Size]byte) {  }  func block(dig *digest, p []byte) { -	if blockfunc == blockfuncSha { -		blockShaGo(dig, p) -	} else if blockfunc == blockfuncArm { -		blockArmGo(dig, p) -	} else if blockfunc == blockfuncGeneric { +	if blockfunc == blockfuncIntelSha { +		blockIntelShaGo(dig, p) +	} else if blockfunc == blockfuncArmSha2 { +		blockArmSha2Go(dig, p) +	} else {  		blockGeneric(dig, p)  	}  } @@ -397,3 +387,82 @@ var _K = []uint32{  	0xbef9a3f7,  	0xc67178f2,  } + +const ( +	magic256      = "sha\x03" +	marshaledSize = len(magic256) + 8*4 + chunk + 8 +) + +func (d *digest) MarshalBinary() ([]byte, error) { +	b := make([]byte, 0, marshaledSize) +	b = append(b, magic256...) +	b = appendUint32(b, d.h[0]) +	b = appendUint32(b, d.h[1]) +	b = appendUint32(b, d.h[2]) +	b = appendUint32(b, d.h[3]) +	b = appendUint32(b, d.h[4]) +	b = appendUint32(b, d.h[5]) +	b = appendUint32(b, d.h[6]) +	b = appendUint32(b, d.h[7]) +	b = append(b, d.x[:d.nx]...) +	b = b[:len(b)+len(d.x)-d.nx] // already zero +	b = appendUint64(b, d.len) +	return b, nil +} + +func (d *digest) UnmarshalBinary(b []byte) error { +	if len(b) < len(magic256) || string(b[:len(magic256)]) != magic256 { +		return errors.New("crypto/sha256: invalid hash state identifier") +	} +	if len(b) != marshaledSize { +		return errors.New("crypto/sha256: invalid hash state size") +	} +	b = b[len(magic256):] +	b, d.h[0] = consumeUint32(b) +	b, d.h[1] = consumeUint32(b) +	b, d.h[2] = consumeUint32(b) +	b, d.h[3] = consumeUint32(b) +	b, d.h[4] = consumeUint32(b) +	b, d.h[5] = consumeUint32(b) +	b, d.h[6] = consumeUint32(b) +	b, d.h[7] = consumeUint32(b) +	b = b[copy(d.x[:], b):] +	b, d.len = consumeUint64(b) +	d.nx = int(d.len % chunk) +	return nil +} + +func appendUint32(b []byte, v uint32) []byte { +	return append(b, +		byte(v>>24), +		byte(v>>16), +		byte(v>>8), +		byte(v), +	) +} + +func appendUint64(b []byte, v uint64) []byte { +	return append(b, +		byte(v>>56), +		byte(v>>48), +		byte(v>>40), +		byte(v>>32), +		byte(v>>24), +		byte(v>>16), +		byte(v>>8), +		byte(v), +	) +} + +func consumeUint64(b []byte) ([]byte, uint64) { +	_ = b[7] +	x := uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | +		uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +	return b[8:], x +} + +func consumeUint32(b []byte) ([]byte, uint32) { +	_ = b[3] +	x := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 +	return b[4:], x +} diff --git a/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.go b/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.go index b7d7c1637..4b9473a4e 100644 --- a/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.go +++ b/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.go @@ -1,4 +1,5 @@ -//+build !noasm,!appengine,gc +//go:build !noasm && !appengine && gc +// +build !noasm,!appengine,gc  /*   * Minio Cloud Storage, (C) 2017 Minio, Inc. diff --git a/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.s b/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.s index 275bcacbc..cca534e46 100644 --- a/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.s +++ b/vendor/github.com/minio/sha256-simd/sha256blockAvx512_amd64.s @@ -1,4 +1,4 @@ -//+build !noasm,!appengine +//+build !noasm,!appengine,gc  TEXT ·sha256X16Avx512(SB), 7, $0  	MOVQ  digests+0(FP), DI diff --git a/vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.go b/vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.go deleted file mode 100644 index bef949419..000000000 --- a/vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.go +++ /dev/null @@ -1,6 +0,0 @@ -//+build !noasm,!appengine,gc - -package sha256 - -//go:noescape -func blockSha(h *[8]uint32, message []uint8) diff --git a/vendor/github.com/minio/sha256-simd/sha256block_amd64.go b/vendor/github.com/minio/sha256-simd/sha256block_amd64.go index 0c48d45f8..e536f54e1 100644 --- a/vendor/github.com/minio/sha256-simd/sha256block_amd64.go +++ b/vendor/github.com/minio/sha256-simd/sha256block_amd64.go @@ -1,4 +1,5 @@ -//+build !noasm,!appengine,gc +//go:build !noasm && !appengine && gc +// +build !noasm,!appengine,gc  /*   * Minio Cloud Storage, (C) 2016 Minio, Inc. @@ -18,10 +19,13 @@  package sha256 -func blockArmGo(dig *digest, p []byte) { -	panic("blockArmGo called unexpectedly") +func blockArmSha2Go(dig *digest, p []byte) { +	panic("blockArmSha2Go called unexpectedly")  } -func blockShaGo(dig *digest, p []byte) { -	blockSha(&dig.h, p) +//go:noescape +func blockIntelSha(h *[8]uint32, message []uint8) + +func blockIntelShaGo(dig *digest, p []byte) { +	blockIntelSha(&dig.h, p)  } diff --git a/vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.s b/vendor/github.com/minio/sha256-simd/sha256block_amd64.s index 909fc0ef8..c98a1d8f0 100644 --- a/vendor/github.com/minio/sha256-simd/sha256blockSha_amd64.s +++ b/vendor/github.com/minio/sha256-simd/sha256block_amd64.s @@ -1,4 +1,4 @@ -//+build !noasm,!appengine +//+build !noasm,!appengine,gc  // SHA intrinsic version of SHA256 @@ -106,7 +106,7 @@ GLOBL SHUF_MASK<>(SB), RODATA|NOPTR, $16  // X13 saved hash state // CDGH  // X15 data shuffle mask (constant) -TEXT ·blockSha(SB), NOSPLIT, $0-32 +TEXT ·blockIntelSha(SB), NOSPLIT, $0-32  	MOVQ      h+0(FP), DX  	MOVQ      message_base+8(FP), SI  	MOVQ      message_len+16(FP), DI diff --git a/vendor/github.com/minio/sha256-simd/sha256block_arm64.go b/vendor/github.com/minio/sha256-simd/sha256block_arm64.go index 58ccf6eb5..d4369e24a 100644 --- a/vendor/github.com/minio/sha256-simd/sha256block_arm64.go +++ b/vendor/github.com/minio/sha256-simd/sha256block_arm64.go @@ -1,4 +1,5 @@ -//+build !noasm,!appengine,gc +//go:build !noasm && !appengine && gc +// +build !noasm,!appengine,gc  /*   * Minio Cloud Storage, (C) 2016 Minio, Inc. @@ -18,18 +19,18 @@  package sha256 -func blockShaGo(dig *digest, p []byte) { -	panic("blockShaGoc called unexpectedly") +func blockIntelShaGo(dig *digest, p []byte) { +	panic("blockIntelShaGo called unexpectedly")  }  //go:noescape -func blockArm(h []uint32, message []uint8) +func blockArmSha2(h []uint32, message []uint8) -func blockArmGo(dig *digest, p []byte) { +func blockArmSha2Go(dig *digest, p []byte) {  	h := []uint32{dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7]} -	blockArm(h[:], p[:]) +	blockArmSha2(h[:], p[:])  	dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7] = h[0], h[1], h[2], h[3], h[4],  		h[5], h[6], h[7] diff --git a/vendor/github.com/minio/sha256-simd/sha256block_arm64.s b/vendor/github.com/minio/sha256-simd/sha256block_arm64.s index c6ddb3717..7ab88b163 100644 --- a/vendor/github.com/minio/sha256-simd/sha256block_arm64.s +++ b/vendor/github.com/minio/sha256-simd/sha256block_arm64.s @@ -1,4 +1,4 @@ -//+build !noasm,!appengine +//+build !noasm,!appengine,gc  // ARM64 version of SHA256 @@ -25,7 +25,7 @@  // their Plan9 equivalents  // -TEXT ·blockArm(SB), 7, $0 +TEXT ·blockArmSha2(SB), 7, $0  	MOVD h+0(FP), R0  	MOVD message+24(FP), R1  	MOVD message_len+32(FP), R2 // length of message diff --git a/vendor/github.com/minio/sha256-simd/sha256block_other.go b/vendor/github.com/minio/sha256-simd/sha256block_other.go index ec586c060..94d7eb0b4 100644 --- a/vendor/github.com/minio/sha256-simd/sha256block_other.go +++ b/vendor/github.com/minio/sha256-simd/sha256block_other.go @@ -1,4 +1,5 @@ -//+build appengine noasm !amd64,!arm64 !gc +//go:build appengine || noasm || (!amd64 && !arm64) || !gc +// +build appengine noasm !amd64,!arm64 !gc  /*   * Minio Cloud Storage, (C) 2019 Minio, Inc. @@ -18,11 +19,11 @@  package sha256 -func blockShaGo(dig *digest, p []byte) { -	panic("blockShaGo called unexpectedly") +func blockIntelShaGo(dig *digest, p []byte) { +	panic("blockIntelShaGo called unexpectedly")  } -func blockArmGo(dig *digest, p []byte) { -	panic("blockArmGo called unexpectedly") +func blockArmSha2Go(dig *digest, p []byte) { +	panic("blockArmSha2Go called unexpectedly")  }  | 
