Merge pull request #165 from harshavardhana/pr_out_disable_sha1_sha256_sha512_avx_avx2_sse3_crypto_implementations

master
Harshavardhana 10 years ago
commit 43b1e178c2
  1. 9
      cmd/crypto/crypto-options.go
  2. 0
      pkg/crypto/sha1/TODO
  3. 61
      pkg/crypto/sha1/sha1.go
  4. 2
      pkg/crypto/sha1/sha1_amd64.S
  5. 14
      pkg/crypto/sha1/sha1_test.go
  6. 2
      pkg/crypto/sha256/sha256-avx-asm.S
  7. 2
      pkg/crypto/sha256/sha256-avx2-asm.S
  8. 2
      pkg/crypto/sha256/sha256-ssse3-asm.S
  9. 2
      pkg/crypto/sha512/sha512-avx-asm.S
  10. 4
      pkg/crypto/sha512/sha512-avx2-asm.S
  11. 2
      pkg/crypto/sha512/sha512-ssse3-asm.S

@ -17,10 +17,7 @@
package main package main
import ( import (
"bytes"
"encoding/binary"
"fmt" "fmt"
"io/ioutil"
"log" "log"
"os" "os"
@ -34,7 +31,7 @@ import (
var Options = []cli.Command{ var Options = []cli.Command{
Md5sum, Md5sum,
Sha1sum, Sha1sum,
// Sha1sumFast, // not working // Sha1sumFast, // TODO
Sha256sum, Sha256sum,
Sha512sum, Sha512sum,
} }
@ -55,6 +52,7 @@ var Sha1sum = cli.Command{
Action: doSha1sum, Action: doSha1sum,
} }
/* TODO
var Sha1sumFast = cli.Command{ var Sha1sumFast = cli.Command{
Name: "sha1sum-fast", Name: "sha1sum-fast",
Usage: "", Usage: "",
@ -62,6 +60,7 @@ var Sha1sumFast = cli.Command{
`, `,
Action: doSha1sumFast, Action: doSha1sumFast,
} }
*/
var Sha256sum = cli.Command{ var Sha256sum = cli.Command{
Name: "sha256sum", Name: "sha256sum",
@ -95,6 +94,7 @@ func doSha1sum(c *cli.Context) {
fmt.Printf("%x", hash) fmt.Printf("%x", hash)
} }
/* TODO
func doSha1sumFast(c *cli.Context) { func doSha1sumFast(c *cli.Context) {
buffer, err := ioutil.ReadAll(os.Stdin) buffer, err := ioutil.ReadAll(os.Stdin)
if err != nil { if err != nil {
@ -108,6 +108,7 @@ func doSha1sumFast(c *cli.Context) {
binary.Write(&bytesBuffer, binary.LittleEndian, hash) binary.Write(&bytesBuffer, binary.LittleEndian, hash)
fmt.Printf("%x", bytesBuffer.Bytes()) fmt.Printf("%x", bytesBuffer.Bytes())
} }
*/
func doSha256sum(c *cli.Context) { func doSha256sum(c *cli.Context) {
hash, err := sha256.Sum(os.Stdin) hash, err := sha256.Sum(os.Stdin)

@ -24,55 +24,50 @@ package sha1
import "C" import "C"
import ( import (
gosha1 "crypto/sha1" gosha1 "crypto/sha1"
"errors"
"io" "io"
"unsafe"
"github.com/minio-io/minio/pkg/cpu"
) )
/*
const ( const (
SHA1_BLOCKSIZE = 64 SHA1_BLOCKSIZE = 64
SHA1_DIGESTSIZE = 20 SHA1_DIGESTSIZE = 20
) )
func Sha1(buffer []byte) ([]int32, error) {
if !cpu.HasAVX2() {
// Unsupported processor but do not error out tests
return []int32{0}, nil
}
var shbuf []int32 func Sha1(buffer []byte) ([]int32, error) {
var cbuffer *C.char if cpu.HasAVX2() {
var shbuf []int32
var cbuffer *C.char
shbuf = make([]int32, SHA1_DIGESTSIZE) shbuf = make([]int32, SHA1_DIGESTSIZE)
var length = len(buffer) var length = len(buffer)
if length == 0 { if length == 0 {
return []int32{0}, errors.New("Invalid input") return []int32{0}, errors.New("Invalid input")
} }
rem := length % SHA1_BLOCKSIZE rem := length % SHA1_BLOCKSIZE
padded_len := length padded_len := length
if rem > 0 { if rem > 0 {
padded_len = length + (SHA1_BLOCKSIZE - rem) padded_len = length + (SHA1_BLOCKSIZE - rem)
} }
rounds := padded_len / SHA1_BLOCKSIZE rounds := padded_len / SHA1_BLOCKSIZE
pad := padded_len - length pad := padded_len - length
if pad > 0 { if pad > 0 {
s := make([]byte, pad) s := make([]byte, pad)
// Expand with new padded blocks to the byte array // Expand with new padded blocks to the byte array
buffer = append(buffer, s...) buffer = append(buffer, s...)
} }
cshbuf := (*C.int32_t)(unsafe.Pointer(&shbuf[0])) cshbuf := (*C.int32_t)(unsafe.Pointer(&shbuf[0]))
cbuffer = (*C.char)(unsafe.Pointer(&buffer[0])) cbuffer = (*C.char)(unsafe.Pointer(&buffer[0]))
C.sha1_transform(cshbuf, cbuffer, C.size_t(rounds)) C.sha1_transform(cshbuf, cbuffer, C.size_t(rounds))
return shbuf, nil return 0, nil
}
} }
*/
func Sum(reader io.Reader) ([]byte, error) { func Sum(reader io.Reader) ([]byte, error) {
hash := gosha1.New() hash := gosha1.New()
var err error var err error

@ -67,6 +67,7 @@
* *
*/ */
#ifdef HAS_AVX2
#include "asm.S" #include "asm.S"
#define CTX %rdi /* arg1 */ #define CTX %rdi /* arg1 */
@ -698,3 +699,4 @@ BSWAP_SHUFB_CTL:
ret ret
ENDPROC(sha1_transform) ENDPROC(sha1_transform)
#endif

@ -14,20 +14,6 @@ type MySuite struct{}
var _ = Suite(&MySuite{}) 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) { func (s *MySuite) TestStreamingSha1(c *C) {
testString := []byte("Test string") testString := []byte("Test string")
expectedHash, _ := hex.DecodeString("18af819125b70879d36378431c4e8d9bfa6a2599") expectedHash, _ := hex.DecodeString("18af819125b70879d36378431c4e8d9bfa6a2599")

@ -47,6 +47,7 @@
# This code schedules 1 block at a time, with 4 lanes per block # This code schedules 1 block at a time, with 4 lanes per block
######################################################################## ########################################################################
#ifdef HAS_AVX
#include "asm.S" #include "asm.S"
## assume buffers not aligned ## assume buffers not aligned
@ -491,3 +492,4 @@ _SHUF_00BA:
# shuffle xDxC -> DC00 # shuffle xDxC -> DC00
_SHUF_DC00: _SHUF_DC00:
.octa 0x0b0a090803020100FFFFFFFFFFFFFFFF .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF
#endif

@ -48,6 +48,7 @@
# This code schedules 2 blocks at a time, with 4 lanes per block # This code schedules 2 blocks at a time, with 4 lanes per block
######################################################################## ########################################################################
#ifdef HAS_AVX2
#include "asm.S" #include "asm.S"
## assume buffers not aligned ## assume buffers not aligned
@ -768,3 +769,4 @@ _SHUF_00BA:
# shuffle xDxC -> DC00 # shuffle xDxC -> DC00
_SHUF_DC00: _SHUF_DC00:
.octa 0x0b0a090803020100FFFFFFFFFFFFFFFF,0x0b0a090803020100FFFFFFFFFFFFFFFF .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF,0x0b0a090803020100FFFFFFFFFFFFFFFF
#endif

@ -46,6 +46,7 @@
# #
######################################################################## ########################################################################
#ifdef HAS_SSE41
#include "asm.S" #include "asm.S"
## assume buffers not aligned ## assume buffers not aligned
@ -504,3 +505,4 @@ _SHUF_00BA:
# shuffle xDxC -> DC00 # shuffle xDxC -> DC00
_SHUF_DC00: _SHUF_DC00:
.octa 0x0b0a090803020100FFFFFFFFFFFFFFFF .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF
#endif

@ -47,6 +47,7 @@
# #
######################################################################## ########################################################################
#ifdef HAS_AVX
#include "asm.S" #include "asm.S"
.text .text
@ -419,3 +420,4 @@ K512:
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
#endif

@ -49,8 +49,7 @@
# This code schedules 1 blocks at a time, with 4 lanes per block # This code schedules 1 blocks at a time, with 4 lanes per block
######################################################################## ########################################################################
#include "asm.S" #ifdef HAS_AVX2
.text .text
# Virtual Registers # Virtual Registers
@ -739,3 +738,4 @@ PSHUFFLE_BYTE_FLIP_MASK:
MASK_YMM_LO: MASK_YMM_LO:
.octa 0x00000000000000000000000000000000 .octa 0x00000000000000000000000000000000
.octa 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF .octa 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
#endif

@ -47,6 +47,7 @@
# #
######################################################################## ########################################################################
#ifdef HAS_SSE41
#include "asm.S" #include "asm.S"
.text .text
@ -419,3 +420,4 @@ K512:
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
#endif

Loading…
Cancel
Save