From 77d35b87d45fc2e5f0da04417affdb0c0a131a33 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Wed, 24 Jun 2015 14:24:33 -0700 Subject: [PATCH] Fix a bug on windows regarding blockSSE3 calculation --- pkg/utils/crypto/sha1/sha1_yasm_darwin.go | 16 ++++++++++++ pkg/utils/crypto/sha1/sha1_yasm_linux.go | 16 ++++++++++++ pkg/utils/crypto/sha1/sha1_yasm_windows.go | 16 ++++++++++++ pkg/utils/crypto/sha1/sha1block_darwin.go | 16 ++++++++++++ pkg/utils/crypto/sha1/sha1block_generic.go | 9 +++++++ pkg/utils/crypto/sha1/sha1block_linux.go | 16 ++++++++++++ pkg/utils/crypto/sha1/sha1block_windows.go | 29 ++++++++++++++++++++++ 7 files changed, 118 insertions(+) create mode 100644 pkg/utils/crypto/sha1/sha1block_windows.go diff --git a/pkg/utils/crypto/sha1/sha1_yasm_darwin.go b/pkg/utils/crypto/sha1/sha1_yasm_darwin.go index 2825b0d4b..2f1d1e21e 100644 --- a/pkg/utils/crypto/sha1/sha1_yasm_darwin.go +++ b/pkg/utils/crypto/sha1/sha1_yasm_darwin.go @@ -1,5 +1,21 @@ // !build amd64 +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package sha1 //go:generate yasm -f macho64 -DINTEL_SHA1_UPDATE_FUNCNAME=_sha1_update_intel sha1_sse3_amd64.asm -o sha1_sse3_amd64.syso diff --git a/pkg/utils/crypto/sha1/sha1_yasm_linux.go b/pkg/utils/crypto/sha1/sha1_yasm_linux.go index 383880a02..6d146574f 100644 --- a/pkg/utils/crypto/sha1/sha1_yasm_linux.go +++ b/pkg/utils/crypto/sha1/sha1_yasm_linux.go @@ -1,5 +1,21 @@ // !build amd64 +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package sha1 //go:generate yasm -f elf64 sha1_sse3_amd64.asm -o sha1_sse3_amd64.syso diff --git a/pkg/utils/crypto/sha1/sha1_yasm_windows.go b/pkg/utils/crypto/sha1/sha1_yasm_windows.go index 6d817bc8b..735111717 100644 --- a/pkg/utils/crypto/sha1/sha1_yasm_windows.go +++ b/pkg/utils/crypto/sha1/sha1_yasm_windows.go @@ -1,5 +1,21 @@ // !build amd64 +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package sha1 //go:generate yasm -f win64 -DWIN_ABI=1 sha1_sse3_amd64.asm -o sha1_sse3_amd64.syso diff --git a/pkg/utils/crypto/sha1/sha1block_darwin.go b/pkg/utils/crypto/sha1/sha1block_darwin.go index 7e49ecad1..434c34381 100644 --- a/pkg/utils/crypto/sha1/sha1block_darwin.go +++ b/pkg/utils/crypto/sha1/sha1block_darwin.go @@ -1,5 +1,21 @@ // +build amd64 +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package sha1 // #include diff --git a/pkg/utils/crypto/sha1/sha1block_generic.go b/pkg/utils/crypto/sha1/sha1block_generic.go index 81f775b82..ddc64e946 100644 --- a/pkg/utils/crypto/sha1/sha1block_generic.go +++ b/pkg/utils/crypto/sha1/sha1block_generic.go @@ -1,5 +1,14 @@ // +build amd64 +// Copyright 2009 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 of +// Golang project: +// https://github.com/golang/go/blob/master/LICENSE + +// Using this part of Minio codebase under the license +// Apache License Version 2.0 with modifications + package sha1 const ( diff --git a/pkg/utils/crypto/sha1/sha1block_linux.go b/pkg/utils/crypto/sha1/sha1block_linux.go index 6f2ea2c14..3e3d06b0d 100644 --- a/pkg/utils/crypto/sha1/sha1block_linux.go +++ b/pkg/utils/crypto/sha1/sha1block_linux.go @@ -1,5 +1,21 @@ // +build amd64 +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package sha1 // #cgo CFLAGS: -DHAS_AVX2 diff --git a/pkg/utils/crypto/sha1/sha1block_windows.go b/pkg/utils/crypto/sha1/sha1block_windows.go new file mode 100644 index 000000000..434c34381 --- /dev/null +++ b/pkg/utils/crypto/sha1/sha1block_windows.go @@ -0,0 +1,29 @@ +// +build amd64 + +/* + * Minimalist Object Storage, (C) 2014 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sha1 + +// #include +// #include +// void sha1_update_intel(int32_t *hash, const char* input, size_t num_blocks); +import "C" +import "unsafe" + +func blockSSE3(dig *digest, p []byte) { + C.sha1_update_intel((*C.int32_t)(unsafe.Pointer(&dig.h[0])), (*C.char)(unsafe.Pointer(&p[0])), (C.size_t)(len(p)/chunk)) +}