wolf SSL / wolfSSL-TLS13-Beta

Fork of wolfSSL by wolf SSL

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sha.h Source File

sha.h

00001 /* sha.h for openssl */
00002 
00003 
00004 #ifndef WOLFSSL_SHA_H_
00005 #define WOLFSSL_SHA_H_
00006 
00007 #include <wolfssl/wolfcrypt/settings.h>
00008 #include <wolfssl/wolfcrypt/types.h>
00009 
00010 #ifdef WOLFSSL_PREFIX
00011 #include "prefix_sha.h"
00012 #endif
00013 
00014 #ifdef __cplusplus
00015     extern "C" {
00016 #endif
00017 
00018 
00019 typedef struct WOLFSSL_SHA_CTX {
00020     /* big enough to hold wolfcrypt Sha, but check on init */
00021     int holder[28 + (WC_ASYNC_DEV_SIZE / sizeof(int))];
00022 } WOLFSSL_SHA_CTX;
00023 
00024 WOLFSSL_API void wolfSSL_SHA_Init(WOLFSSL_SHA_CTX*);
00025 WOLFSSL_API void wolfSSL_SHA_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long);
00026 WOLFSSL_API void wolfSSL_SHA_Final(unsigned char*, WOLFSSL_SHA_CTX*);
00027 
00028 /* SHA1 points to above, shouldn't use SHA0 ever */
00029 WOLFSSL_API void wolfSSL_SHA1_Init(WOLFSSL_SHA_CTX*);
00030 WOLFSSL_API void wolfSSL_SHA1_Update(WOLFSSL_SHA_CTX*, const void*, unsigned long);
00031 WOLFSSL_API void wolfSSL_SHA1_Final(unsigned char*, WOLFSSL_SHA_CTX*);
00032 
00033 enum {
00034     SHA_DIGEST_LENGTH = 20
00035 };
00036 
00037 
00038 typedef WOLFSSL_SHA_CTX SHA_CTX;
00039 
00040 #define SHA_Init wolfSSL_SHA_Init
00041 #define SHA_Update wolfSSL_SHA_Update
00042 #define SHA_Final wolfSSL_SHA_Final
00043 
00044 #define SHA1_Init wolfSSL_SHA1_Init
00045 #define SHA1_Update wolfSSL_SHA1_Update
00046 #define SHA1_Final wolfSSL_SHA1_Final
00047 
00048 
00049 #ifdef WOLFSSL_SHA224
00050 
00051 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256
00052  * struct are 16 byte aligned. Any derefrence to those elements after casting to
00053  * Sha224, is expected to also be 16 byte aligned addresses.  */
00054 typedef struct WOLFSSL_SHA224_CTX {
00055     /* big enough to hold wolfcrypt Sha224, but check on init */
00056     ALIGN16 int holder[34 + (WC_ASYNC_DEV_SIZE / sizeof(int))];
00057 } WOLFSSL_SHA224_CTX;
00058 
00059 WOLFSSL_API void wolfSSL_SHA224_Init(WOLFSSL_SHA224_CTX*);
00060 WOLFSSL_API void wolfSSL_SHA224_Update(WOLFSSL_SHA224_CTX*, const void*,
00061                                      unsigned long);
00062 WOLFSSL_API void wolfSSL_SHA224_Final(unsigned char*, WOLFSSL_SHA224_CTX*);
00063 
00064 enum {
00065     SHA224_DIGEST_LENGTH = 28
00066 };
00067 
00068 
00069 typedef WOLFSSL_SHA224_CTX SHA224_CTX;
00070 
00071 #define SHA224_Init   wolfSSL_SHA224_Init
00072 #define SHA224_Update wolfSSL_SHA224_Update
00073 #define SHA224_Final  wolfSSL_SHA224_Final
00074 
00075 #endif /* WOLFSSL_SHA224 */
00076 
00077 
00078 /* Using ALIGN16 because when AES-NI is enabled digest and buffer in Sha256
00079  * struct are 16 byte aligned. Any derefrence to those elements after casting to
00080  * Sha256, is expected to also be 16 byte aligned addresses.  */
00081 typedef struct WOLFSSL_SHA256_CTX {
00082     /* big enough to hold wolfcrypt Sha256, but check on init */
00083     ALIGN16 int holder[34 + (WC_ASYNC_DEV_SIZE / sizeof(int))];
00084 } WOLFSSL_SHA256_CTX;
00085 
00086 WOLFSSL_API void wolfSSL_SHA256_Init(WOLFSSL_SHA256_CTX*);
00087 WOLFSSL_API void wolfSSL_SHA256_Update(WOLFSSL_SHA256_CTX*, const void*,
00088                                      unsigned long);
00089 WOLFSSL_API void wolfSSL_SHA256_Final(unsigned char*, WOLFSSL_SHA256_CTX*);
00090 
00091 enum {
00092     SHA256_DIGEST_LENGTH = 32
00093 };
00094 
00095 
00096 typedef WOLFSSL_SHA256_CTX SHA256_CTX;
00097 
00098 #define SHA256_Init   wolfSSL_SHA256_Init
00099 #define SHA256_Update wolfSSL_SHA256_Update
00100 #define SHA256_Final  wolfSSL_SHA256_Final
00101 
00102 
00103 #ifdef WOLFSSL_SHA384
00104 
00105 typedef struct WOLFSSL_SHA384_CTX {
00106     /* big enough to hold wolfCrypt Sha384, but check on init */
00107     long long holder[32 + (WC_ASYNC_DEV_SIZE / sizeof(long long))];
00108 } WOLFSSL_SHA384_CTX;
00109 
00110 WOLFSSL_API void wolfSSL_SHA384_Init(WOLFSSL_SHA384_CTX*);
00111 WOLFSSL_API void wolfSSL_SHA384_Update(WOLFSSL_SHA384_CTX*, const void*,
00112                                      unsigned long);
00113 WOLFSSL_API void wolfSSL_SHA384_Final(unsigned char*, WOLFSSL_SHA384_CTX*);
00114 
00115 enum {
00116     SHA384_DIGEST_LENGTH = 48
00117 };
00118 
00119 
00120 typedef WOLFSSL_SHA384_CTX SHA384_CTX;
00121 
00122 #define SHA384_Init   wolfSSL_SHA384_Init
00123 #define SHA384_Update wolfSSL_SHA384_Update
00124 #define SHA384_Final  wolfSSL_SHA384_Final
00125 
00126 #endif /* WOLFSSL_SHA384 */
00127 
00128 #ifdef WOLFSSL_SHA512
00129 
00130 typedef struct WOLFSSL_SHA512_CTX {
00131     /* big enough to hold wolfCrypt Sha384, but check on init */
00132     long long holder[36 + (WC_ASYNC_DEV_SIZE / sizeof(long long))];
00133 } WOLFSSL_SHA512_CTX;
00134 
00135 WOLFSSL_API void wolfSSL_SHA512_Init(WOLFSSL_SHA512_CTX*);
00136 WOLFSSL_API void wolfSSL_SHA512_Update(WOLFSSL_SHA512_CTX*, const void*,
00137                                      unsigned long);
00138 WOLFSSL_API void wolfSSL_SHA512_Final(unsigned char*, WOLFSSL_SHA512_CTX*);
00139 
00140 enum {
00141     SHA512_DIGEST_LENGTH = 64
00142 };
00143 
00144 
00145 typedef WOLFSSL_SHA512_CTX SHA512_CTX;
00146 
00147 #define SHA512_Init   wolfSSL_SHA512_Init
00148 #define SHA512_Update wolfSSL_SHA512_Update
00149 #define SHA512_Final  wolfSSL_SHA512_Final
00150 
00151 #endif /* WOLFSSL_SHA512 */
00152 
00153 
00154 
00155 
00156 #ifdef __cplusplus
00157     }  /* extern "C" */
00158 #endif
00159 
00160 
00161 #endif /* WOLFSSL_SHA_H_ */
00162 
00163