summaryrefslogtreecommitdiffstats
path: root/src/crypto/isa-l/isa-l_crypto/tests/extended
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
commite6918187568dbd01842d8d1d2c808ce16a894239 (patch)
tree64f88b554b444a49f656b6c656111a145cbbaa28 /src/crypto/isa-l/isa-l_crypto/tests/extended
parentInitial commit. (diff)
downloadceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz
ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/crypto/isa-l/isa-l_crypto/tests/extended')
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile19
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile.nmake58
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/md5_mb_over_4GB_test.c155
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/sha1_mb_over_4GB_test.c156
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/sha256_mb_over_4GB_test.c156
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/sha512_mb_over_4GB_test.c156
-rw-r--r--src/crypto/isa-l/isa-l_crypto/tests/extended/sm3_mb_over_4GB_test.c162
7 files changed, 862 insertions, 0 deletions
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile b/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile
new file mode 100644
index 000000000..964baee11
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile
@@ -0,0 +1,19 @@
+CFLAGS += -I ../../include
+libs += ../../bin/isa-l_crypto.a
+tests = $(patsubst %test.c, %test, $(wildcard *_test.c))
+
+tests: $(tests)
+$(tests): $(libs)
+%test: %test.c
+ $(CC) $< $(libs) $(CFLAGS) $(LDLIBS) -o $@
+$(libs):
+ $(MAKE) -C ../../ -f Makefile.unx
+test: $(addsuffix .run,$(tests))
+ @echo ALL PASS
+$(addsuffix .run,$(tests)): %.run: %
+ $(SIM) ./$<
+ @echo Completed run: $<
+clean:
+ $(RM) *.o $(tests)
+
+$(tests): LDLIBS += -lcrypto
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile.nmake b/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile.nmake
new file mode 100644
index 000000000..daaf04e79
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/Makefile.nmake
@@ -0,0 +1,58 @@
+########################################################################
+# Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Intel Corporation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+tests = md5_mb_over_4GB_test.exe sha1_mb_over_4GB_test.exe \
+sha256_mb_over_4GB_test.exe sha512_mb_over_4GB_test.exe
+
+INCLUDES = -I../../include
+LINKFLAGS = /nologo
+INCLUDES = $(INCLUDES) -Ic:\OpenSSL-Win64\include
+CFLAGS = -O2 -D NDEBUG /nologo -D_USE_MATH_DEFINES -Qstd=c99 $(INCLUDES) /c
+LINKFLAGS = $(LINKFLAGS) /libpath:c:\OpenSSL-Win64\lib
+LIBS = ../../isa-l_crypto.lib
+DLL = isa-l_crypto.dll
+
+tests: lib $(tests)
+$(tests): $(@B).obj
+ link /out:$@ $(LINKFLAGS) libeay32.lib $(LIBS) $*.obj
+%.obj: %.c
+ $(CC) $(CFLAGS) -Fo$@ $?
+
+lib:
+ cd ../../ && nmake -f Makefile.nmake
+ cd ../../ && copy $(DLL) "tests\extended"
+
+test: $(tests)
+ !$?
+ echo ALL PASS
+
+clean:
+ -if exist *.obj del *.obj
+ -if exist *.exe del *.exe
+ -if exist *.dll del *.dll
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/md5_mb_over_4GB_test.c b/src/crypto/isa-l/isa-l_crypto/tests/extended/md5_mb_over_4GB_test.c
new file mode 100644
index 000000000..5eb7be75f
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/md5_mb_over_4GB_test.c
@@ -0,0 +1,155 @@
+/**********************************************************************
+ Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "md5_mb.h"
+#include "endian_helper.h"
+#include <openssl/md5.h>
+#define TEST_LEN (1024*1024ull) //1M
+#define TEST_BUFS MD5_MIN_LANES
+#define ROTATION_TIMES 10000 //total length processing = TEST_LEN * ROTATION_TIMES
+#define UPDATE_SIZE (13*MD5_BLOCK_SIZE)
+#define LEN_TOTAL (TEST_LEN * ROTATION_TIMES)
+
+/* Reference digest global to reduce stack usage */
+static uint8_t digest_ref_upd[4 * MD5_DIGEST_NWORDS];
+
+struct user_data {
+ int idx;
+ uint64_t processed;
+};
+
+int main(void)
+{
+ MD5_CTX o_ctx; //openSSL
+ MD5_HASH_CTX_MGR *mgr = NULL;
+ MD5_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
+ uint32_t i, j, k, fail = 0;
+ unsigned char *bufs[TEST_BUFS];
+ struct user_data udata[TEST_BUFS];
+ int ret;
+
+ ret = posix_memalign((void *)&mgr, 16, sizeof(MD5_HASH_CTX_MGR));
+ if ((ret != 0) || (mgr == NULL)) {
+ printf("posix_memalign failed test aborted\n");
+ return 1;
+ }
+ md5_ctx_mgr_init(mgr);
+
+ printf("md5_large_test\n");
+
+ // Init ctx contents
+ for (i = 0; i < TEST_BUFS; i++) {
+ bufs[i] = (unsigned char *)calloc((size_t)TEST_LEN, 1);
+ if (bufs[i] == NULL) {
+ printf("malloc failed test aborted\n");
+ return 1;
+ }
+ hash_ctx_init(&ctxpool[i]);
+ ctxpool[i].user_data = (void *)&udata[i];
+ }
+
+ //Openssl MD5 update test
+ MD5_Init(&o_ctx);
+ for (k = 0; k < ROTATION_TIMES; k++) {
+ MD5_Update(&o_ctx, bufs[k % TEST_BUFS], TEST_LEN);
+ }
+ MD5_Final(digest_ref_upd, &o_ctx);
+
+ // Initialize pool
+ for (i = 0; i < TEST_BUFS; i++) {
+ struct user_data *u = (struct user_data *)ctxpool[i].user_data;
+ u->idx = i;
+ u->processed = 0;
+ }
+
+ printf("Starting updates\n");
+ int highest_pool_idx = 0;
+ ctx = &ctxpool[highest_pool_idx++];
+ while (ctx) {
+ int len = UPDATE_SIZE;
+ int update_type = HASH_UPDATE;
+ struct user_data *u = (struct user_data *)ctx->user_data;
+ int idx = u->idx;
+
+ if (u->processed == 0)
+ update_type = HASH_FIRST;
+
+ else if (hash_ctx_complete(ctx)) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = md5_ctx_mgr_flush(mgr);
+ continue;
+ } else if (u->processed >= (LEN_TOTAL - UPDATE_SIZE)) {
+ len = (LEN_TOTAL - u->processed);
+ update_type = HASH_LAST;
+ }
+ u->processed += len;
+ ctx = md5_ctx_mgr_submit(mgr, ctx, bufs[idx], len, update_type);
+
+ if (NULL == ctx) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = md5_ctx_mgr_flush(mgr);
+ }
+ }
+
+ printf("multibuffer md5 digest: \n");
+ for (i = 0; i < TEST_BUFS; i++) {
+ printf("Total processing size of buf[%d] is %ld \n", i,
+ ctxpool[i].total_length);
+ for (j = 0; j < MD5_DIGEST_NWORDS; j++) {
+ printf("digest%d : %08X\n", j, ctxpool[i].job.result_digest[j]);
+ }
+ }
+ printf("\n");
+
+ printf("openssl md5 update digest: \n");
+ for (i = 0; i < MD5_DIGEST_NWORDS; i++)
+ printf("%08X - ", to_le32(((uint32_t *) digest_ref_upd)[i]));
+ printf("\n");
+
+ for (i = 0; i < TEST_BUFS; i++) {
+ for (j = 0; j < MD5_DIGEST_NWORDS; j++) {
+ if (ctxpool[i].job.result_digest[j] !=
+ to_le32(((uint32_t *) digest_ref_upd)[j])) {
+ fail++;
+ }
+ }
+ }
+
+ if (fail)
+ printf("Test failed md5 hash large file check %d\n", fail);
+ else
+ printf(" md5_hash_large_test: Pass\n");
+ return fail;
+}
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/sha1_mb_over_4GB_test.c b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha1_mb_over_4GB_test.c
new file mode 100644
index 000000000..af94a8098
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha1_mb_over_4GB_test.c
@@ -0,0 +1,156 @@
+/**********************************************************************
+ Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "sha1_mb.h"
+#include "endian_helper.h"
+#include <openssl/sha.h>
+#define TEST_LEN (1024*1024ull) //1M
+#define TEST_BUFS SHA1_MIN_LANES
+#define ROTATION_TIMES 10000 //total length processing = TEST_LEN * ROTATION_TIMES
+#define UPDATE_SIZE (13*SHA1_BLOCK_SIZE)
+#define LEN_TOTAL (TEST_LEN * ROTATION_TIMES)
+
+/* Reference digest global to reduce stack usage */
+static uint8_t digest_ref_upd[4 * SHA1_DIGEST_NWORDS];
+
+struct user_data {
+ int idx;
+ uint64_t processed;
+};
+
+int main(void)
+{
+ SHA_CTX o_ctx; //openSSL
+ SHA1_HASH_CTX_MGR *mgr = NULL;
+ SHA1_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
+ uint32_t i, j, k, fail = 0;
+ unsigned char *bufs[TEST_BUFS];
+ struct user_data udata[TEST_BUFS];
+ int ret;
+
+ ret = posix_memalign((void *)&mgr, 16, sizeof(SHA1_HASH_CTX_MGR));
+ if ((ret != 0) || (mgr == NULL)) {
+ printf("posix_memalign failed test aborted\n");
+ return 1;
+ }
+
+ sha1_ctx_mgr_init(mgr);
+
+ printf("sha1_large_test\n");
+
+ // Init ctx contents
+ for (i = 0; i < TEST_BUFS; i++) {
+ bufs[i] = (unsigned char *)calloc((size_t)TEST_LEN, 1);
+ if (bufs[i] == NULL) {
+ printf("malloc failed test aborted\n");
+ return 1;
+ }
+ hash_ctx_init(&ctxpool[i]);
+ ctxpool[i].user_data = (void *)&udata[i];
+ }
+
+ //Openssl SHA1 update test
+ SHA1_Init(&o_ctx);
+ for (k = 0; k < ROTATION_TIMES; k++) {
+ SHA1_Update(&o_ctx, bufs[k % TEST_BUFS], TEST_LEN);
+ }
+ SHA1_Final(digest_ref_upd, &o_ctx);
+
+ // Initialize pool
+ for (i = 0; i < TEST_BUFS; i++) {
+ struct user_data *u = (struct user_data *)ctxpool[i].user_data;
+ u->idx = i;
+ u->processed = 0;
+ }
+
+ printf("Starting updates\n");
+ int highest_pool_idx = 0;
+ ctx = &ctxpool[highest_pool_idx++];
+ while (ctx) {
+ int len = UPDATE_SIZE;
+ int update_type = HASH_UPDATE;
+ struct user_data *u = (struct user_data *)ctx->user_data;
+ int idx = u->idx;
+
+ if (u->processed == 0)
+ update_type = HASH_FIRST;
+
+ else if (hash_ctx_complete(ctx)) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha1_ctx_mgr_flush(mgr);
+ continue;
+ } else if (u->processed >= (LEN_TOTAL - UPDATE_SIZE)) {
+ len = (LEN_TOTAL - u->processed);
+ update_type = HASH_LAST;
+ }
+ u->processed += len;
+ ctx = sha1_ctx_mgr_submit(mgr, ctx, bufs[idx], len, update_type);
+
+ if (NULL == ctx) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha1_ctx_mgr_flush(mgr);
+ }
+ }
+
+ printf("multibuffer SHA1 digest: \n");
+ for (i = 0; i < TEST_BUFS; i++) {
+ printf("Total processing size of buf[%d] is %ld \n", i,
+ ctxpool[i].total_length);
+ for (j = 0; j < SHA1_DIGEST_NWORDS; j++) {
+ printf("digest%d : %08X\n", j, ctxpool[i].job.result_digest[j]);
+ }
+ }
+ printf("\n");
+
+ printf("openssl SHA1 update digest: \n");
+ for (i = 0; i < SHA1_DIGEST_NWORDS; i++)
+ printf("%08X - ", to_be32(((uint32_t *) digest_ref_upd)[i]));
+ printf("\n");
+
+ for (i = 0; i < TEST_BUFS; i++) {
+ for (j = 0; j < SHA1_DIGEST_NWORDS; j++) {
+ if (ctxpool[i].job.result_digest[j] !=
+ to_be32(((uint32_t *) digest_ref_upd)[j])) {
+ fail++;
+ }
+ }
+ }
+
+ if (fail)
+ printf("Test failed SHA1 hash large file check %d\n", fail);
+ else
+ printf(" SHA1_hash_large_test: Pass\n");
+ return fail;
+}
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/sha256_mb_over_4GB_test.c b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha256_mb_over_4GB_test.c
new file mode 100644
index 000000000..35bbdcbae
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha256_mb_over_4GB_test.c
@@ -0,0 +1,156 @@
+/**********************************************************************
+ Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "sha256_mb.h"
+#include "endian_helper.h"
+#include <openssl/sha.h>
+#define TEST_LEN (1024*1024ull) //1M
+#define TEST_BUFS SHA256_MIN_LANES
+#define ROTATION_TIMES 10000 //total length processing = TEST_LEN * ROTATION_TIMES
+#define UPDATE_SIZE (13*SHA256_BLOCK_SIZE)
+#define LEN_TOTAL (TEST_LEN * ROTATION_TIMES)
+
+/* Reference digest global to reduce stack usage */
+static uint8_t digest_ref_upd[4 * SHA256_DIGEST_NWORDS];
+
+struct user_data {
+ int idx;
+ uint64_t processed;
+};
+
+int main(void)
+{
+ SHA256_CTX o_ctx; //openSSL
+ SHA256_HASH_CTX_MGR *mgr = NULL;
+ SHA256_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
+ uint32_t i, j, k, fail = 0;
+ unsigned char *bufs[TEST_BUFS];
+ struct user_data udata[TEST_BUFS];
+ int ret;
+
+ ret = posix_memalign((void *)&mgr, 16, sizeof(SHA256_HASH_CTX_MGR));
+ if ((ret != 0) || (mgr == NULL)) {
+ printf("posix_memalign failed test aborted\n");
+ return 1;
+ }
+
+ sha256_ctx_mgr_init(mgr);
+
+ printf("sha256_large_test\n");
+
+ // Init ctx contents
+ for (i = 0; i < TEST_BUFS; i++) {
+ bufs[i] = (unsigned char *)calloc((size_t)TEST_LEN, 1);
+ if (bufs[i] == NULL) {
+ printf("malloc failed test aborted\n");
+ return 1;
+ }
+ hash_ctx_init(&ctxpool[i]);
+ ctxpool[i].user_data = (void *)&udata[i];
+ }
+
+ //Openssl SHA256 update test
+ SHA256_Init(&o_ctx);
+ for (k = 0; k < ROTATION_TIMES; k++) {
+ SHA256_Update(&o_ctx, bufs[k % TEST_BUFS], TEST_LEN);
+ }
+ SHA256_Final(digest_ref_upd, &o_ctx);
+
+ // Initialize pool
+ for (i = 0; i < TEST_BUFS; i++) {
+ struct user_data *u = (struct user_data *)ctxpool[i].user_data;
+ u->idx = i;
+ u->processed = 0;
+ }
+
+ printf("Starting updates\n");
+ int highest_pool_idx = 0;
+ ctx = &ctxpool[highest_pool_idx++];
+ while (ctx) {
+ int len = UPDATE_SIZE;
+ int update_type = HASH_UPDATE;
+ struct user_data *u = (struct user_data *)ctx->user_data;
+ int idx = u->idx;
+
+ if (u->processed == 0)
+ update_type = HASH_FIRST;
+
+ else if (hash_ctx_complete(ctx)) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha256_ctx_mgr_flush(mgr);
+ continue;
+ } else if (u->processed >= (LEN_TOTAL - UPDATE_SIZE)) {
+ len = (LEN_TOTAL - u->processed);
+ update_type = HASH_LAST;
+ }
+ u->processed += len;
+ ctx = sha256_ctx_mgr_submit(mgr, ctx, bufs[idx], len, update_type);
+
+ if (NULL == ctx) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha256_ctx_mgr_flush(mgr);
+ }
+ }
+
+ printf("multibuffer SHA256 digest: \n");
+ for (i = 0; i < TEST_BUFS; i++) {
+ printf("Total processing size of buf[%d] is %ld \n", i,
+ ctxpool[i].total_length);
+ for (j = 0; j < SHA256_DIGEST_NWORDS; j++) {
+ printf("digest%d : %08X\n", j, ctxpool[i].job.result_digest[j]);
+ }
+ }
+ printf("\n");
+
+ printf("openssl SHA256 update digest: \n");
+ for (i = 0; i < SHA256_DIGEST_NWORDS; i++)
+ printf("%08X - ", to_be32(((uint32_t *) digest_ref_upd)[i]));
+ printf("\n");
+
+ for (i = 0; i < TEST_BUFS; i++) {
+ for (j = 0; j < SHA256_DIGEST_NWORDS; j++) {
+ if (ctxpool[i].job.result_digest[j] !=
+ to_be32(((uint32_t *) digest_ref_upd)[j])) {
+ fail++;
+ }
+ }
+ }
+
+ if (fail)
+ printf("Test failed SHA256 hash large file check %d\n", fail);
+ else
+ printf(" SHA256_hash_large_test: Pass\n");
+ return fail;
+}
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/sha512_mb_over_4GB_test.c b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha512_mb_over_4GB_test.c
new file mode 100644
index 000000000..9c2aeaead
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/sha512_mb_over_4GB_test.c
@@ -0,0 +1,156 @@
+/**********************************************************************
+ Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "sha512_mb.h"
+#include "endian_helper.h"
+#include <openssl/sha.h>
+#define TEST_LEN (1024*1024ull) //1M
+#define TEST_BUFS SHA512_MIN_LANES
+#define ROTATION_TIMES 10000 //total length processing = TEST_LEN * ROTATION_TIMES
+#define UPDATE_SIZE (13*SHA512_BLOCK_SIZE)
+#define LEN_TOTAL (TEST_LEN * ROTATION_TIMES)
+
+/* Reference digest global to reduce stack usage */
+static uint8_t digest_ref_upd[8 * SHA512_DIGEST_NWORDS];
+
+struct user_data {
+ int idx;
+ uint64_t processed;
+};
+
+int main(void)
+{
+ SHA512_CTX o_ctx; //openSSL
+ SHA512_HASH_CTX_MGR *mgr = NULL;
+ SHA512_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
+ uint32_t i, j, k, fail = 0;
+ unsigned char *bufs[TEST_BUFS];
+ struct user_data udata[TEST_BUFS];
+ int ret;
+
+ ret = posix_memalign((void *)&mgr, 16, sizeof(SHA512_HASH_CTX_MGR));
+ if ((ret != 0) || (mgr == NULL)) {
+ printf("posix_memalign failed test aborted\n");
+ return 1;
+ }
+
+ sha512_ctx_mgr_init(mgr);
+
+ printf("sha512_large_test\n");
+
+ // Init ctx contents
+ for (i = 0; i < TEST_BUFS; i++) {
+ bufs[i] = (unsigned char *)calloc((size_t)TEST_LEN, 1);
+ if (bufs[i] == NULL) {
+ printf("malloc failed test aborted\n");
+ return 1;
+ }
+ hash_ctx_init(&ctxpool[i]);
+ ctxpool[i].user_data = (void *)&udata[i];
+ }
+
+ //Openssl SHA512 update test
+ SHA512_Init(&o_ctx);
+ for (k = 0; k < ROTATION_TIMES; k++) {
+ SHA512_Update(&o_ctx, bufs[k % TEST_BUFS], TEST_LEN);
+ }
+ SHA512_Final(digest_ref_upd, &o_ctx);
+
+ // Initialize pool
+ for (i = 0; i < TEST_BUFS; i++) {
+ struct user_data *u = (struct user_data *)ctxpool[i].user_data;
+ u->idx = i;
+ u->processed = 0;
+ }
+
+ printf("Starting updates\n");
+ int highest_pool_idx = 0;
+ ctx = &ctxpool[highest_pool_idx++];
+ while (ctx) {
+ int len = UPDATE_SIZE;
+ int update_type = HASH_UPDATE;
+ struct user_data *u = (struct user_data *)ctx->user_data;
+ int idx = u->idx;
+
+ if (u->processed == 0)
+ update_type = HASH_FIRST;
+
+ else if (hash_ctx_complete(ctx)) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha512_ctx_mgr_flush(mgr);
+ continue;
+ } else if (u->processed >= (LEN_TOTAL - UPDATE_SIZE)) {
+ len = (LEN_TOTAL - u->processed);
+ update_type = HASH_LAST;
+ }
+ u->processed += len;
+ ctx = sha512_ctx_mgr_submit(mgr, ctx, bufs[idx], len, update_type);
+
+ if (NULL == ctx) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sha512_ctx_mgr_flush(mgr);
+ }
+ }
+
+ printf("multibuffer sha512 digest: \n");
+ for (i = 0; i < TEST_BUFS; i++) {
+ printf("Total processing size of buf[%d] is %ld \n", i,
+ ctxpool[i].total_length);
+ for (j = 0; j < SHA512_DIGEST_NWORDS; j++) {
+ printf("digest%d : %016lX\n", j, ctxpool[i].job.result_digest[j]);
+ }
+ }
+ printf("\n");
+
+ printf("openssl sha512 update digest: \n");
+ for (i = 0; i < SHA512_DIGEST_NWORDS; i++)
+ printf("%016lX - ", to_be64(((uint64_t *) digest_ref_upd)[i]));
+ printf("\n");
+
+ for (i = 0; i < TEST_BUFS; i++) {
+ for (j = 0; j < SHA512_DIGEST_NWORDS; j++) {
+ if (ctxpool[i].job.result_digest[j] !=
+ to_be64(((uint64_t *) digest_ref_upd)[j])) {
+ fail++;
+ }
+ }
+ }
+
+ if (fail)
+ printf("Test failed sha512 hash large file check %d\n", fail);
+ else
+ printf(" sha512_hash_large_test: Pass\n");
+ return fail;
+}
diff --git a/src/crypto/isa-l/isa-l_crypto/tests/extended/sm3_mb_over_4GB_test.c b/src/crypto/isa-l/isa-l_crypto/tests/extended/sm3_mb_over_4GB_test.c
new file mode 100644
index 000000000..ea98e29b5
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/tests/extended/sm3_mb_over_4GB_test.c
@@ -0,0 +1,162 @@
+/**********************************************************************
+ Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "sm3_mb.h"
+#include "endian_helper.h"
+#include <openssl/evp.h>
+
+#define TEST_LEN (1024*1024ull) //1M
+#define TEST_BUFS SM3_MAX_LANES
+#define ROTATION_TIMES 10000 //total length processing = TEST_LEN * ROTATION_TIMES
+#define UPDATE_SIZE (13*SM3_BLOCK_SIZE)
+#define LEN_TOTAL (TEST_LEN * ROTATION_TIMES)
+
+/* Reference digest global to reduce stack usage */
+static uint8_t digest_ref_upd[4 * SM3_DIGEST_NWORDS];
+
+struct user_data {
+ int idx;
+ uint64_t processed;
+};
+
+int main(void)
+{
+ SM3_HASH_CTX_MGR *mgr = NULL;
+ SM3_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
+ uint32_t i, j, k, fail = 0;
+ unsigned char *bufs[TEST_BUFS];
+ struct user_data udata[TEST_BUFS];
+ EVP_MD_CTX *md_ctx;
+ const EVP_MD *md;
+ unsigned int md_len;
+ int ret;
+
+ ret = posix_memalign((void *)&mgr, 16, sizeof(SM3_HASH_CTX_MGR));
+ if ((ret != 0) || (mgr == NULL)) {
+ printf("posix_memalign failed test aborted\n");
+ return 1;
+ }
+
+ sm3_ctx_mgr_init(mgr);
+
+ printf("sm3_large_test\n");
+
+ // Init ctx contents
+ for (i = 0; i < TEST_BUFS; i++) {
+ bufs[i] = (unsigned char *)calloc((size_t)TEST_LEN, 1);
+ if (bufs[i] == NULL) {
+ printf("malloc failed test aborted\n");
+ return 1;
+ }
+ hash_ctx_init(&ctxpool[i]);
+ ctxpool[i].user_data = (void *)&udata[i];
+ }
+
+ //Openssl SM3 update test
+ md = EVP_sm3();
+ md_ctx = EVP_MD_CTX_new();
+ EVP_DigestInit_ex(md_ctx, md, NULL);
+ for (k = 0; k < ROTATION_TIMES; k++) {
+ EVP_DigestUpdate(md_ctx, bufs[k % TEST_BUFS], TEST_LEN);
+ }
+ EVP_DigestFinal_ex(md_ctx, digest_ref_upd, &md_len);
+ EVP_MD_CTX_free(md_ctx);
+
+ // Initialize pool
+ for (i = 0; i < TEST_BUFS; i++) {
+ struct user_data *u = (struct user_data *)ctxpool[i].user_data;
+ u->idx = i;
+ u->processed = 0;
+ }
+
+ printf("Starting updates\n");
+ int highest_pool_idx = 0;
+ ctx = &ctxpool[highest_pool_idx++];
+ while (ctx) {
+ int len = UPDATE_SIZE;
+ int update_type = HASH_UPDATE;
+ struct user_data *u = (struct user_data *)ctx->user_data;
+ int idx = u->idx;
+
+ if (u->processed == 0)
+ update_type = HASH_FIRST;
+
+ else if (hash_ctx_complete(ctx)) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sm3_ctx_mgr_flush(mgr);
+ continue;
+ } else if (u->processed >= (LEN_TOTAL - UPDATE_SIZE)) {
+ len = (LEN_TOTAL - u->processed);
+ update_type = HASH_LAST;
+ }
+ u->processed += len;
+ ctx = sm3_ctx_mgr_submit(mgr, ctx, bufs[idx], len, update_type);
+
+ if (NULL == ctx) {
+ if (highest_pool_idx < TEST_BUFS)
+ ctx = &ctxpool[highest_pool_idx++];
+ else
+ ctx = sm3_ctx_mgr_flush(mgr);
+ }
+ }
+
+ printf("multibuffer SM3 digest: \n");
+ for (i = 0; i < TEST_BUFS; i++) {
+ printf("Total processing size of buf[%d] is %ld \n", i,
+ ctxpool[i].total_length);
+ for (j = 0; j < SM3_DIGEST_NWORDS; j++) {
+ printf("digest%d : %08X\n", j, ctxpool[i].job.result_digest[j]);
+ }
+ }
+ printf("\n");
+
+ printf("openssl SM3 update digest: \n");
+ for (i = 0; i < SM3_DIGEST_NWORDS; i++)
+ printf("%08X - ", to_le32(((uint32_t *) digest_ref_upd)[i]));
+ printf("\n");
+
+ for (i = 0; i < TEST_BUFS; i++) {
+ for (j = 0; j < SM3_DIGEST_NWORDS; j++) {
+ if (ctxpool[i].job.result_digest[j] !=
+ to_le32(((uint32_t *) digest_ref_upd)[j])) {
+ fail++;
+ }
+ }
+ }
+
+ if (fail)
+ printf("Test failed SM3_hash_large check %d\n", fail);
+ else
+ printf(" SM3_hash_large_test: Pass\n");
+ return fail;
+}