xref: /isa-l_crypto/sha1_mb/sha1_multi_buffer_example.c (revision 8cb7fe780eac8ee5f1e0aa3ca37466e89c673ccd)
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 #include <stdio.h>
306df3ef80SGreg Tucker #include <stdint.h>
316df3ef80SGreg Tucker #include <stdlib.h>
326df3ef80SGreg Tucker #include <string.h>
336df3ef80SGreg Tucker #include "sha1_mb.h"
346df3ef80SGreg Tucker #include "test.h"
356df3ef80SGreg Tucker 
366df3ef80SGreg Tucker // Test messages
376df3ef80SGreg Tucker #define TST_STR "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
386df3ef80SGreg Tucker uint8_t msg1[] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
396df3ef80SGreg Tucker uint8_t msg2[] = "0123456789:;<=>?@ABCDEFGHIJKLMNO";
406df3ef80SGreg Tucker uint8_t msg3[] = TST_STR TST_STR "0123456789:;<";
416df3ef80SGreg Tucker uint8_t msg4[] = TST_STR TST_STR TST_STR "0123456789:;<=>?@ABCDEFGHIJKLMNOPQR";
426df3ef80SGreg Tucker uint8_t msg5[] = TST_STR TST_STR TST_STR TST_STR TST_STR "0123456789:;<=>?";
436df3ef80SGreg Tucker uint8_t msg6[] =
446df3ef80SGreg Tucker         TST_STR TST_STR TST_STR TST_STR TST_STR TST_STR "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU";
456df3ef80SGreg Tucker uint8_t msg7[] = "";
466df3ef80SGreg Tucker 
476df3ef80SGreg Tucker // Expected digests
486df3ef80SGreg Tucker uint32_t dgst1[] = { 0x84983E44, 0x1C3BD26E, 0xBAAE4AA1, 0xF95129E5, 0xE54670F1 };
496df3ef80SGreg Tucker uint32_t dgst2[] = { 0xB7C66452, 0x0FD122B3, 0x55D539F2, 0xA35E6FAA, 0xC2A5A11D };
506df3ef80SGreg Tucker uint32_t dgst3[] = { 0x127729B6, 0xA8B2F8A0, 0xA4DDC819, 0x08E1D8B3, 0x67CEEA55 };
516df3ef80SGreg Tucker uint32_t dgst4[] = { 0xFDDE2D00, 0xABD5B7A3, 0x699DE6F2, 0x3FF1D1AC, 0x3B872AC2 };
526df3ef80SGreg Tucker uint32_t dgst5[] = { 0xE7FCA85C, 0xA4AB3740, 0x6A180B32, 0x0B8D362C, 0x622A96E6 };
536df3ef80SGreg Tucker uint32_t dgst6[] = { 0x505B0686, 0xE1ACDF42, 0xB3588B5A, 0xB043D52C, 0x6D8C7444 };
546df3ef80SGreg Tucker uint32_t dgst7[] = { 0xDA39A3EE, 0x5E6B4B0D, 0x3255BFEF, 0x95601890, 0xAFD80709 };
556df3ef80SGreg Tucker 
566df3ef80SGreg Tucker uint8_t *msgs[] = { msg1, msg2, msg3, msg4, msg5, msg6, msg7 };
576df3ef80SGreg Tucker uint32_t *expected_digest[] = { dgst1, dgst2, dgst3, dgst4, dgst5, dgst6, dgst7 };
586df3ef80SGreg Tucker 
59868f05eaSMarcel Cornu int
check_job(uint32_t * ref,uint32_t * good,int words)60868f05eaSMarcel Cornu check_job(uint32_t *ref, uint32_t *good, int words)
616df3ef80SGreg Tucker {
626df3ef80SGreg Tucker         int i;
636df3ef80SGreg Tucker         for (i = 0; i < words; i++)
646df3ef80SGreg Tucker                 if (good[i] != ref[i])
656df3ef80SGreg Tucker                         return 1;
666df3ef80SGreg Tucker 
676df3ef80SGreg Tucker         return 0;
686df3ef80SGreg Tucker }
696df3ef80SGreg Tucker 
706df3ef80SGreg Tucker #define MAX_MSGS 7
716df3ef80SGreg Tucker 
72868f05eaSMarcel Cornu int
main(void)73868f05eaSMarcel Cornu main(void)
746df3ef80SGreg Tucker {
750106da91SPablo de Lara         ISAL_SHA1_HASH_CTX_MGR *mgr = NULL;
760106da91SPablo de Lara         ISAL_SHA1_HASH_CTX ctxpool[MAX_MSGS];
770106da91SPablo de Lara         ISAL_SHA1_HASH_CTX *p_job;
786df3ef80SGreg Tucker         int i, checked = 0, failed = 0;
796df3ef80SGreg Tucker         int n = sizeof(msgs) / sizeof(msgs[0]);
80c91caf97STom Cosgrove         int ret;
816df3ef80SGreg Tucker 
820106da91SPablo de Lara         ret = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA1_HASH_CTX_MGR));
83c91caf97STom Cosgrove         if ((ret != 0) || (mgr == NULL)) {
84c91caf97STom Cosgrove                 printf("posix_memalign failed test aborted\n");
85c91caf97STom Cosgrove                 return 1;
86c91caf97STom Cosgrove         }
876df3ef80SGreg Tucker         // Initialize multi-buffer manager
8814a3d258SPablo de Lara         ret = isal_sha1_ctx_mgr_init(mgr);
8914a3d258SPablo de Lara         if (ret)
9014a3d258SPablo de Lara                 return 1;
916df3ef80SGreg Tucker 
926df3ef80SGreg Tucker         for (i = 0; i < n; i++) {
93*8cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
946df3ef80SGreg Tucker                 ctxpool[i].user_data = (void *) expected_digest[i];
956df3ef80SGreg Tucker 
9614a3d258SPablo de Lara                 ret = isal_sha1_ctx_mgr_submit(mgr, &ctxpool[i], &p_job, msgs[i],
97*8cb7fe78SPablo de Lara                                                strlen((char *) msgs[i]), ISAL_HASH_ENTIRE);
9814a3d258SPablo de Lara                 if (ret)
9914a3d258SPablo de Lara                         return 1;
1006df3ef80SGreg Tucker 
1016df3ef80SGreg Tucker                 if (p_job) { // If we have finished a job, process it
1026df3ef80SGreg Tucker                         checked++;
103868f05eaSMarcel Cornu                         failed += check_job(p_job->job.result_digest, p_job->user_data,
1040106da91SPablo de Lara                                             ISAL_SHA1_DIGEST_NWORDS);
1056df3ef80SGreg Tucker                 }
1066df3ef80SGreg Tucker         }
1076df3ef80SGreg Tucker 
1086df3ef80SGreg Tucker         // Finish remaining jobs
10914a3d258SPablo de Lara         do {
11014a3d258SPablo de Lara                 ret = isal_sha1_ctx_mgr_flush(mgr, &p_job);
11114a3d258SPablo de Lara                 if (ret)
11214a3d258SPablo de Lara                         return 1;
11314a3d258SPablo de Lara                 if (p_job != NULL) {
1146df3ef80SGreg Tucker                         checked++;
11514a3d258SPablo de Lara                         failed += check_job(p_job->job.result_digest, p_job->user_data,
1160106da91SPablo de Lara                                             ISAL_SHA1_DIGEST_NWORDS);
1176df3ef80SGreg Tucker                 }
11814a3d258SPablo de Lara         } while (p_job != NULL);
1196df3ef80SGreg Tucker 
1206df3ef80SGreg Tucker         printf("Example multi-buffer sha1 completed=%d, failed=%d\n", checked, failed);
1216df3ef80SGreg Tucker         return failed;
1226df3ef80SGreg Tucker }
123