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

Dependents:   OS

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sha.h Source File

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