wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Tue Aug 22 10:47:28 2017 +0000
Revision:
12:1a06964c2adb
wolfSSL 3.12.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 12:1a06964c2adb 1 /* sha3.h
wolfSSL 12:1a06964c2adb 2 *
wolfSSL 12:1a06964c2adb 3 * Copyright (C) 2006-2016 wolfSSL Inc.
wolfSSL 12:1a06964c2adb 4 *
wolfSSL 12:1a06964c2adb 5 * This file is part of wolfSSL.
wolfSSL 12:1a06964c2adb 6 *
wolfSSL 12:1a06964c2adb 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 12:1a06964c2adb 8 * it under the terms of the GNU General Public License as published by
wolfSSL 12:1a06964c2adb 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 12:1a06964c2adb 10 * (at your option) any later version.
wolfSSL 12:1a06964c2adb 11 *
wolfSSL 12:1a06964c2adb 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 12:1a06964c2adb 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 12:1a06964c2adb 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 12:1a06964c2adb 15 * GNU General Public License for more details.
wolfSSL 12:1a06964c2adb 16 *
wolfSSL 12:1a06964c2adb 17 * You should have received a copy of the GNU General Public License
wolfSSL 12:1a06964c2adb 18 * along with this program; if not, write to the Free Software
wolfSSL 12:1a06964c2adb 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 12:1a06964c2adb 20 */
wolfSSL 12:1a06964c2adb 21
wolfSSL 12:1a06964c2adb 22
wolfSSL 12:1a06964c2adb 23 #ifndef WOLF_CRYPT_SHA3_H
wolfSSL 12:1a06964c2adb 24 #define WOLF_CRYPT_SHA3_H
wolfSSL 12:1a06964c2adb 25
wolfSSL 12:1a06964c2adb 26 #include <wolfssl/wolfcrypt/types.h>
wolfSSL 12:1a06964c2adb 27
wolfSSL 12:1a06964c2adb 28 #ifdef WOLFSSL_SHA3
wolfSSL 12:1a06964c2adb 29
wolfSSL 12:1a06964c2adb 30 #ifdef HAVE_FIPS
wolfSSL 12:1a06964c2adb 31 /* for fips @wc_fips */
wolfSSL 12:1a06964c2adb 32 #include <cyassl/ctaocrypt/sha3.h>
wolfSSL 12:1a06964c2adb 33 #endif
wolfSSL 12:1a06964c2adb 34
wolfSSL 12:1a06964c2adb 35 #ifdef __cplusplus
wolfSSL 12:1a06964c2adb 36 extern "C" {
wolfSSL 12:1a06964c2adb 37 #endif
wolfSSL 12:1a06964c2adb 38
wolfSSL 12:1a06964c2adb 39 #ifndef HAVE_FIPS /* avoid redefinition of structs */
wolfSSL 12:1a06964c2adb 40
wolfSSL 12:1a06964c2adb 41 #ifdef WOLFSSL_ASYNC_CRYPT
wolfSSL 12:1a06964c2adb 42 #include <wolfssl/wolfcrypt/async.h>
wolfSSL 12:1a06964c2adb 43 #endif
wolfSSL 12:1a06964c2adb 44
wolfSSL 12:1a06964c2adb 45 /* in bytes */
wolfSSL 12:1a06964c2adb 46 enum {
wolfSSL 12:1a06964c2adb 47 SHA3_224 = 10, /* hash type unique */
wolfSSL 12:1a06964c2adb 48 SHA3_224_DIGEST_SIZE = 28,
wolfSSL 12:1a06964c2adb 49 SHA3_224_COUNT = 18,
wolfSSL 12:1a06964c2adb 50
wolfSSL 12:1a06964c2adb 51 SHA3_256 = 11, /* hash type unique */
wolfSSL 12:1a06964c2adb 52 SHA3_256_DIGEST_SIZE = 32,
wolfSSL 12:1a06964c2adb 53 SHA3_256_COUNT = 17,
wolfSSL 12:1a06964c2adb 54
wolfSSL 12:1a06964c2adb 55 SHA3_384 = 12, /* hash type unique */
wolfSSL 12:1a06964c2adb 56 SHA3_384_DIGEST_SIZE = 48,
wolfSSL 12:1a06964c2adb 57 SHA3_384_COUNT = 13,
wolfSSL 12:1a06964c2adb 58
wolfSSL 12:1a06964c2adb 59 SHA3_512 = 13, /* hash type unique */
wolfSSL 12:1a06964c2adb 60 SHA3_512_DIGEST_SIZE = 64,
wolfSSL 12:1a06964c2adb 61 SHA3_512_COUNT = 9
wolfSSL 12:1a06964c2adb 62 };
wolfSSL 12:1a06964c2adb 63
wolfSSL 12:1a06964c2adb 64
wolfSSL 12:1a06964c2adb 65 #ifdef WOLFSSL_XILINX_CRYPT
wolfSSL 12:1a06964c2adb 66 #include "wolfssl/wolfcrypt/port/xilinx/xil-sha3.h"
wolfSSL 12:1a06964c2adb 67 #else
wolfSSL 12:1a06964c2adb 68 /* Sha3 digest */
wolfSSL 12:1a06964c2adb 69 typedef struct Sha3 {
wolfSSL 12:1a06964c2adb 70 /* State data that is processed for each block. */
wolfSSL 12:1a06964c2adb 71 word64 s[25];
wolfSSL 12:1a06964c2adb 72 /* Unprocessed message data. */
wolfSSL 12:1a06964c2adb 73 byte t[200];
wolfSSL 12:1a06964c2adb 74 /* Index into unprocessed data to place next message byte. */
wolfSSL 12:1a06964c2adb 75 byte i;
wolfSSL 12:1a06964c2adb 76
wolfSSL 12:1a06964c2adb 77 void* heap;
wolfSSL 12:1a06964c2adb 78
wolfSSL 12:1a06964c2adb 79 #ifdef WOLFSSL_ASYNC_CRYPT
wolfSSL 12:1a06964c2adb 80 WC_ASYNC_DEV asyncDev;
wolfSSL 12:1a06964c2adb 81 #endif /* WOLFSSL_ASYNC_CRYPT */
wolfSSL 12:1a06964c2adb 82 } Sha3;
wolfSSL 12:1a06964c2adb 83 #endif
wolfSSL 12:1a06964c2adb 84 #endif /* HAVE_FIPS */
wolfSSL 12:1a06964c2adb 85
wolfSSL 12:1a06964c2adb 86 WOLFSSL_API int wc_InitSha3_224(Sha3*, void*, int);
wolfSSL 12:1a06964c2adb 87 WOLFSSL_API int wc_Sha3_224_Update(Sha3*, const byte*, word32);
wolfSSL 12:1a06964c2adb 88 WOLFSSL_API int wc_Sha3_224_Final(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 89 WOLFSSL_API void wc_Sha3_224_Free(Sha3*);
wolfSSL 12:1a06964c2adb 90 WOLFSSL_API int wc_Sha3_224_GetHash(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 91 WOLFSSL_API int wc_Sha3_224_Copy(Sha3* src, Sha3* dst);
wolfSSL 12:1a06964c2adb 92
wolfSSL 12:1a06964c2adb 93 WOLFSSL_API int wc_InitSha3_256(Sha3*, void*, int);
wolfSSL 12:1a06964c2adb 94 WOLFSSL_API int wc_Sha3_256_Update(Sha3*, const byte*, word32);
wolfSSL 12:1a06964c2adb 95 WOLFSSL_API int wc_Sha3_256_Final(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 96 WOLFSSL_API void wc_Sha3_256_Free(Sha3*);
wolfSSL 12:1a06964c2adb 97 WOLFSSL_API int wc_Sha3_256_GetHash(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 98 WOLFSSL_API int wc_Sha3_256_Copy(Sha3* src, Sha3* dst);
wolfSSL 12:1a06964c2adb 99
wolfSSL 12:1a06964c2adb 100 WOLFSSL_API int wc_InitSha3_384(Sha3*, void*, int);
wolfSSL 12:1a06964c2adb 101 WOLFSSL_API int wc_Sha3_384_Update(Sha3*, const byte*, word32);
wolfSSL 12:1a06964c2adb 102 WOLFSSL_API int wc_Sha3_384_Final(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 103 WOLFSSL_API void wc_Sha3_384_Free(Sha3*);
wolfSSL 12:1a06964c2adb 104 WOLFSSL_API int wc_Sha3_384_GetHash(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 105 WOLFSSL_API int wc_Sha3_384_Copy(Sha3* src, Sha3* dst);
wolfSSL 12:1a06964c2adb 106
wolfSSL 12:1a06964c2adb 107 WOLFSSL_API int wc_InitSha3_512(Sha3*, void*, int);
wolfSSL 12:1a06964c2adb 108 WOLFSSL_API int wc_Sha3_512_Update(Sha3*, const byte*, word32);
wolfSSL 12:1a06964c2adb 109 WOLFSSL_API int wc_Sha3_512_Final(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 110 WOLFSSL_API void wc_Sha3_512_Free(Sha3*);
wolfSSL 12:1a06964c2adb 111 WOLFSSL_API int wc_Sha3_512_GetHash(Sha3*, byte*);
wolfSSL 12:1a06964c2adb 112 WOLFSSL_API int wc_Sha3_512_Copy(Sha3* src, Sha3* dst);
wolfSSL 12:1a06964c2adb 113
wolfSSL 12:1a06964c2adb 114 #ifdef __cplusplus
wolfSSL 12:1a06964c2adb 115 } /* extern "C" */
wolfSSL 12:1a06964c2adb 116 #endif
wolfSSL 12:1a06964c2adb 117
wolfSSL 12:1a06964c2adb 118 #endif /* WOLFSSL_SHA3 */
wolfSSL 12:1a06964c2adb 119 #endif /* WOLF_CRYPT_SHA3_H */
wolfSSL 12:1a06964c2adb 120
wolfSSL 12:1a06964c2adb 121