wolfSSL SSL/TLS library, support up to TLS1.3
Embed:
(wiki syntax)
Show/hide line numbers
sha.h
00001 /* sha.h 00002 * 00003 * Copyright (C) 2006-2017 wolfSSL Inc. 00004 * 00005 * This file is part of wolfSSL. 00006 * 00007 * wolfSSL is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2 of the License, or 00010 * (at your option) any later version. 00011 * 00012 * wolfSSL is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 00020 */ 00021 00022 /* sha.h for openssl */ 00023 00024 00025 #ifndef WOLFSSL_SHA_H_ 00026 #define WOLFSSL_SHA_H_ 00027 00028 #include <wolfssl/wolfcrypt/settings.h> 00029 #include <wolfssl/wolfcrypt/types.h> 00030 00031 #ifdef WOLFSSL_PREFIX 00032 #include "prefix_sha.h" 00033 #endif 00034 00035 #ifdef __cplusplus 00036 extern "C" { 00037 #endif 00038 00039 00040 typedef struct WOLFSSL_SHA_CTX { 00041 /* big enough to hold wolfcrypt Sha, but check on init */ 00042 void* holder[(112 + WC_ASYNC_DEV_SIZE) / sizeof(void*)]; 00043 } WOLFSSL_SHA_CTX; 00044 00045 WOLFSSL_API int wolfSSL_SHA_Init(WOLFSSL_SHA_CTX*); 00046 WOLFSSL_API int wolfSSL_SHA_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long); 00047 WOLFSSL_API int wolfSSL_SHA_Final(unsigned char*, WOLFSSL_SHA_CTX*); 00048 00049 /* SHA1 points to above, shouldn't use SHA0 ever */ 00050 WOLFSSL_API int wolfSSL_SHA1_Init(WOLFSSL_SHA_CTX*); 00051 WOLFSSL_API int wolfSSL_SHA1_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long); 00052 WOLFSSL_API int wolfSSL_SHA1_Final(unsigned char*, WOLFSSL_SHA_CTX*); 00053 00054 enum { 00055 SHA_DIGEST_LENGTH = 20 00056 }; 00057 00058 00059 typedef WOLFSSL_SHA_CTX SHA_CTX; 00060 00061 #define SHA_Init wolfSSL_SHA_Init 00062 #define SHA_Update wolfSSL_SHA_Update 00063 #define SHA_Final wolfSSL_SHA_Final 00064 00065 #define SHA1_Init wolfSSL_SHA1_Init 00066 #define SHA1_Update wolfSSL_SHA1_Update 00067 #define SHA1_Final wolfSSL_SHA1_Final 00068 00069 00070 #ifdef WOLFSSL_SHA224 00071 00072 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256 00073 * struct are 16 byte aligned. Any derefrence to those elements after casting to 00074 * Sha224, is expected to also be 16 byte aligned addresses. */ 00075 typedef struct WOLFSSL_SHA224_CTX { 00076 /* big enough to hold wolfcrypt Sha224, but check on init */ 00077 ALIGN16 void* holder[(272 + WC_ASYNC_DEV_SIZE) / sizeof(void*)]; 00078 } WOLFSSL_SHA224_CTX; 00079 00080 WOLFSSL_API int wolfSSL_SHA224_Init(WOLFSSL_SHA224_CTX*); 00081 WOLFSSL_API int wolfSSL_SHA224_Update(WOLFSSL_SHA224_CTX*, const void*, 00082 unsigned long); 00083 WOLFSSL_API int wolfSSL_SHA224_Final(unsigned char*, WOLFSSL_SHA224_CTX*); 00084 00085 enum { 00086 SHA224_DIGEST_LENGTH = 28 00087 }; 00088 00089 00090 typedef WOLFSSL_SHA224_CTX SHA224_CTX; 00091 00092 #define SHA224_Init wolfSSL_SHA224_Init 00093 #define SHA224_Update wolfSSL_SHA224_Update 00094 #define SHA224_Final wolfSSL_SHA224_Final 00095 00096 #endif /* WOLFSSL_SHA224 */ 00097 00098 00099 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256 00100 * struct are 16 byte aligned. Any derefrence to those elements after casting to 00101 * Sha256, is expected to also be 16 byte aligned addresses. */ 00102 typedef struct WOLFSSL_SHA256_CTX { 00103 /* big enough to hold wolfcrypt Sha256, but check on init */ 00104 ALIGN16 void* holder[(272 + WC_ASYNC_DEV_SIZE) / sizeof(void*)]; 00105 } WOLFSSL_SHA256_CTX; 00106 00107 WOLFSSL_API int wolfSSL_SHA256_Init(WOLFSSL_SHA256_CTX*); 00108 WOLFSSL_API int wolfSSL_SHA256_Update(WOLFSSL_SHA256_CTX*, const void*, 00109 unsigned long); 00110 WOLFSSL_API int wolfSSL_SHA256_Final(unsigned char*, WOLFSSL_SHA256_CTX*); 00111 00112 enum { 00113 SHA256_DIGEST_LENGTH = 32 00114 }; 00115 00116 00117 typedef WOLFSSL_SHA256_CTX SHA256_CTX; 00118 00119 #define SHA256_Init wolfSSL_SHA256_Init 00120 #define SHA256_Update wolfSSL_SHA256_Update 00121 #define SHA256_Final wolfSSL_SHA256_Final 00122 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS) 00123 /* SHA256 is only available in non-fips mode because of SHA256 enum in FIPS 00124 * build. */ 00125 #define SHA256 wolfSSL_SHA256 00126 #endif 00127 00128 00129 #ifdef WOLFSSL_SHA384 00130 00131 typedef struct WOLFSSL_SHA384_CTX { 00132 /* big enough to hold wolfCrypt Sha384, but check on init */ 00133 void* holder[(256 + WC_ASYNC_DEV_SIZE) / sizeof(void*)]; 00134 } WOLFSSL_SHA384_CTX; 00135 00136 WOLFSSL_API int wolfSSL_SHA384_Init(WOLFSSL_SHA384_CTX*); 00137 WOLFSSL_API int wolfSSL_SHA384_Update(WOLFSSL_SHA384_CTX*, const void*, 00138 unsigned long); 00139 WOLFSSL_API int wolfSSL_SHA384_Final(unsigned char*, WOLFSSL_SHA384_CTX*); 00140 00141 enum { 00142 SHA384_DIGEST_LENGTH = 48 00143 }; 00144 00145 00146 typedef WOLFSSL_SHA384_CTX SHA384_CTX; 00147 00148 #define SHA384_Init wolfSSL_SHA384_Init 00149 #define SHA384_Update wolfSSL_SHA384_Update 00150 #define SHA384_Final wolfSSL_SHA384_Final 00151 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS) 00152 /* SHA384 is only available in non-fips mode because of SHA384 enum in FIPS 00153 * build. */ 00154 #define SHA384 wolfSSL_SHA384 00155 #endif 00156 #endif /* WOLFSSL_SHA384 */ 00157 00158 #ifdef WOLFSSL_SHA512 00159 00160 typedef struct WOLFSSL_SHA512_CTX { 00161 /* big enough to hold wolfCrypt Sha384, but check on init */ 00162 void* holder[(288 + WC_ASYNC_DEV_SIZE) / sizeof(void*)]; 00163 } WOLFSSL_SHA512_CTX; 00164 00165 WOLFSSL_API int wolfSSL_SHA512_Init(WOLFSSL_SHA512_CTX*); 00166 WOLFSSL_API int wolfSSL_SHA512_Update(WOLFSSL_SHA512_CTX*, const void*, 00167 unsigned long); 00168 WOLFSSL_API int wolfSSL_SHA512_Final(unsigned char*, WOLFSSL_SHA512_CTX*); 00169 00170 enum { 00171 SHA512_DIGEST_LENGTH = 64 00172 }; 00173 00174 00175 typedef WOLFSSL_SHA512_CTX SHA512_CTX; 00176 00177 #define SHA512_Init wolfSSL_SHA512_Init 00178 #define SHA512_Update wolfSSL_SHA512_Update 00179 #define SHA512_Final wolfSSL_SHA512_Final 00180 #if defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS) 00181 /* SHA512 is only available in non-fips mode because of SHA512 enum in FIPS 00182 * build. */ 00183 #define SHA512 wolfSSL_SHA512 00184 #endif 00185 #endif /* WOLFSSL_SHA512 */ 00186 00187 00188 00189 00190 #ifdef __cplusplus 00191 } /* extern "C" */ 00192 #endif 00193 00194 00195 #endif /* WOLFSSL_SHA_H_ */ 00196 00197
Generated on Wed Jul 13 2022 01:38:42 by 1.7.2