diff --git a/cmd/crypto/crypto-options.go b/cmd/crypto/crypto-options.go index 9567f4d1f..5b88520e7 100644 --- a/cmd/crypto/crypto-options.go +++ b/cmd/crypto/crypto-options.go @@ -17,10 +17,7 @@ package main import ( - "bytes" - "encoding/binary" "fmt" - "io/ioutil" "log" "os" @@ -34,7 +31,7 @@ import ( var Options = []cli.Command{ Md5sum, Sha1sum, - // Sha1sumFast, // not working + // Sha1sumFast, // TODO Sha256sum, Sha512sum, } @@ -55,6 +52,7 @@ var Sha1sum = cli.Command{ Action: doSha1sum, } +/* TODO var Sha1sumFast = cli.Command{ Name: "sha1sum-fast", Usage: "", @@ -62,6 +60,7 @@ var Sha1sumFast = cli.Command{ `, Action: doSha1sumFast, } +*/ var Sha256sum = cli.Command{ Name: "sha256sum", @@ -95,6 +94,7 @@ func doSha1sum(c *cli.Context) { fmt.Printf("%x", hash) } +/* TODO func doSha1sumFast(c *cli.Context) { buffer, err := ioutil.ReadAll(os.Stdin) if err != nil { @@ -108,6 +108,7 @@ func doSha1sumFast(c *cli.Context) { binary.Write(&bytesBuffer, binary.LittleEndian, hash) fmt.Printf("%x", bytesBuffer.Bytes()) } +*/ func doSha256sum(c *cli.Context) { hash, err := sha256.Sum(os.Stdin) diff --git a/pkg/crypto/sha1/TODO b/pkg/crypto/sha1/TODO new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/crypto/sha1/sha1.go b/pkg/crypto/sha1/sha1.go index 9af8b0bcd..b888e92c1 100644 --- a/pkg/crypto/sha1/sha1.go +++ b/pkg/crypto/sha1/sha1.go @@ -24,55 +24,50 @@ package sha1 import "C" import ( gosha1 "crypto/sha1" - "errors" "io" - "unsafe" - - "github.com/minio-io/minio/pkg/cpu" ) +/* const ( SHA1_BLOCKSIZE = 64 SHA1_DIGESTSIZE = 20 ) + func Sha1(buffer []byte) ([]int32, error) { - if !cpu.HasAVX2() { - // Unsupported processor but do not error out tests - return []int32{0}, nil + if cpu.HasAVX2() { + var shbuf []int32 + var cbuffer *C.char + + shbuf = make([]int32, SHA1_DIGESTSIZE) + var length = len(buffer) + if length == 0 { + return []int32{0}, errors.New("Invalid input") + } + + rem := length % SHA1_BLOCKSIZE + padded_len := length + + if rem > 0 { + padded_len = length + (SHA1_BLOCKSIZE - rem) + } + + rounds := padded_len / SHA1_BLOCKSIZE + pad := padded_len - length + if pad > 0 { + s := make([]byte, pad) + // Expand with new padded blocks to the byte array + buffer = append(buffer, s...) + } + + cshbuf := (*C.int32_t)(unsafe.Pointer(&shbuf[0])) + cbuffer = (*C.char)(unsafe.Pointer(&buffer[0])) + C.sha1_transform(cshbuf, cbuffer, C.size_t(rounds)) + + return 0, nil } - - var shbuf []int32 - var cbuffer *C.char - - shbuf = make([]int32, SHA1_DIGESTSIZE) - var length = len(buffer) - if length == 0 { - return []int32{0}, errors.New("Invalid input") - } - - rem := length % SHA1_BLOCKSIZE - padded_len := length - - if rem > 0 { - padded_len = length + (SHA1_BLOCKSIZE - rem) - } - - rounds := padded_len / SHA1_BLOCKSIZE - pad := padded_len - length - if pad > 0 { - s := make([]byte, pad) - // Expand with new padded blocks to the byte array - buffer = append(buffer, s...) - } - - cshbuf := (*C.int32_t)(unsafe.Pointer(&shbuf[0])) - cbuffer = (*C.char)(unsafe.Pointer(&buffer[0])) - C.sha1_transform(cshbuf, cbuffer, C.size_t(rounds)) - - return shbuf, nil } - +*/ func Sum(reader io.Reader) ([]byte, error) { hash := gosha1.New() var err error diff --git a/pkg/crypto/sha1/sha1_amd64.S b/pkg/crypto/sha1/sha1_amd64.S index f6433864a..49a066f71 100644 --- a/pkg/crypto/sha1/sha1_amd64.S +++ b/pkg/crypto/sha1/sha1_amd64.S @@ -67,6 +67,7 @@ * */ +#ifdef HAS_AVX2 #include "asm.S" #define CTX %rdi /* arg1 */ @@ -698,3 +699,4 @@ BSWAP_SHUFB_CTL: ret ENDPROC(sha1_transform) +#endif diff --git a/pkg/crypto/sha1/sha1_test.go b/pkg/crypto/sha1/sha1_test.go index 4cc99619d..6e5a472a6 100644 --- a/pkg/crypto/sha1/sha1_test.go +++ b/pkg/crypto/sha1/sha1_test.go @@ -14,20 +14,6 @@ type MySuite struct{} var _ = Suite(&MySuite{}) -func (s *MySuite) TestSha1(c *C) { - data_1 := []byte("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.") - - data_2 := []byte("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.") - - sha, err := Sha1(data_1) - c.Assert(err, IsNil) - - newsha, newerr := Sha1(data_2) - c.Assert(newerr, IsNil) - - c.Assert(sha, DeepEquals, newsha) -} - func (s *MySuite) TestStreamingSha1(c *C) { testString := []byte("Test string") expectedHash, _ := hex.DecodeString("18af819125b70879d36378431c4e8d9bfa6a2599") diff --git a/pkg/crypto/sha256/sha256-avx-asm.S b/pkg/crypto/sha256/sha256-avx-asm.S index ba3cac746..66cca5bc0 100644 --- a/pkg/crypto/sha256/sha256-avx-asm.S +++ b/pkg/crypto/sha256/sha256-avx-asm.S @@ -47,6 +47,7 @@ # This code schedules 1 block at a time, with 4 lanes per block ######################################################################## +#ifdef HAS_AVX #include "asm.S" ## assume buffers not aligned @@ -491,3 +492,4 @@ _SHUF_00BA: # shuffle xDxC -> DC00 _SHUF_DC00: .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF +#endif diff --git a/pkg/crypto/sha256/sha256-avx2-asm.S b/pkg/crypto/sha256/sha256-avx2-asm.S index eed0bafc5..0dc71edb5 100644 --- a/pkg/crypto/sha256/sha256-avx2-asm.S +++ b/pkg/crypto/sha256/sha256-avx2-asm.S @@ -48,6 +48,7 @@ # This code schedules 2 blocks at a time, with 4 lanes per block ######################################################################## +#ifdef HAS_AVX2 #include "asm.S" ## assume buffers not aligned @@ -768,3 +769,4 @@ _SHUF_00BA: # shuffle xDxC -> DC00 _SHUF_DC00: .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF,0x0b0a090803020100FFFFFFFFFFFFFFFF +#endif diff --git a/pkg/crypto/sha256/sha256-ssse3-asm.S b/pkg/crypto/sha256/sha256-ssse3-asm.S index 034108b84..f01a50515 100644 --- a/pkg/crypto/sha256/sha256-ssse3-asm.S +++ b/pkg/crypto/sha256/sha256-ssse3-asm.S @@ -46,6 +46,7 @@ # ######################################################################## +#ifdef HAS_SSE41 #include "asm.S" ## assume buffers not aligned @@ -504,3 +505,4 @@ _SHUF_00BA: # shuffle xDxC -> DC00 _SHUF_DC00: .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF +#endif diff --git a/pkg/crypto/sha512/sha512-avx-asm.S b/pkg/crypto/sha512/sha512-avx-asm.S index 575057e7c..dca7c8349 100644 --- a/pkg/crypto/sha512/sha512-avx-asm.S +++ b/pkg/crypto/sha512/sha512-avx-asm.S @@ -47,6 +47,7 @@ # ######################################################################## +#ifdef HAS_AVX #include "asm.S" .text @@ -419,3 +420,4 @@ K512: .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +#endif diff --git a/pkg/crypto/sha512/sha512-avx2-asm.S b/pkg/crypto/sha512/sha512-avx2-asm.S index 2e3b554c0..1dcd99efa 100644 --- a/pkg/crypto/sha512/sha512-avx2-asm.S +++ b/pkg/crypto/sha512/sha512-avx2-asm.S @@ -49,8 +49,7 @@ # This code schedules 1 blocks at a time, with 4 lanes per block ######################################################################## -#include "asm.S" - +#ifdef HAS_AVX2 .text # Virtual Registers @@ -739,3 +738,4 @@ PSHUFFLE_BYTE_FLIP_MASK: MASK_YMM_LO: .octa 0x00000000000000000000000000000000 .octa 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +#endif diff --git a/pkg/crypto/sha512/sha512-ssse3-asm.S b/pkg/crypto/sha512/sha512-ssse3-asm.S index 4e0fc7cdd..9f451eac9 100644 --- a/pkg/crypto/sha512/sha512-ssse3-asm.S +++ b/pkg/crypto/sha512/sha512-ssse3-asm.S @@ -47,6 +47,7 @@ # ######################################################################## +#ifdef HAS_SSE41 #include "asm.S" .text @@ -419,3 +420,4 @@ K512: .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +#endif