xref: /isa-l_crypto/sha512_mb/sha512_mb_rand_ssl_test.c (revision 34bf6af21bafe61f414035ed3ba9f4578d60309f)
16df3ef80SGreg Tucker /**********************************************************************
26df3ef80SGreg Tucker   Copyright(c) 2011-2016 Intel Corporation All rights reserved.
36df3ef80SGreg Tucker 
46df3ef80SGreg Tucker   Redistribution and use in source and binary forms, with or without
56df3ef80SGreg Tucker   modification, are permitted provided that the following conditions
66df3ef80SGreg Tucker   are met:
76df3ef80SGreg Tucker     * Redistributions of source code must retain the above copyright
86df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer.
96df3ef80SGreg Tucker     * Redistributions in binary form must reproduce the above copyright
106df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer in
116df3ef80SGreg Tucker       the documentation and/or other materials provided with the
126df3ef80SGreg Tucker       distribution.
136df3ef80SGreg Tucker     * Neither the name of Intel Corporation nor the names of its
146df3ef80SGreg Tucker       contributors may be used to endorse or promote products derived
156df3ef80SGreg Tucker       from this software without specific prior written permission.
166df3ef80SGreg Tucker 
176df3ef80SGreg Tucker   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186df3ef80SGreg Tucker   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196df3ef80SGreg Tucker   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206df3ef80SGreg Tucker   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216df3ef80SGreg Tucker   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226df3ef80SGreg Tucker   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236df3ef80SGreg Tucker   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246df3ef80SGreg Tucker   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256df3ef80SGreg Tucker   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266df3ef80SGreg Tucker   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276df3ef80SGreg Tucker   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286df3ef80SGreg Tucker **********************************************************************/
296df3ef80SGreg Tucker 
306df3ef80SGreg Tucker #include <stdio.h>
316df3ef80SGreg Tucker #include <stdlib.h>
326df3ef80SGreg Tucker #include <openssl/sha.h>
336df3ef80SGreg Tucker #include "sha512_mb.h"
3492aa5aa4SGreg Tucker #include "endian_helper.h"
356df3ef80SGreg Tucker 
366df3ef80SGreg Tucker #define TEST_LEN  (1024 * 1024)
376df3ef80SGreg Tucker #define TEST_BUFS 200
386df3ef80SGreg Tucker #ifndef RANDOMS
396df3ef80SGreg Tucker #define RANDOMS 10
406df3ef80SGreg Tucker #endif
416df3ef80SGreg Tucker #ifndef TEST_SEED
426df3ef80SGreg Tucker #define TEST_SEED 0x1234
436df3ef80SGreg Tucker #endif
446df3ef80SGreg Tucker 
456df3ef80SGreg Tucker /* Reference digest global to reduce stack usage */
46592e639eSPablo de Lara static uint8_t digest_ssl[TEST_BUFS][8 * ISAL_SHA512_DIGEST_NWORDS];
476df3ef80SGreg Tucker 
486df3ef80SGreg Tucker // Generates pseudo-random data
493fb7b5f1SMarcel Cornu void
rand_buffer(unsigned char * buf,const long buffer_size)503fb7b5f1SMarcel Cornu rand_buffer(unsigned char *buf, const long buffer_size)
516df3ef80SGreg Tucker {
526df3ef80SGreg Tucker         long i;
536df3ef80SGreg Tucker         for (i = 0; i < buffer_size; i++)
546df3ef80SGreg Tucker                 buf[i] = rand();
556df3ef80SGreg Tucker }
566df3ef80SGreg Tucker 
573fb7b5f1SMarcel Cornu int
main(void)583fb7b5f1SMarcel Cornu main(void)
596df3ef80SGreg Tucker {
60592e639eSPablo de Lara         ISAL_SHA512_HASH_CTX_MGR *mgr = NULL;
61*34bf6af2SPablo de Lara         ISAL_SHA512_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
626df3ef80SGreg Tucker         unsigned char *bufs[TEST_BUFS];
636df3ef80SGreg Tucker         uint32_t i, j, fail = 0;
646df3ef80SGreg Tucker         uint32_t lens[TEST_BUFS];
656df3ef80SGreg Tucker         unsigned int jobs, t;
66c91caf97STom Cosgrove         int ret;
676df3ef80SGreg Tucker 
683fb7b5f1SMarcel Cornu         printf("multibinary_sha512 test, %d sets of %dx%d max: ", RANDOMS, TEST_BUFS, TEST_LEN);
696df3ef80SGreg Tucker 
706df3ef80SGreg Tucker         srand(TEST_SEED);
716df3ef80SGreg Tucker 
72592e639eSPablo de Lara         ret = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA512_HASH_CTX_MGR));
73c91caf97STom Cosgrove         if ((ret != 0) || (mgr == NULL)) {
74c91caf97STom Cosgrove                 printf("posix_memalign failed test aborted\n");
75c91caf97STom Cosgrove                 return 1;
76c91caf97STom Cosgrove         }
77c91caf97STom Cosgrove 
78*34bf6af2SPablo de Lara         ret = isal_sha512_ctx_mgr_init(mgr);
79*34bf6af2SPablo de Lara         if (ret)
80*34bf6af2SPablo de Lara                 return 1;
816df3ef80SGreg Tucker 
826df3ef80SGreg Tucker         for (i = 0; i < TEST_BUFS; i++) {
836df3ef80SGreg Tucker                 // Allocate and fill buffer
846df3ef80SGreg Tucker                 bufs[i] = (unsigned char *) malloc(TEST_LEN);
856df3ef80SGreg Tucker                 if (bufs[i] == NULL) {
866df3ef80SGreg Tucker                         printf("malloc failed test aborted\n");
876df3ef80SGreg Tucker                         return 1;
886df3ef80SGreg Tucker                 }
896df3ef80SGreg Tucker                 rand_buffer(bufs[i], TEST_LEN);
906df3ef80SGreg Tucker 
916df3ef80SGreg Tucker                 // Init ctx contents
928cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
936df3ef80SGreg Tucker                 ctxpool[i].user_data = (void *) ((uint64_t) i);
946df3ef80SGreg Tucker 
956df3ef80SGreg Tucker                 // SSL test
966df3ef80SGreg Tucker                 SHA512(bufs[i], TEST_LEN, digest_ssl[i]);
976df3ef80SGreg Tucker 
986df3ef80SGreg Tucker                 // sb_sha512 test
99*34bf6af2SPablo de Lara                 ret = isal_sha512_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, bufs[i], TEST_LEN,
100*34bf6af2SPablo de Lara                                                  ISAL_HASH_ENTIRE);
101*34bf6af2SPablo de Lara                 if (ret)
102*34bf6af2SPablo de Lara                         return 1;
1036df3ef80SGreg Tucker         }
1046df3ef80SGreg Tucker 
105*34bf6af2SPablo de Lara         do {
106*34bf6af2SPablo de Lara                 ret = isal_sha512_ctx_mgr_flush(mgr, &ctx);
107*34bf6af2SPablo de Lara                 if (ret)
108*34bf6af2SPablo de Lara                         return 1;
109*34bf6af2SPablo de Lara         } while (ctx != NULL);
1106df3ef80SGreg Tucker 
1116df3ef80SGreg Tucker         for (i = 0; i < TEST_BUFS; i++) {
112592e639eSPablo de Lara                 for (j = 0; j < ISAL_SHA512_DIGEST_NWORDS; j++) {
1136df3ef80SGreg Tucker                         if (ctxpool[i].job.result_digest[j] !=
114e3f7d4fbSUlrich Weigand                             to_be64(((uint64_t *) digest_ssl[i])[j])) {
1156df3ef80SGreg Tucker                                 fail++;
11687dde3adSTomasz Kantecki                                 printf("Test%d, digest%d fail %016llX <=> %016llX\n", i, j,
11787dde3adSTomasz Kantecki                                        (unsigned long long) ctxpool[i].job.result_digest[j],
11887dde3adSTomasz Kantecki                                        (unsigned long long) to_be64(
11987dde3adSTomasz Kantecki                                                ((uint64_t *) digest_ssl[i])[j]));
1206df3ef80SGreg Tucker                         }
1216df3ef80SGreg Tucker                 }
1226df3ef80SGreg Tucker         }
1236df3ef80SGreg Tucker         putchar('.');
1246df3ef80SGreg Tucker 
1256df3ef80SGreg Tucker         // Run tests with random size and number of jobs
1266df3ef80SGreg Tucker         for (t = 0; t < RANDOMS; t++) {
1276df3ef80SGreg Tucker                 jobs = rand() % (TEST_BUFS);
1286df3ef80SGreg Tucker 
129*34bf6af2SPablo de Lara                 ret = isal_sha512_ctx_mgr_init(mgr);
130*34bf6af2SPablo de Lara                 if (ret)
131*34bf6af2SPablo de Lara                         return 1;
1326df3ef80SGreg Tucker 
1336df3ef80SGreg Tucker                 for (i = 0; i < jobs; i++) {
1346a128452SXinze Zhang                         // Random buffer with random len and contents
1356df3ef80SGreg Tucker                         lens[i] = rand() % (TEST_LEN);
1366df3ef80SGreg Tucker                         rand_buffer(bufs[i], lens[i]);
1376df3ef80SGreg Tucker 
1386df3ef80SGreg Tucker                         // Run SSL test
1396df3ef80SGreg Tucker                         SHA512(bufs[i], lens[i], digest_ssl[i]);
1406df3ef80SGreg Tucker 
1416df3ef80SGreg Tucker                         // Run sb_sha512 test
142*34bf6af2SPablo de Lara                         ret = isal_sha512_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, bufs[i], lens[i],
143*34bf6af2SPablo de Lara                                                          ISAL_HASH_ENTIRE);
144*34bf6af2SPablo de Lara                         if (ret)
145*34bf6af2SPablo de Lara                                 return 1;
1466df3ef80SGreg Tucker                 }
1476df3ef80SGreg Tucker 
148*34bf6af2SPablo de Lara                 do {
149*34bf6af2SPablo de Lara                         ret = isal_sha512_ctx_mgr_flush(mgr, &ctx);
150*34bf6af2SPablo de Lara                         if (ret)
151*34bf6af2SPablo de Lara                                 return 1;
152*34bf6af2SPablo de Lara                 } while (ctx != NULL);
1536df3ef80SGreg Tucker 
1546df3ef80SGreg Tucker                 for (i = 0; i < jobs; i++) {
155592e639eSPablo de Lara                         for (j = 0; j < ISAL_SHA512_DIGEST_NWORDS; j++) {
1566df3ef80SGreg Tucker                                 if (ctxpool[i].job.result_digest[j] !=
157e3f7d4fbSUlrich Weigand                                     to_be64(((uint64_t *) digest_ssl[i])[j])) {
1586df3ef80SGreg Tucker                                         fail++;
15987dde3adSTomasz Kantecki                                         printf("Test%d, digest%d fail %016llX <=> %016llX\n", i, j,
16087dde3adSTomasz Kantecki                                                (unsigned long long) ctxpool[i].job.result_digest[j],
16187dde3adSTomasz Kantecki                                                (unsigned long long) to_be64(
16287dde3adSTomasz Kantecki                                                        ((uint64_t *) digest_ssl[i])[j]));
1636df3ef80SGreg Tucker                                 }
1646df3ef80SGreg Tucker                         }
1656df3ef80SGreg Tucker                 }
1666df3ef80SGreg Tucker                 if (fail) {
1676df3ef80SGreg Tucker                         printf("Test failed function check %d\n", fail);
1686df3ef80SGreg Tucker                         return fail;
1696df3ef80SGreg Tucker                 }
1706df3ef80SGreg Tucker 
1716df3ef80SGreg Tucker                 putchar('.');
1726df3ef80SGreg Tucker                 fflush(0);
1736df3ef80SGreg Tucker         } // random test t
1746df3ef80SGreg Tucker 
1756df3ef80SGreg Tucker         if (fail)
1766df3ef80SGreg Tucker                 printf("Test failed function check %d\n", fail);
1776df3ef80SGreg Tucker         else
1786df3ef80SGreg Tucker                 printf(" multibinary_sha512_ssl rand: Pass\n");
1796df3ef80SGreg Tucker 
1806df3ef80SGreg Tucker         return fail;
1816df3ef80SGreg Tucker }
182