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

Dependents:   OS

Committer:
sPymbed
Date:
Wed Nov 20 13:27:48 2019 +0000
Revision:
17:ff9d1e86ad5f
Parent:
15:117db924cf7c
removed: wolfcrypt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 15:117db924cf7c 1 /* sha.h
wolfSSL 15:117db924cf7c 2 *
wolfSSL 15:117db924cf7c 3 * Copyright (C) 2006-2017 wolfSSL Inc.
wolfSSL 15:117db924cf7c 4 *
wolfSSL 15:117db924cf7c 5 * This file is part of wolfSSL.
wolfSSL 15:117db924cf7c 6 *
wolfSSL 15:117db924cf7c 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 15:117db924cf7c 8 * it under the terms of the GNU General Public License as published by
wolfSSL 15:117db924cf7c 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 15:117db924cf7c 10 * (at your option) any later version.
wolfSSL 15:117db924cf7c 11 *
wolfSSL 15:117db924cf7c 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 15:117db924cf7c 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 15:117db924cf7c 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 15:117db924cf7c 15 * GNU General Public License for more details.
wolfSSL 15:117db924cf7c 16 *
wolfSSL 15:117db924cf7c 17 * You should have received a copy of the GNU General Public License
wolfSSL 15:117db924cf7c 18 * along with this program; if not, write to the Free Software
wolfSSL 15:117db924cf7c 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 15:117db924cf7c 20 */
wolfSSL 15:117db924cf7c 21
wolfSSL 15:117db924cf7c 22 /* sha.h for openssl */
wolfSSL 15:117db924cf7c 23
wolfSSL 15:117db924cf7c 24
wolfSSL 15:117db924cf7c 25 #ifndef WOLFSSL_SHA_H_
wolfSSL 15:117db924cf7c 26 #define WOLFSSL_SHA_H_
wolfSSL 15:117db924cf7c 27
wolfSSL 15:117db924cf7c 28 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 15:117db924cf7c 29 #include <wolfssl/wolfcrypt/types.h>
wolfSSL 15:117db924cf7c 30
wolfSSL 15:117db924cf7c 31 #ifdef WOLFSSL_PREFIX
wolfSSL 15:117db924cf7c 32 #include "prefix_sha.h"
wolfSSL 15:117db924cf7c 33 #endif
wolfSSL 15:117db924cf7c 34
wolfSSL 15:117db924cf7c 35 #ifdef __cplusplus
wolfSSL 15:117db924cf7c 36 extern "C" {
wolfSSL 15:117db924cf7c 37 #endif
wolfSSL 15:117db924cf7c 38
wolfSSL 15:117db924cf7c 39
wolfSSL 15:117db924cf7c 40 typedef struct WOLFSSL_SHA_CTX {
wolfSSL 15:117db924cf7c 41 /* big enough to hold wolfcrypt Sha, but check on init */
wolfSSL 15:117db924cf7c 42 void* holder[(112 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
wolfSSL 15:117db924cf7c 43 } WOLFSSL_SHA_CTX;
wolfSSL 15:117db924cf7c 44
wolfSSL 15:117db924cf7c 45 WOLFSSL_API int wolfSSL_SHA_Init(WOLFSSL_SHA_CTX*);
wolfSSL 15:117db924cf7c 46 WOLFSSL_API int wolfSSL_SHA_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long);
wolfSSL 15:117db924cf7c 47 WOLFSSL_API int wolfSSL_SHA_Final(unsigned char*, WOLFSSL_SHA_CTX*);
wolfSSL 15:117db924cf7c 48
wolfSSL 15:117db924cf7c 49 /* SHA1 points to above, shouldn't use SHA0 ever */
wolfSSL 15:117db924cf7c 50 WOLFSSL_API int wolfSSL_SHA1_Init(WOLFSSL_SHA_CTX*);
wolfSSL 15:117db924cf7c 51 WOLFSSL_API int wolfSSL_SHA1_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long);
wolfSSL 15:117db924cf7c 52 WOLFSSL_API int wolfSSL_SHA1_Final(unsigned char*, WOLFSSL_SHA_CTX*);
wolfSSL 15:117db924cf7c 53
wolfSSL 15:117db924cf7c 54 enum {
wolfSSL 15:117db924cf7c 55 SHA_DIGEST_LENGTH = 20
wolfSSL 15:117db924cf7c 56 };
wolfSSL 15:117db924cf7c 57
wolfSSL 15:117db924cf7c 58
wolfSSL 15:117db924cf7c 59 typedef WOLFSSL_SHA_CTX SHA_CTX;
wolfSSL 15:117db924cf7c 60
wolfSSL 15:117db924cf7c 61 #define SHA_Init wolfSSL_SHA_Init
wolfSSL 15:117db924cf7c 62 #define SHA_Update wolfSSL_SHA_Update
wolfSSL 15:117db924cf7c 63 #define SHA_Final wolfSSL_SHA_Final
wolfSSL 15:117db924cf7c 64
wolfSSL 15:117db924cf7c 65 #define SHA1_Init wolfSSL_SHA1_Init
wolfSSL 15:117db924cf7c 66 #define SHA1_Update wolfSSL_SHA1_Update
wolfSSL 15:117db924cf7c 67 #define SHA1_Final wolfSSL_SHA1_Final
wolfSSL 15:117db924cf7c 68
wolfSSL 15:117db924cf7c 69
wolfSSL 15:117db924cf7c 70 #ifdef WOLFSSL_SHA224
wolfSSL 15:117db924cf7c 71
wolfSSL 15:117db924cf7c 72 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256
wolfSSL 15:117db924cf7c 73 * struct are 16 byte aligned. Any derefrence to those elements after casting to
wolfSSL 15:117db924cf7c 74 * Sha224, is expected to also be 16 byte aligned addresses. */
wolfSSL 15:117db924cf7c 75 typedef struct WOLFSSL_SHA224_CTX {
wolfSSL 15:117db924cf7c 76 /* big enough to hold wolfcrypt Sha224, but check on init */
wolfSSL 15:117db924cf7c 77 ALIGN16 void* holder[(272 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
wolfSSL 15:117db924cf7c 78 } WOLFSSL_SHA224_CTX;
wolfSSL 15:117db924cf7c 79
wolfSSL 15:117db924cf7c 80 WOLFSSL_API int wolfSSL_SHA224_Init(WOLFSSL_SHA224_CTX*);
wolfSSL 15:117db924cf7c 81 WOLFSSL_API int wolfSSL_SHA224_Update(WOLFSSL_SHA224_CTX*, const void*,
wolfSSL 15:117db924cf7c 82 unsigned long);
wolfSSL 15:117db924cf7c 83 WOLFSSL_API int wolfSSL_SHA224_Final(unsigned char*, WOLFSSL_SHA224_CTX*);
wolfSSL 15:117db924cf7c 84
wolfSSL 15:117db924cf7c 85 enum {
wolfSSL 15:117db924cf7c 86 SHA224_DIGEST_LENGTH = 28
wolfSSL 15:117db924cf7c 87 };
wolfSSL 15:117db924cf7c 88
wolfSSL 15:117db924cf7c 89
wolfSSL 15:117db924cf7c 90 typedef WOLFSSL_SHA224_CTX SHA224_CTX;
wolfSSL 15:117db924cf7c 91
wolfSSL 15:117db924cf7c 92 #define SHA224_Init wolfSSL_SHA224_Init
wolfSSL 15:117db924cf7c 93 #define SHA224_Update wolfSSL_SHA224_Update
wolfSSL 15:117db924cf7c 94 #define SHA224_Final wolfSSL_SHA224_Final
wolfSSL 15:117db924cf7c 95
wolfSSL 15:117db924cf7c 96 #endif /* WOLFSSL_SHA224 */
wolfSSL 15:117db924cf7c 97
wolfSSL 15:117db924cf7c 98
wolfSSL 15:117db924cf7c 99 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256
wolfSSL 15:117db924cf7c 100 * struct are 16 byte aligned. Any derefrence to those elements after casting to
wolfSSL 15:117db924cf7c 101 * Sha256, is expected to also be 16 byte aligned addresses. */
wolfSSL 15:117db924cf7c 102 typedef struct WOLFSSL_SHA256_CTX {
wolfSSL 15:117db924cf7c 103 /* big enough to hold wolfcrypt Sha256, but check on init */
wolfSSL 15:117db924cf7c 104 ALIGN16 void* holder[(272 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
wolfSSL 15:117db924cf7c 105 } WOLFSSL_SHA256_CTX;
wolfSSL 15:117db924cf7c 106
wolfSSL 15:117db924cf7c 107 WOLFSSL_API int wolfSSL_SHA256_Init(WOLFSSL_SHA256_CTX*);
wolfSSL 15:117db924cf7c 108 WOLFSSL_API int wolfSSL_SHA256_Update(WOLFSSL_SHA256_CTX*, const void*,
wolfSSL 15:117db924cf7c 109 unsigned long);
wolfSSL 15:117db924cf7c 110 WOLFSSL_API int wolfSSL_SHA256_Final(unsigned char*, WOLFSSL_SHA256_CTX*);
wolfSSL 15:117db924cf7c 111
wolfSSL 15:117db924cf7c 112 enum {
wolfSSL 15:117db924cf7c 113 SHA256_DIGEST_LENGTH = 32
wolfSSL 15:117db924cf7c 114 };
wolfSSL 15:117db924cf7c 115
wolfSSL 15:117db924cf7c 116
wolfSSL 15:117db924cf7c 117 typedef WOLFSSL_SHA256_CTX SHA256_CTX;
wolfSSL 15:117db924cf7c 118
wolfSSL 15:117db924cf7c 119 #define SHA256_Init wolfSSL_SHA256_Init
wolfSSL 15:117db924cf7c 120 #define SHA256_Update wolfSSL_SHA256_Update
wolfSSL 15:117db924cf7c 121 #define SHA256_Final wolfSSL_SHA256_Final
wolfSSL 15:117db924cf7c 122 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS)
wolfSSL 15:117db924cf7c 123 /* SHA256 is only available in non-fips mode because of SHA256 enum in FIPS
wolfSSL 15:117db924cf7c 124 * build. */
wolfSSL 15:117db924cf7c 125 #define SHA256 wolfSSL_SHA256
wolfSSL 15:117db924cf7c 126 #endif
wolfSSL 15:117db924cf7c 127
wolfSSL 15:117db924cf7c 128
wolfSSL 15:117db924cf7c 129 #ifdef WOLFSSL_SHA384
wolfSSL 15:117db924cf7c 130
wolfSSL 15:117db924cf7c 131 typedef struct WOLFSSL_SHA384_CTX {
wolfSSL 15:117db924cf7c 132 /* big enough to hold wolfCrypt Sha384, but check on init */
wolfSSL 15:117db924cf7c 133 void* holder[(256 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
wolfSSL 15:117db924cf7c 134 } WOLFSSL_SHA384_CTX;
wolfSSL 15:117db924cf7c 135
wolfSSL 15:117db924cf7c 136 WOLFSSL_API int wolfSSL_SHA384_Init(WOLFSSL_SHA384_CTX*);
wolfSSL 15:117db924cf7c 137 WOLFSSL_API int wolfSSL_SHA384_Update(WOLFSSL_SHA384_CTX*, const void*,
wolfSSL 15:117db924cf7c 138 unsigned long);
wolfSSL 15:117db924cf7c 139 WOLFSSL_API int wolfSSL_SHA384_Final(unsigned char*, WOLFSSL_SHA384_CTX*);
wolfSSL 15:117db924cf7c 140
wolfSSL 15:117db924cf7c 141 enum {
wolfSSL 15:117db924cf7c 142 SHA384_DIGEST_LENGTH = 48
wolfSSL 15:117db924cf7c 143 };
wolfSSL 15:117db924cf7c 144
wolfSSL 15:117db924cf7c 145
wolfSSL 15:117db924cf7c 146 typedef WOLFSSL_SHA384_CTX SHA384_CTX;
wolfSSL 15:117db924cf7c 147
wolfSSL 15:117db924cf7c 148 #define SHA384_Init wolfSSL_SHA384_Init
wolfSSL 15:117db924cf7c 149 #define SHA384_Update wolfSSL_SHA384_Update
wolfSSL 15:117db924cf7c 150 #define SHA384_Final wolfSSL_SHA384_Final
wolfSSL 15:117db924cf7c 151 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS)
wolfSSL 15:117db924cf7c 152 /* SHA384 is only available in non-fips mode because of SHA384 enum in FIPS
wolfSSL 15:117db924cf7c 153 * build. */
wolfSSL 15:117db924cf7c 154 #define SHA384 wolfSSL_SHA384
wolfSSL 15:117db924cf7c 155 #endif
wolfSSL 15:117db924cf7c 156 #endif /* WOLFSSL_SHA384 */
wolfSSL 15:117db924cf7c 157
wolfSSL 15:117db924cf7c 158 #ifdef WOLFSSL_SHA512
wolfSSL 15:117db924cf7c 159
wolfSSL 15:117db924cf7c 160 typedef struct WOLFSSL_SHA512_CTX {
wolfSSL 15:117db924cf7c 161 /* big enough to hold wolfCrypt Sha384, but check on init */
wolfSSL 15:117db924cf7c 162 void* holder[(288 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
wolfSSL 15:117db924cf7c 163 } WOLFSSL_SHA512_CTX;
wolfSSL 15:117db924cf7c 164
wolfSSL 15:117db924cf7c 165 WOLFSSL_API int wolfSSL_SHA512_Init(WOLFSSL_SHA512_CTX*);
wolfSSL 15:117db924cf7c 166 WOLFSSL_API int wolfSSL_SHA512_Update(WOLFSSL_SHA512_CTX*, const void*,
wolfSSL 15:117db924cf7c 167 unsigned long);
wolfSSL 15:117db924cf7c 168 WOLFSSL_API int wolfSSL_SHA512_Final(unsigned char*, WOLFSSL_SHA512_CTX*);
wolfSSL 15:117db924cf7c 169
wolfSSL 15:117db924cf7c 170 enum {
wolfSSL 15:117db924cf7c 171 SHA512_DIGEST_LENGTH = 64
wolfSSL 15:117db924cf7c 172 };
wolfSSL 15:117db924cf7c 173
wolfSSL 15:117db924cf7c 174
wolfSSL 15:117db924cf7c 175 typedef WOLFSSL_SHA512_CTX SHA512_CTX;
wolfSSL 15:117db924cf7c 176
wolfSSL 15:117db924cf7c 177 #define SHA512_Init wolfSSL_SHA512_Init
wolfSSL 15:117db924cf7c 178 #define SHA512_Update wolfSSL_SHA512_Update
wolfSSL 15:117db924cf7c 179 #define SHA512_Final wolfSSL_SHA512_Final
wolfSSL 15:117db924cf7c 180 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS)
wolfSSL 15:117db924cf7c 181 /* SHA512 is only available in non-fips mode because of SHA512 enum in FIPS
wolfSSL 15:117db924cf7c 182 * build. */
wolfSSL 15:117db924cf7c 183 #define SHA512 wolfSSL_SHA512
wolfSSL 15:117db924cf7c 184 #endif
wolfSSL 15:117db924cf7c 185 #endif /* WOLFSSL_SHA512 */
wolfSSL 15:117db924cf7c 186
wolfSSL 15:117db924cf7c 187
wolfSSL 15:117db924cf7c 188
wolfSSL 15:117db924cf7c 189
wolfSSL 15:117db924cf7c 190 #ifdef __cplusplus
wolfSSL 15:117db924cf7c 191 } /* extern "C" */
wolfSSL 15:117db924cf7c 192 #endif
wolfSSL 15:117db924cf7c 193
wolfSSL 15:117db924cf7c 194
wolfSSL 15:117db924cf7c 195 #endif /* WOLFSSL_SHA_H_ */
wolfSSL 15:117db924cf7c 196
wolfSSL 15:117db924cf7c 197