cyassl re-port with cellular comms, PSK test

Dependencies:   VodafoneUSBModem_bleedingedge2 mbed-rtos mbed-src

Committer:
ashleymills
Date:
Fri Apr 26 16:54:58 2013 +0000
Revision:
0:e979170e02e7
Basic operation of SSL with PSK working for cellular.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:e979170e02e7 1 /* evp.h
ashleymills 0:e979170e02e7 2 *
ashleymills 0:e979170e02e7 3 * Copyright (C) 2012 Sawtooth Consulting Ltd.
ashleymills 0:e979170e02e7 4 *
ashleymills 0:e979170e02e7 5 * This file is part of CyaSSL.
ashleymills 0:e979170e02e7 6 *
ashleymills 0:e979170e02e7 7 * CyaSSL is free software; you can redistribute it and/or modify
ashleymills 0:e979170e02e7 8 * it under the terms of the GNU General Public License as published by
ashleymills 0:e979170e02e7 9 * the Free Software Foundation; either version 2 of the License, or
ashleymills 0:e979170e02e7 10 * (at your option) any later version.
ashleymills 0:e979170e02e7 11 *
ashleymills 0:e979170e02e7 12 * CyaSSL is distributed in the hope that it will be useful,
ashleymills 0:e979170e02e7 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ashleymills 0:e979170e02e7 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ashleymills 0:e979170e02e7 15 * GNU General Public License for more details.
ashleymills 0:e979170e02e7 16 *
ashleymills 0:e979170e02e7 17 * You should have received a copy of the GNU General Public License
ashleymills 0:e979170e02e7 18 * along with this program; if not, write to the Free Software
ashleymills 0:e979170e02e7 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
ashleymills 0:e979170e02e7 20 */
ashleymills 0:e979170e02e7 21
ashleymills 0:e979170e02e7 22
ashleymills 0:e979170e02e7 23 /* evp.h defines mini evp openssl compatibility layer
ashleymills 0:e979170e02e7 24 *
ashleymills 0:e979170e02e7 25 */
ashleymills 0:e979170e02e7 26
ashleymills 0:e979170e02e7 27
ashleymills 0:e979170e02e7 28 #ifndef CYASSL_EVP_H_
ashleymills 0:e979170e02e7 29 #define CYASSL_EVP_H_
ashleymills 0:e979170e02e7 30
ashleymills 0:e979170e02e7 31 #include <cyassl/ctaocrypt/settings.h>
ashleymills 0:e979170e02e7 32
ashleymills 0:e979170e02e7 33 #ifdef YASSL_PREFIX
ashleymills 0:e979170e02e7 34 #include "prefix_evp.h"
ashleymills 0:e979170e02e7 35 #endif
ashleymills 0:e979170e02e7 36
ashleymills 0:e979170e02e7 37 #include <cyassl/openssl/md5.h>
ashleymills 0:e979170e02e7 38 #include <cyassl/openssl/sha.h>
ashleymills 0:e979170e02e7 39 #include <cyassl/openssl/ripemd.h>
ashleymills 0:e979170e02e7 40 #include <cyassl/openssl/rsa.h>
ashleymills 0:e979170e02e7 41 #include <cyassl/openssl/dsa.h>
ashleymills 0:e979170e02e7 42
ashleymills 0:e979170e02e7 43 #include <cyassl/ctaocrypt/aes.h>
ashleymills 0:e979170e02e7 44 #include <cyassl/ctaocrypt/des3.h>
ashleymills 0:e979170e02e7 45 #include <cyassl/ctaocrypt/arc4.h>
ashleymills 0:e979170e02e7 46
ashleymills 0:e979170e02e7 47
ashleymills 0:e979170e02e7 48 #ifdef __cplusplus
ashleymills 0:e979170e02e7 49 extern "C" {
ashleymills 0:e979170e02e7 50 #endif
ashleymills 0:e979170e02e7 51
ashleymills 0:e979170e02e7 52 typedef char CYASSL_EVP_MD;
ashleymills 0:e979170e02e7 53 typedef char CYASSL_EVP_CIPHER;
ashleymills 0:e979170e02e7 54
ashleymills 0:e979170e02e7 55 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_md5(void);
ashleymills 0:e979170e02e7 56 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_sha1(void);
ashleymills 0:e979170e02e7 57 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_sha256(void);
ashleymills 0:e979170e02e7 58 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_sha384(void);
ashleymills 0:e979170e02e7 59 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_sha512(void);
ashleymills 0:e979170e02e7 60 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_ripemd160(void);
ashleymills 0:e979170e02e7 61
ashleymills 0:e979170e02e7 62 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_128_cbc(void);
ashleymills 0:e979170e02e7 63 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_192_cbc(void);
ashleymills 0:e979170e02e7 64 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_256_cbc(void);
ashleymills 0:e979170e02e7 65 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_128_ctr(void);
ashleymills 0:e979170e02e7 66 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_192_ctr(void);
ashleymills 0:e979170e02e7 67 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_aes_256_ctr(void);
ashleymills 0:e979170e02e7 68 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_des_cbc(void);
ashleymills 0:e979170e02e7 69 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_des_ede3_cbc(void);
ashleymills 0:e979170e02e7 70 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_rc4(void);
ashleymills 0:e979170e02e7 71 CYASSL_API const CYASSL_EVP_CIPHER* CyaSSL_EVP_enc_null(void);
ashleymills 0:e979170e02e7 72
ashleymills 0:e979170e02e7 73
ashleymills 0:e979170e02e7 74 typedef union {
ashleymills 0:e979170e02e7 75 CYASSL_MD5_CTX md5;
ashleymills 0:e979170e02e7 76 CYASSL_SHA_CTX sha;
ashleymills 0:e979170e02e7 77 CYASSL_SHA256_CTX sha256;
ashleymills 0:e979170e02e7 78 #ifdef CYASSL_SHA384
ashleymills 0:e979170e02e7 79 CYASSL_SHA384_CTX sha384;
ashleymills 0:e979170e02e7 80 #endif
ashleymills 0:e979170e02e7 81 #ifdef CYASSL_SHA512
ashleymills 0:e979170e02e7 82 CYASSL_SHA512_CTX sha512;
ashleymills 0:e979170e02e7 83 #endif
ashleymills 0:e979170e02e7 84 #ifdef CYASSL_RIPEMD
ashleymills 0:e979170e02e7 85 CYASSL_RIPEMD_CTX ripemd;
ashleymills 0:e979170e02e7 86 #endif
ashleymills 0:e979170e02e7 87 } CYASSL_Hasher;
ashleymills 0:e979170e02e7 88
ashleymills 0:e979170e02e7 89
ashleymills 0:e979170e02e7 90 typedef struct CYASSL_EVP_MD_CTX {
ashleymills 0:e979170e02e7 91 unsigned char macType;
ashleymills 0:e979170e02e7 92 CYASSL_Hasher hash;
ashleymills 0:e979170e02e7 93 } CYASSL_EVP_MD_CTX;
ashleymills 0:e979170e02e7 94
ashleymills 0:e979170e02e7 95
ashleymills 0:e979170e02e7 96 typedef union {
ashleymills 0:e979170e02e7 97 Aes aes;
ashleymills 0:e979170e02e7 98 Des des;
ashleymills 0:e979170e02e7 99 Des3 des3;
ashleymills 0:e979170e02e7 100 Arc4 arc4;
ashleymills 0:e979170e02e7 101 } CYASSL_Cipher;
ashleymills 0:e979170e02e7 102
ashleymills 0:e979170e02e7 103
ashleymills 0:e979170e02e7 104 enum {
ashleymills 0:e979170e02e7 105 AES_128_CBC_TYPE = 1,
ashleymills 0:e979170e02e7 106 AES_192_CBC_TYPE = 2,
ashleymills 0:e979170e02e7 107 AES_256_CBC_TYPE = 3,
ashleymills 0:e979170e02e7 108 AES_128_CTR_TYPE = 4,
ashleymills 0:e979170e02e7 109 AES_192_CTR_TYPE = 5,
ashleymills 0:e979170e02e7 110 AES_256_CTR_TYPE = 6,
ashleymills 0:e979170e02e7 111 DES_CBC_TYPE = 7,
ashleymills 0:e979170e02e7 112 DES_EDE3_CBC_TYPE = 8,
ashleymills 0:e979170e02e7 113 ARC4_TYPE = 9,
ashleymills 0:e979170e02e7 114 NULL_CIPHER_TYPE = 10,
ashleymills 0:e979170e02e7 115 EVP_PKEY_RSA = 11,
ashleymills 0:e979170e02e7 116 EVP_PKEY_DSA = 12,
ashleymills 0:e979170e02e7 117 NID_sha1 = 64,
ashleymills 0:e979170e02e7 118 NID_md5 = 4
ashleymills 0:e979170e02e7 119 };
ashleymills 0:e979170e02e7 120
ashleymills 0:e979170e02e7 121
ashleymills 0:e979170e02e7 122 typedef struct CYASSL_EVP_CIPHER_CTX {
ashleymills 0:e979170e02e7 123 int keyLen; /* user may set for variable */
ashleymills 0:e979170e02e7 124 unsigned char enc; /* if encrypt side, then true */
ashleymills 0:e979170e02e7 125 unsigned char cipherType;
ashleymills 0:e979170e02e7 126 unsigned char iv[AES_BLOCK_SIZE]; /* working iv pointer into cipher */
ashleymills 0:e979170e02e7 127 CYASSL_Cipher cipher;
ashleymills 0:e979170e02e7 128 } CYASSL_EVP_CIPHER_CTX;
ashleymills 0:e979170e02e7 129
ashleymills 0:e979170e02e7 130
ashleymills 0:e979170e02e7 131 CYASSL_API int CyaSSL_EVP_MD_size(const CYASSL_EVP_MD* md);
ashleymills 0:e979170e02e7 132 CYASSL_API void CyaSSL_EVP_MD_CTX_init(CYASSL_EVP_MD_CTX* ctx);
ashleymills 0:e979170e02e7 133 CYASSL_API int CyaSSL_EVP_MD_CTX_cleanup(CYASSL_EVP_MD_CTX* ctx);
ashleymills 0:e979170e02e7 134
ashleymills 0:e979170e02e7 135 CYASSL_API int CyaSSL_EVP_DigestInit(CYASSL_EVP_MD_CTX* ctx,
ashleymills 0:e979170e02e7 136 const CYASSL_EVP_MD* type);
ashleymills 0:e979170e02e7 137 CYASSL_API int CyaSSL_EVP_DigestUpdate(CYASSL_EVP_MD_CTX* ctx, const void* data,
ashleymills 0:e979170e02e7 138 unsigned long sz);
ashleymills 0:e979170e02e7 139 CYASSL_API int CyaSSL_EVP_DigestFinal(CYASSL_EVP_MD_CTX* ctx, unsigned char* md,
ashleymills 0:e979170e02e7 140 unsigned int* s);
ashleymills 0:e979170e02e7 141 CYASSL_API int CyaSSL_EVP_DigestFinal_ex(CYASSL_EVP_MD_CTX* ctx,
ashleymills 0:e979170e02e7 142 unsigned char* md, unsigned int* s);
ashleymills 0:e979170e02e7 143 CYASSL_API int CyaSSL_EVP_BytesToKey(const CYASSL_EVP_CIPHER*,
ashleymills 0:e979170e02e7 144 const CYASSL_EVP_MD*, const unsigned char*,
ashleymills 0:e979170e02e7 145 const unsigned char*, int, int, unsigned char*,
ashleymills 0:e979170e02e7 146 unsigned char*);
ashleymills 0:e979170e02e7 147
ashleymills 0:e979170e02e7 148 CYASSL_API void CyaSSL_EVP_CIPHER_CTX_init(CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 149 CYASSL_API int CyaSSL_EVP_CIPHER_CTX_cleanup(CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 150
ashleymills 0:e979170e02e7 151 CYASSL_API int CyaSSL_EVP_CIPHER_CTX_iv_length(const CYASSL_EVP_CIPHER_CTX*);
ashleymills 0:e979170e02e7 152
ashleymills 0:e979170e02e7 153
ashleymills 0:e979170e02e7 154 CYASSL_API int CyaSSL_EVP_CipherInit(CYASSL_EVP_CIPHER_CTX* ctx,
ashleymills 0:e979170e02e7 155 const CYASSL_EVP_CIPHER* type,
ashleymills 0:e979170e02e7 156 unsigned char* key, unsigned char* iv,
ashleymills 0:e979170e02e7 157 int enc);
ashleymills 0:e979170e02e7 158 CYASSL_API int CyaSSL_EVP_CIPHER_CTX_key_length(CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 159 CYASSL_API int CyaSSL_EVP_CIPHER_CTX_set_key_length(CYASSL_EVP_CIPHER_CTX* ctx,
ashleymills 0:e979170e02e7 160 int keylen);
ashleymills 0:e979170e02e7 161 CYASSL_API int CyaSSL_EVP_Cipher(CYASSL_EVP_CIPHER_CTX* ctx,
ashleymills 0:e979170e02e7 162 unsigned char* dst, unsigned char* src,
ashleymills 0:e979170e02e7 163 unsigned int len);
ashleymills 0:e979170e02e7 164
ashleymills 0:e979170e02e7 165 CYASSL_API const CYASSL_EVP_MD* CyaSSL_EVP_get_digestbynid(int);
ashleymills 0:e979170e02e7 166
ashleymills 0:e979170e02e7 167 CYASSL_API CYASSL_RSA* CyaSSL_EVP_PKEY_get1_RSA(CYASSL_EVP_PKEY*);
ashleymills 0:e979170e02e7 168 CYASSL_API CYASSL_DSA* CyaSSL_EVP_PKEY_get1_DSA(CYASSL_EVP_PKEY*);
ashleymills 0:e979170e02e7 169
ashleymills 0:e979170e02e7 170 /* these next ones don't need real OpenSSL type, for OpenSSH compat only */
ashleymills 0:e979170e02e7 171 CYASSL_API void* CyaSSL_EVP_X_STATE(const CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 172 CYASSL_API int CyaSSL_EVP_X_STATE_LEN(const CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 173
ashleymills 0:e979170e02e7 174 CYASSL_API void CyaSSL_3des_iv(CYASSL_EVP_CIPHER_CTX* ctx, int doset,
ashleymills 0:e979170e02e7 175 unsigned char* iv, int len);
ashleymills 0:e979170e02e7 176 CYASSL_API void CyaSSL_aes_ctr_iv(CYASSL_EVP_CIPHER_CTX* ctx, int doset,
ashleymills 0:e979170e02e7 177 unsigned char* iv, int len);
ashleymills 0:e979170e02e7 178
ashleymills 0:e979170e02e7 179 CYASSL_API int CyaSSL_StoreExternalIV(CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 180 CYASSL_API int CyaSSL_SetInternalIV(CYASSL_EVP_CIPHER_CTX* ctx);
ashleymills 0:e979170e02e7 181
ashleymills 0:e979170e02e7 182
ashleymills 0:e979170e02e7 183 /* end OpenSSH compat */
ashleymills 0:e979170e02e7 184
ashleymills 0:e979170e02e7 185 typedef CYASSL_EVP_MD EVP_MD;
ashleymills 0:e979170e02e7 186 typedef CYASSL_EVP_CIPHER EVP_CIPHER;
ashleymills 0:e979170e02e7 187 typedef CYASSL_EVP_MD_CTX EVP_MD_CTX;
ashleymills 0:e979170e02e7 188 typedef CYASSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
ashleymills 0:e979170e02e7 189
ashleymills 0:e979170e02e7 190 #define EVP_md5 CyaSSL_EVP_md5
ashleymills 0:e979170e02e7 191 #define EVP_sha1 CyaSSL_EVP_sha1
ashleymills 0:e979170e02e7 192 #define EVP_sha256 CyaSSL_EVP_sha256
ashleymills 0:e979170e02e7 193 #define EVP_sha384 CyaSSL_EVP_sha384
ashleymills 0:e979170e02e7 194 #define EVP_sha512 CyaSSL_EVP_sha512
ashleymills 0:e979170e02e7 195 #define EVP_ripemd160 CyaSSL_EVP_ripemd160
ashleymills 0:e979170e02e7 196
ashleymills 0:e979170e02e7 197 #define EVP_aes_128_cbc CyaSSL_EVP_aes_128_cbc
ashleymills 0:e979170e02e7 198 #define EVP_aes_192_cbc CyaSSL_EVP_aes_192_cbc
ashleymills 0:e979170e02e7 199 #define EVP_aes_256_cbc CyaSSL_EVP_aes_256_cbc
ashleymills 0:e979170e02e7 200 #define EVP_aes_128_ctr CyaSSL_EVP_aes_128_ctr
ashleymills 0:e979170e02e7 201 #define EVP_aes_192_ctr CyaSSL_EVP_aes_192_ctr
ashleymills 0:e979170e02e7 202 #define EVP_aes_256_ctr CyaSSL_EVP_aes_256_ctr
ashleymills 0:e979170e02e7 203 #define EVP_des_cbc CyaSSL_EVP_des_cbc
ashleymills 0:e979170e02e7 204 #define EVP_des_ede3_cbc CyaSSL_EVP_des_ede3_cbc
ashleymills 0:e979170e02e7 205 #define EVP_rc4 CyaSSL_EVP_rc4
ashleymills 0:e979170e02e7 206 #define EVP_enc_null CyaSSL_EVP_enc_null
ashleymills 0:e979170e02e7 207
ashleymills 0:e979170e02e7 208 #define EVP_MD_size CyaSSL_EVP_MD_size
ashleymills 0:e979170e02e7 209 #define EVP_MD_CTX_init CyaSSL_EVP_MD_CTX_init
ashleymills 0:e979170e02e7 210 #define EVP_MD_CTX_cleanup CyaSSL_EVP_MD_CTX_cleanup
ashleymills 0:e979170e02e7 211 #define EVP_DigestInit CyaSSL_EVP_DigestInit
ashleymills 0:e979170e02e7 212 #define EVP_DigestUpdate CyaSSL_EVP_DigestUpdate
ashleymills 0:e979170e02e7 213 #define EVP_DigestFinal CyaSSL_EVP_DigestFinal
ashleymills 0:e979170e02e7 214 #define EVP_DigestFinal_ex CyaSSL_EVP_DigestFinal_ex
ashleymills 0:e979170e02e7 215 #define EVP_BytesToKey CyaSSL_EVP_BytesToKey
ashleymills 0:e979170e02e7 216
ashleymills 0:e979170e02e7 217 #define EVP_CIPHER_CTX_init CyaSSL_EVP_CIPHER_CTX_init
ashleymills 0:e979170e02e7 218 #define EVP_CIPHER_CTX_cleanup CyaSSL_EVP_CIPHER_CTX_cleanup
ashleymills 0:e979170e02e7 219 #define EVP_CIPHER_CTX_iv_length CyaSSL_EVP_CIPHER_CTX_iv_length
ashleymills 0:e979170e02e7 220 #define EVP_CIPHER_CTX_key_length CyaSSL_EVP_CIPHER_CTX_key_length
ashleymills 0:e979170e02e7 221 #define EVP_CIPHER_CTX_set_key_length CyaSSL_EVP_CIPHER_CTX_set_key_length
ashleymills 0:e979170e02e7 222 #define EVP_CipherInit CyaSSL_EVP_CipherInit
ashleymills 0:e979170e02e7 223 #define EVP_Cipher CyaSSL_EVP_Cipher
ashleymills 0:e979170e02e7 224
ashleymills 0:e979170e02e7 225 #define EVP_get_digestbynid CyaSSL_EVP_get_digestbynid
ashleymills 0:e979170e02e7 226
ashleymills 0:e979170e02e7 227 #define EVP_PKEY_get1_RSA CyaSSL_EVP_PKEY_get1_RSA
ashleymills 0:e979170e02e7 228 #define EVP_PKEY_get1_DSA CyaSSL_EVP_PKEY_get1_DSA
ashleymills 0:e979170e02e7 229
ashleymills 0:e979170e02e7 230 #ifndef EVP_MAX_MD_SIZE
ashleymills 0:e979170e02e7 231 #define EVP_MAX_MD_SIZE 64 /* sha512 */
ashleymills 0:e979170e02e7 232 #endif
ashleymills 0:e979170e02e7 233
ashleymills 0:e979170e02e7 234 #ifdef __cplusplus
ashleymills 0:e979170e02e7 235 } /* extern "C" */
ashleymills 0:e979170e02e7 236 #endif
ashleymills 0:e979170e02e7 237
ashleymills 0:e979170e02e7 238
ashleymills 0:e979170e02e7 239 #endif /* CYASSL_EVP_H_ */