TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

Committer:
dflet
Date:
Fri Sep 11 15:38:33 2015 +0000
Revision:
1:e448e81c416f
Parent:
0:400d8e75a8d0
Removed some debud.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:400d8e75a8d0 1 /**
dflet 0:400d8e75a8d0 2 * \file sha512.h
dflet 0:400d8e75a8d0 3 *
dflet 0:400d8e75a8d0 4 * \brief SHA-384 and SHA-512 cryptographic hash function
dflet 0:400d8e75a8d0 5 *
dflet 0:400d8e75a8d0 6 * Copyright (C) 2006-2014, ARM Limited, All Rights Reserved
dflet 0:400d8e75a8d0 7 *
dflet 0:400d8e75a8d0 8 * This file is part of mbed TLS (https://tls.mbed.org)
dflet 0:400d8e75a8d0 9 *
dflet 0:400d8e75a8d0 10 * This program is free software; you can redistribute it and/or modify
dflet 0:400d8e75a8d0 11 * it under the terms of the GNU General Public License as published by
dflet 0:400d8e75a8d0 12 * the Free Software Foundation; either version 2 of the License, or
dflet 0:400d8e75a8d0 13 * (at your option) any later version.
dflet 0:400d8e75a8d0 14 *
dflet 0:400d8e75a8d0 15 * This program is distributed in the hope that it will be useful,
dflet 0:400d8e75a8d0 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dflet 0:400d8e75a8d0 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dflet 0:400d8e75a8d0 18 * GNU General Public License for more details.
dflet 0:400d8e75a8d0 19 *
dflet 0:400d8e75a8d0 20 * You should have received a copy of the GNU General Public License along
dflet 0:400d8e75a8d0 21 * with this program; if not, write to the Free Software Foundation, Inc.,
dflet 0:400d8e75a8d0 22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
dflet 0:400d8e75a8d0 23 */
dflet 0:400d8e75a8d0 24 #ifndef POLARSSL_SHA512_H
dflet 0:400d8e75a8d0 25 #define POLARSSL_SHA512_H
dflet 0:400d8e75a8d0 26
dflet 0:400d8e75a8d0 27 #if !defined(POLARSSL_CONFIG_FILE)
dflet 0:400d8e75a8d0 28 #include "config.h"
dflet 0:400d8e75a8d0 29 #else
dflet 0:400d8e75a8d0 30 #include POLARSSL_CONFIG_FILE
dflet 0:400d8e75a8d0 31 #endif
dflet 0:400d8e75a8d0 32
dflet 0:400d8e75a8d0 33 #include <stddef.h>
dflet 0:400d8e75a8d0 34
dflet 0:400d8e75a8d0 35 #if defined(_MSC_VER) || defined(__WATCOMC__)
dflet 0:400d8e75a8d0 36 typedef unsigned __int64 uint64_t;
dflet 0:400d8e75a8d0 37 #else
dflet 0:400d8e75a8d0 38 #include <inttypes.h>
dflet 0:400d8e75a8d0 39 #endif
dflet 0:400d8e75a8d0 40
dflet 0:400d8e75a8d0 41 #define POLARSSL_ERR_SHA512_FILE_IO_ERROR -0x007A /**< Read/write error in file. */
dflet 0:400d8e75a8d0 42
dflet 0:400d8e75a8d0 43 #if !defined(POLARSSL_SHA512_ALT)
dflet 0:400d8e75a8d0 44 // Regular implementation
dflet 0:400d8e75a8d0 45 //
dflet 0:400d8e75a8d0 46
dflet 0:400d8e75a8d0 47 #ifdef __cplusplus
dflet 0:400d8e75a8d0 48 extern "C" {
dflet 0:400d8e75a8d0 49 #endif
dflet 0:400d8e75a8d0 50
dflet 0:400d8e75a8d0 51 /**
dflet 0:400d8e75a8d0 52 * \brief SHA-512 context structure
dflet 0:400d8e75a8d0 53 */
dflet 0:400d8e75a8d0 54 typedef struct
dflet 0:400d8e75a8d0 55 {
dflet 0:400d8e75a8d0 56 uint64_t total[2]; /*!< number of bytes processed */
dflet 0:400d8e75a8d0 57 uint64_t state[8]; /*!< intermediate digest state */
dflet 0:400d8e75a8d0 58 unsigned char buffer[128]; /*!< data block being processed */
dflet 0:400d8e75a8d0 59
dflet 0:400d8e75a8d0 60 unsigned char ipad[128]; /*!< HMAC: inner padding */
dflet 0:400d8e75a8d0 61 unsigned char opad[128]; /*!< HMAC: outer padding */
dflet 0:400d8e75a8d0 62 int is384; /*!< 0 => SHA-512, else SHA-384 */
dflet 0:400d8e75a8d0 63 }
dflet 0:400d8e75a8d0 64 sha512_context;
dflet 0:400d8e75a8d0 65
dflet 0:400d8e75a8d0 66 /**
dflet 0:400d8e75a8d0 67 * \brief Initialize SHA-512 context
dflet 0:400d8e75a8d0 68 *
dflet 0:400d8e75a8d0 69 * \param ctx SHA-512 context to be initialized
dflet 0:400d8e75a8d0 70 */
dflet 0:400d8e75a8d0 71 void sha512_init( sha512_context *ctx );
dflet 0:400d8e75a8d0 72
dflet 0:400d8e75a8d0 73 /**
dflet 0:400d8e75a8d0 74 * \brief Clear SHA-512 context
dflet 0:400d8e75a8d0 75 *
dflet 0:400d8e75a8d0 76 * \param ctx SHA-512 context to be cleared
dflet 0:400d8e75a8d0 77 */
dflet 0:400d8e75a8d0 78 void sha512_free( sha512_context *ctx );
dflet 0:400d8e75a8d0 79
dflet 0:400d8e75a8d0 80 /**
dflet 0:400d8e75a8d0 81 * \brief SHA-512 context setup
dflet 0:400d8e75a8d0 82 *
dflet 0:400d8e75a8d0 83 * \param ctx context to be initialized
dflet 0:400d8e75a8d0 84 * \param is384 0 = use SHA512, 1 = use SHA384
dflet 0:400d8e75a8d0 85 */
dflet 0:400d8e75a8d0 86 void sha512_starts( sha512_context *ctx, int is384 );
dflet 0:400d8e75a8d0 87
dflet 0:400d8e75a8d0 88 /**
dflet 0:400d8e75a8d0 89 * \brief SHA-512 process buffer
dflet 0:400d8e75a8d0 90 *
dflet 0:400d8e75a8d0 91 * \param ctx SHA-512 context
dflet 0:400d8e75a8d0 92 * \param input buffer holding the data
dflet 0:400d8e75a8d0 93 * \param ilen length of the input data
dflet 0:400d8e75a8d0 94 */
dflet 0:400d8e75a8d0 95 void sha512_update( sha512_context *ctx, const unsigned char *input,
dflet 0:400d8e75a8d0 96 size_t ilen );
dflet 0:400d8e75a8d0 97
dflet 0:400d8e75a8d0 98 /**
dflet 0:400d8e75a8d0 99 * \brief SHA-512 final digest
dflet 0:400d8e75a8d0 100 *
dflet 0:400d8e75a8d0 101 * \param ctx SHA-512 context
dflet 0:400d8e75a8d0 102 * \param output SHA-384/512 checksum result
dflet 0:400d8e75a8d0 103 */
dflet 0:400d8e75a8d0 104 void sha512_finish( sha512_context *ctx, unsigned char output[64] );
dflet 0:400d8e75a8d0 105
dflet 0:400d8e75a8d0 106 #ifdef __cplusplus
dflet 0:400d8e75a8d0 107 }
dflet 0:400d8e75a8d0 108 #endif
dflet 0:400d8e75a8d0 109
dflet 0:400d8e75a8d0 110 #else /* POLARSSL_SHA512_ALT */
dflet 0:400d8e75a8d0 111 #include "sha512_alt.h"
dflet 0:400d8e75a8d0 112 #endif /* POLARSSL_SHA512_ALT */
dflet 0:400d8e75a8d0 113
dflet 0:400d8e75a8d0 114 #ifdef __cplusplus
dflet 0:400d8e75a8d0 115 extern "C" {
dflet 0:400d8e75a8d0 116 #endif
dflet 0:400d8e75a8d0 117
dflet 0:400d8e75a8d0 118 /**
dflet 0:400d8e75a8d0 119 * \brief Output = SHA-512( input buffer )
dflet 0:400d8e75a8d0 120 *
dflet 0:400d8e75a8d0 121 * \param input buffer holding the data
dflet 0:400d8e75a8d0 122 * \param ilen length of the input data
dflet 0:400d8e75a8d0 123 * \param output SHA-384/512 checksum result
dflet 0:400d8e75a8d0 124 * \param is384 0 = use SHA512, 1 = use SHA384
dflet 0:400d8e75a8d0 125 */
dflet 0:400d8e75a8d0 126 void sha512( const unsigned char *input, size_t ilen,
dflet 0:400d8e75a8d0 127 unsigned char output[64], int is384 );
dflet 0:400d8e75a8d0 128
dflet 0:400d8e75a8d0 129 /**
dflet 0:400d8e75a8d0 130 * \brief Output = SHA-512( file contents )
dflet 0:400d8e75a8d0 131 *
dflet 0:400d8e75a8d0 132 * \param path input file name
dflet 0:400d8e75a8d0 133 * \param output SHA-384/512 checksum result
dflet 0:400d8e75a8d0 134 * \param is384 0 = use SHA512, 1 = use SHA384
dflet 0:400d8e75a8d0 135 *
dflet 0:400d8e75a8d0 136 * \return 0 if successful, or POLARSSL_ERR_SHA512_FILE_IO_ERROR
dflet 0:400d8e75a8d0 137 */
dflet 0:400d8e75a8d0 138 int sha512_file( const char *path, unsigned char output[64], int is384 );
dflet 0:400d8e75a8d0 139
dflet 0:400d8e75a8d0 140 /**
dflet 0:400d8e75a8d0 141 * \brief SHA-512 HMAC context setup
dflet 0:400d8e75a8d0 142 *
dflet 0:400d8e75a8d0 143 * \param ctx HMAC context to be initialized
dflet 0:400d8e75a8d0 144 * \param is384 0 = use SHA512, 1 = use SHA384
dflet 0:400d8e75a8d0 145 * \param key HMAC secret key
dflet 0:400d8e75a8d0 146 * \param keylen length of the HMAC key
dflet 0:400d8e75a8d0 147 */
dflet 0:400d8e75a8d0 148 void sha512_hmac_starts( sha512_context *ctx, const unsigned char *key,
dflet 0:400d8e75a8d0 149 size_t keylen, int is384 );
dflet 0:400d8e75a8d0 150
dflet 0:400d8e75a8d0 151 /**
dflet 0:400d8e75a8d0 152 * \brief SHA-512 HMAC process buffer
dflet 0:400d8e75a8d0 153 *
dflet 0:400d8e75a8d0 154 * \param ctx HMAC context
dflet 0:400d8e75a8d0 155 * \param input buffer holding the data
dflet 0:400d8e75a8d0 156 * \param ilen length of the input data
dflet 0:400d8e75a8d0 157 */
dflet 0:400d8e75a8d0 158 void sha512_hmac_update( sha512_context *ctx, const unsigned char *input,
dflet 0:400d8e75a8d0 159 size_t ilen );
dflet 0:400d8e75a8d0 160
dflet 0:400d8e75a8d0 161 /**
dflet 0:400d8e75a8d0 162 * \brief SHA-512 HMAC final digest
dflet 0:400d8e75a8d0 163 *
dflet 0:400d8e75a8d0 164 * \param ctx HMAC context
dflet 0:400d8e75a8d0 165 * \param output SHA-384/512 HMAC checksum result
dflet 0:400d8e75a8d0 166 */
dflet 0:400d8e75a8d0 167 void sha512_hmac_finish( sha512_context *ctx, unsigned char output[64] );
dflet 0:400d8e75a8d0 168
dflet 0:400d8e75a8d0 169 /**
dflet 0:400d8e75a8d0 170 * \brief SHA-512 HMAC context reset
dflet 0:400d8e75a8d0 171 *
dflet 0:400d8e75a8d0 172 * \param ctx HMAC context to be reset
dflet 0:400d8e75a8d0 173 */
dflet 0:400d8e75a8d0 174 void sha512_hmac_reset( sha512_context *ctx );
dflet 0:400d8e75a8d0 175
dflet 0:400d8e75a8d0 176 /**
dflet 0:400d8e75a8d0 177 * \brief Output = HMAC-SHA-512( hmac key, input buffer )
dflet 0:400d8e75a8d0 178 *
dflet 0:400d8e75a8d0 179 * \param key HMAC secret key
dflet 0:400d8e75a8d0 180 * \param keylen length of the HMAC key
dflet 0:400d8e75a8d0 181 * \param input buffer holding the data
dflet 0:400d8e75a8d0 182 * \param ilen length of the input data
dflet 0:400d8e75a8d0 183 * \param output HMAC-SHA-384/512 result
dflet 0:400d8e75a8d0 184 * \param is384 0 = use SHA512, 1 = use SHA384
dflet 0:400d8e75a8d0 185 */
dflet 0:400d8e75a8d0 186 void sha512_hmac( const unsigned char *key, size_t keylen,
dflet 0:400d8e75a8d0 187 const unsigned char *input, size_t ilen,
dflet 0:400d8e75a8d0 188 unsigned char output[64], int is384 );
dflet 0:400d8e75a8d0 189
dflet 0:400d8e75a8d0 190 /**
dflet 0:400d8e75a8d0 191 * \brief Checkup routine
dflet 0:400d8e75a8d0 192 *
dflet 0:400d8e75a8d0 193 * \return 0 if successful, or 1 if the test failed
dflet 0:400d8e75a8d0 194 */
dflet 0:400d8e75a8d0 195 int sha512_self_test( int verbose );
dflet 0:400d8e75a8d0 196
dflet 0:400d8e75a8d0 197 /* Internal use */
dflet 0:400d8e75a8d0 198 void sha512_process( sha512_context *ctx, const unsigned char data[128] );
dflet 0:400d8e75a8d0 199
dflet 0:400d8e75a8d0 200 #ifdef __cplusplus
dflet 0:400d8e75a8d0 201 }
dflet 0:400d8e75a8d0 202 #endif
dflet 0:400d8e75a8d0 203
dflet 0:400d8e75a8d0 204 #endif /* sha512.h */
dflet 0:400d8e75a8d0 205