Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.
sha512.h
00001 /** 00002 * \file sha512.h 00003 * 00004 * \brief SHA-384 and SHA-512 cryptographic hash function 00005 * 00006 * Copyright (C) 2006-2014, ARM Limited, All Rights Reserved 00007 * 00008 * This file is part of mbed TLS (https://tls.mbed.org) 00009 * 00010 * This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU General Public License along 00021 * with this program; if not, write to the Free Software Foundation, Inc., 00022 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00023 */ 00024 #ifndef POLARSSL_SHA512_H 00025 #define POLARSSL_SHA512_H 00026 00027 #if !defined(POLARSSL_CONFIG_FILE) 00028 #include "config.h" 00029 #else 00030 #include POLARSSL_CONFIG_FILE 00031 #endif 00032 00033 #include <stddef.h> 00034 00035 #if defined(_MSC_VER) || defined(__WATCOMC__) 00036 typedef unsigned __int64 uint64_t; 00037 #else 00038 #include <inttypes.h> 00039 #endif 00040 00041 #define POLARSSL_ERR_SHA512_FILE_IO_ERROR -0x007A /**< Read/write error in file. */ 00042 00043 #if !defined(POLARSSL_SHA512_ALT) 00044 // Regular implementation 00045 // 00046 00047 #ifdef __cplusplus 00048 extern "C" { 00049 #endif 00050 00051 /** 00052 * \brief SHA-512 context structure 00053 */ 00054 typedef struct 00055 { 00056 uint64_t total[2]; /*!< number of bytes processed */ 00057 uint64_t state[8]; /*!< intermediate digest state */ 00058 unsigned char buffer[128]; /*!< data block being processed */ 00059 00060 unsigned char ipad[128]; /*!< HMAC: inner padding */ 00061 unsigned char opad[128]; /*!< HMAC: outer padding */ 00062 int is384 ; /*!< 0 => SHA-512, else SHA-384 */ 00063 } 00064 sha512_context; 00065 00066 /** 00067 * \brief Initialize SHA-512 context 00068 * 00069 * \param ctx SHA-512 context to be initialized 00070 */ 00071 void sha512_init( sha512_context *ctx ); 00072 00073 /** 00074 * \brief Clear SHA-512 context 00075 * 00076 * \param ctx SHA-512 context to be cleared 00077 */ 00078 void sha512_free( sha512_context *ctx ); 00079 00080 /** 00081 * \brief SHA-512 context setup 00082 * 00083 * \param ctx context to be initialized 00084 * \param is384 0 = use SHA512, 1 = use SHA384 00085 */ 00086 void sha512_starts( sha512_context *ctx, int is384 ); 00087 00088 /** 00089 * \brief SHA-512 process buffer 00090 * 00091 * \param ctx SHA-512 context 00092 * \param input buffer holding the data 00093 * \param ilen length of the input data 00094 */ 00095 void sha512_update( sha512_context *ctx, const unsigned char *input, 00096 size_t ilen ); 00097 00098 /** 00099 * \brief SHA-512 final digest 00100 * 00101 * \param ctx SHA-512 context 00102 * \param output SHA-384/512 checksum result 00103 */ 00104 void sha512_finish( sha512_context *ctx, unsigned char output[64] ); 00105 00106 #ifdef __cplusplus 00107 } 00108 #endif 00109 00110 #else /* POLARSSL_SHA512_ALT */ 00111 #include "sha512_alt.h" 00112 #endif /* POLARSSL_SHA512_ALT */ 00113 00114 #ifdef __cplusplus 00115 extern "C" { 00116 #endif 00117 00118 /** 00119 * \brief Output = SHA-512( input buffer ) 00120 * 00121 * \param input buffer holding the data 00122 * \param ilen length of the input data 00123 * \param output SHA-384/512 checksum result 00124 * \param is384 0 = use SHA512, 1 = use SHA384 00125 */ 00126 void sha512( const unsigned char *input, size_t ilen, 00127 unsigned char output[64], int is384 ); 00128 00129 /** 00130 * \brief Output = SHA-512( file contents ) 00131 * 00132 * \param path input file name 00133 * \param output SHA-384/512 checksum result 00134 * \param is384 0 = use SHA512, 1 = use SHA384 00135 * 00136 * \return 0 if successful, or POLARSSL_ERR_SHA512_FILE_IO_ERROR 00137 */ 00138 int sha512_file( const char *path, unsigned char output[64], int is384 ); 00139 00140 /** 00141 * \brief SHA-512 HMAC context setup 00142 * 00143 * \param ctx HMAC context to be initialized 00144 * \param is384 0 = use SHA512, 1 = use SHA384 00145 * \param key HMAC secret key 00146 * \param keylen length of the HMAC key 00147 */ 00148 void sha512_hmac_starts( sha512_context *ctx, const unsigned char *key, 00149 size_t keylen, int is384 ); 00150 00151 /** 00152 * \brief SHA-512 HMAC process buffer 00153 * 00154 * \param ctx HMAC context 00155 * \param input buffer holding the data 00156 * \param ilen length of the input data 00157 */ 00158 void sha512_hmac_update( sha512_context *ctx, const unsigned char *input, 00159 size_t ilen ); 00160 00161 /** 00162 * \brief SHA-512 HMAC final digest 00163 * 00164 * \param ctx HMAC context 00165 * \param output SHA-384/512 HMAC checksum result 00166 */ 00167 void sha512_hmac_finish( sha512_context *ctx, unsigned char output[64] ); 00168 00169 /** 00170 * \brief SHA-512 HMAC context reset 00171 * 00172 * \param ctx HMAC context to be reset 00173 */ 00174 void sha512_hmac_reset( sha512_context *ctx ); 00175 00176 /** 00177 * \brief Output = HMAC-SHA-512( hmac key, input buffer ) 00178 * 00179 * \param key HMAC secret key 00180 * \param keylen length of the HMAC key 00181 * \param input buffer holding the data 00182 * \param ilen length of the input data 00183 * \param output HMAC-SHA-384/512 result 00184 * \param is384 0 = use SHA512, 1 = use SHA384 00185 */ 00186 void sha512_hmac( const unsigned char *key, size_t keylen, 00187 const unsigned char *input, size_t ilen, 00188 unsigned char output[64], int is384 ); 00189 00190 /** 00191 * \brief Checkup routine 00192 * 00193 * \return 0 if successful, or 1 if the test failed 00194 */ 00195 int sha512_self_test( int verbose ); 00196 00197 /* Internal use */ 00198 void sha512_process( sha512_context *ctx, const unsigned char data[128] ); 00199 00200 #ifdef __cplusplus 00201 } 00202 #endif 00203 00204 #endif /* sha512.h */ 00205
Generated on Tue Jul 12 2022 22:22:38 by 1.7.2