improve patch
This commit is contained in:
parent
5f71523662
commit
8f18e20d6c
@ -1,17 +1,16 @@
|
|||||||
From b10cf6a25d6e7ec77ba1499826026f5138301e3e Mon Sep 17 00:00:00 2001
|
From d3ff2d35daab910198d505be20ddad0587026cb7 Mon Sep 17 00:00:00 2001
|
||||||
From: Remi Collet <remi@remirepo.net>
|
From: Remi Collet <remi@remirepo.net>
|
||||||
Date: Fri, 29 Sep 2017 14:38:21 +0200
|
Date: Fri, 29 Sep 2017 14:38:21 +0200
|
||||||
Subject: [PATCH] Fix Bug #75284 sha3 is not supported on bigendian machine
|
Subject: [PATCH] Fix Bug #75284 sha3 is not supported on bigendian machine
|
||||||
|
|
||||||
---
|
---
|
||||||
ext/hash/config.m4 | 32 ++++---
|
ext/hash/config.m4 | 32 ++++---
|
||||||
ext/hash/hash_slow_sha3.c | 240 ++++++++++++++++++++++++++++++++++++++++++++++
|
ext/hash/hash_sha3.c | 214 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
ext/hash/php_hash_sha3.h | 5 +
|
ext/hash/php_hash_sha3.h | 5 ++
|
||||||
3 files changed, 265 insertions(+), 12 deletions(-)
|
3 files changed, 239 insertions(+), 12 deletions(-)
|
||||||
create mode 100644 ext/hash/hash_slow_sha3.c
|
|
||||||
|
|
||||||
diff --git a/ext/hash/config.m4 b/ext/hash/config.m4
|
diff --git a/ext/hash/config.m4 b/ext/hash/config.m4
|
||||||
index 66cc7ca..e1f1c1a 100644
|
index 66cc7ca8108f..932e6d6f22c6 100644
|
||||||
--- a/ext/hash/config.m4
|
--- a/ext/hash/config.m4
|
||||||
+++ b/ext/hash/config.m4
|
+++ b/ext/hash/config.m4
|
||||||
@@ -24,25 +24,33 @@ if test "$PHP_HASH" != "no"; then
|
@@ -24,25 +24,33 @@ if test "$PHP_HASH" != "no"; then
|
||||||
@ -30,7 +29,8 @@ index 66cc7ca..e1f1c1a 100644
|
|||||||
- PHP_HASH_CFLAGS="-I@ext_srcdir@/$SHA3_DIR -DKeccakP200_excluded -DKeccakP400_excluded -DKeccakP800_excluded"
|
- PHP_HASH_CFLAGS="-I@ext_srcdir@/$SHA3_DIR -DKeccakP200_excluded -DKeccakP400_excluded -DKeccakP800_excluded"
|
||||||
+
|
+
|
||||||
+ if test $ac_cv_c_bigendian_php = yes; then
|
+ if test $ac_cv_c_bigendian_php = yes; then
|
||||||
+ EXT_HASH_SHA3_SOURCES="hash_slow_sha3.c"
|
+ EXT_HASH_SHA3_SOURCES="hash_sha3.c"
|
||||||
|
+ AC_DEFINE(HAVE_SLOW_HASH3, 1, [Define is hash3 algo is available])
|
||||||
+ AC_MSG_WARN("Use SHA3 slow implementation on bigendian")
|
+ AC_MSG_WARN("Use SHA3 slow implementation on bigendian")
|
||||||
+ else
|
+ else
|
||||||
+ PHP_CHECK_64BIT([
|
+ PHP_CHECK_64BIT([
|
||||||
@ -44,7 +44,6 @@ index 66cc7ca..e1f1c1a 100644
|
|||||||
+ PHP_HASH_CFLAGS="-I@ext_srcdir@/$SHA3_DIR -DKeccakP200_excluded -DKeccakP400_excluded -DKeccakP800_excluded"
|
+ PHP_HASH_CFLAGS="-I@ext_srcdir@/$SHA3_DIR -DKeccakP200_excluded -DKeccakP400_excluded -DKeccakP800_excluded"
|
||||||
+
|
+
|
||||||
+ PHP_ADD_BUILD_DIR(ext/hash/$SHA3_DIR, 1)
|
+ PHP_ADD_BUILD_DIR(ext/hash/$SHA3_DIR, 1)
|
||||||
+ AC_DEFINE(HAVE_FAST_HASH3, 1, [Define is hash3 algo is available])
|
|
||||||
+ fi
|
+ fi
|
||||||
+
|
+
|
||||||
EXT_HASH_SOURCES="hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c \
|
EXT_HASH_SOURCES="hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c \
|
||||||
@ -60,32 +59,16 @@ index 66cc7ca..e1f1c1a 100644
|
|||||||
PHP_NEW_EXTENSION(hash, $EXT_HASH_SOURCES, $ext_shared,,$PHP_HASH_CFLAGS)
|
PHP_NEW_EXTENSION(hash, $EXT_HASH_SOURCES, $ext_shared,,$PHP_HASH_CFLAGS)
|
||||||
ifdef([PHP_INSTALL_HEADERS], [
|
ifdef([PHP_INSTALL_HEADERS], [
|
||||||
PHP_INSTALL_HEADERS(ext/hash, $EXT_HASH_HEADERS)
|
PHP_INSTALL_HEADERS(ext/hash, $EXT_HASH_HEADERS)
|
||||||
diff --git a/ext/hash/hash_slow_sha3.c b/ext/hash/hash_slow_sha3.c
|
diff --git a/ext/hash/hash_sha3.c b/ext/hash/hash_sha3.c
|
||||||
new file mode 100644
|
index ee9d010da4b2..98010c535019 100644
|
||||||
index 0000000..a3bfda4
|
--- a/ext/hash/hash_sha3.c
|
||||||
--- /dev/null
|
+++ b/ext/hash/hash_sha3.c
|
||||||
+++ b/ext/hash/hash_slow_sha3.c
|
@@ -19,6 +19,217 @@
|
||||||
@@ -0,0 +1,240 @@
|
#include "php_hash.h"
|
||||||
+/*
|
#include "php_hash_sha3.h"
|
||||||
+ +----------------------------------------------------------------------+
|
|
||||||
+ | PHP Version 7 |
|
+#ifdef HAVE_SLOW_HASH3
|
||||||
+ +----------------------------------------------------------------------+
|
+// ================= slow algo ==============================================
|
||||||
+ | Copyright (c) 1997-2017 The PHP Group |
|
|
||||||
+ +----------------------------------------------------------------------+
|
|
||||||
+ | This source file is subject to version 3.01 of the PHP license, |
|
|
||||||
+ | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
+ | available through the world-wide-web at the following url: |
|
|
||||||
+ | http://www.php.net/license/3_01.txt |
|
|
||||||
+ | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
+ | obtain it through the world-wide-web, please send a note to |
|
|
||||||
+ | license@php.net so we can mail you a copy immediately. |
|
|
||||||
+ +----------------------------------------------------------------------+
|
|
||||||
+ | Author: Sara Golemon <pollita@php.net> |
|
|
||||||
+ +----------------------------------------------------------------------+
|
|
||||||
+*/
|
|
||||||
+
|
|
||||||
+#include "php_hash.h"
|
|
||||||
+#include "php_hash_sha3.h"
|
|
||||||
+
|
+
|
||||||
+#if (defined(__APPLE__) || defined(__APPLE_CC__)) && \
|
+#if (defined(__APPLE__) || defined(__APPLE_CC__)) && \
|
||||||
+ (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
|
+ (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
|
||||||
@ -107,7 +90,7 @@ index 0000000..a3bfda4
|
|||||||
+
|
+
|
||||||
+#ifdef WORDS_BIGENDIAN
|
+#ifdef WORDS_BIGENDIAN
|
||||||
+static inline uint64_t load64(const unsigned char* x) {
|
+static inline uint64_t load64(const unsigned char* x) {
|
||||||
+ char i;
|
+ signed char i;
|
||||||
+ uint64_t ret = 0;
|
+ uint64_t ret = 0;
|
||||||
+ for (i = 7; i >= 0; --i) {
|
+ for (i = 7; i >= 0; --i) {
|
||||||
+ ret <<= 8;
|
+ ret <<= 8;
|
||||||
@ -291,38 +274,37 @@ index 0000000..a3bfda4
|
|||||||
+ 1 \
|
+ 1 \
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+DECLARE_SHA3_OPS(224);
|
+#else
|
||||||
+DECLARE_SHA3_OPS(256);
|
|
||||||
+DECLARE_SHA3_OPS(384);
|
|
||||||
+DECLARE_SHA3_OPS(512);
|
|
||||||
+
|
+
|
||||||
+#undef DECLARE_SHA3_OPS
|
+// ================= fast algo ==============================================
|
||||||
+
|
+
|
||||||
+/*
|
#define SUCCESS SHA3_SUCCESS /* Avoid conflict between KeccacHash.h and zend_types.h */
|
||||||
+ * Local variables:
|
#include "KeccakHash.h"
|
||||||
+ * tab-width: 4
|
|
||||||
+ * c-basic-offset: 4
|
@@ -60,6 +271,9 @@ const php_hash_ops php_hash_sha3_##bits##_ops = { \
|
||||||
+ * End:
|
1 \
|
||||||
+ * vim600: sw=4 ts=4 fdm=marker
|
}
|
||||||
+ * vim<600: sw=4 ts=4
|
|
||||||
+ */
|
+#endif
|
||||||
|
+// ================= both algo ==============================================
|
||||||
|
+
|
||||||
|
DECLARE_SHA3_OPS(224);
|
||||||
|
DECLARE_SHA3_OPS(256);
|
||||||
|
DECLARE_SHA3_OPS(384);
|
||||||
diff --git a/ext/hash/php_hash_sha3.h b/ext/hash/php_hash_sha3.h
|
diff --git a/ext/hash/php_hash_sha3.h b/ext/hash/php_hash_sha3.h
|
||||||
index b47d1b1..5fb3aa6 100644
|
index b47d1b102f37..73f0f8af3662 100644
|
||||||
--- a/ext/hash/php_hash_sha3.h
|
--- a/ext/hash/php_hash_sha3.h
|
||||||
+++ b/ext/hash/php_hash_sha3.h
|
+++ b/ext/hash/php_hash_sha3.h
|
||||||
@@ -22,7 +22,12 @@
|
@@ -22,7 +22,12 @@
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
+#ifdef HAVE_FAST_HASH3
|
+#ifdef HAVE_SLOW_HASH3
|
||||||
void *hashinstance;
|
|
||||||
+#else
|
|
||||||
+ unsigned char state[200]; // 5 * 5 * sizeof(uint64)
|
+ unsigned char state[200]; // 5 * 5 * sizeof(uint64)
|
||||||
+ uint32_t pos;
|
+ uint32_t pos;
|
||||||
|
+#else
|
||||||
|
void *hashinstance;
|
||||||
+#endif
|
+#endif
|
||||||
} PHP_SHA3_CTX;
|
} PHP_SHA3_CTX;
|
||||||
|
|
||||||
typedef PHP_SHA3_CTX PHP_SHA3_224_CTX;
|
typedef PHP_SHA3_CTX PHP_SHA3_224_CTX;
|
||||||
--
|
|
||||||
2.9.5
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user