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

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Fri Jun 26 00:39:20 2015 +0000
Revision:
0:d92f9d21154c
wolfSSL 3.6.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:d92f9d21154c 1 /* keys.c
wolfSSL 0:d92f9d21154c 2 *
wolfSSL 0:d92f9d21154c 3 * Copyright (C) 2006-2015 wolfSSL Inc.
wolfSSL 0:d92f9d21154c 4 *
wolfSSL 0:d92f9d21154c 5 * This file is part of wolfSSL. (formerly known as CyaSSL)
wolfSSL 0:d92f9d21154c 6 *
wolfSSL 0:d92f9d21154c 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 0:d92f9d21154c 8 * it under the terms of the GNU General Public License as published by
wolfSSL 0:d92f9d21154c 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 0:d92f9d21154c 10 * (at your option) any later version.
wolfSSL 0:d92f9d21154c 11 *
wolfSSL 0:d92f9d21154c 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 0:d92f9d21154c 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 0:d92f9d21154c 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 0:d92f9d21154c 15 * GNU General Public License for more details.
wolfSSL 0:d92f9d21154c 16 *
wolfSSL 0:d92f9d21154c 17 * You should have received a copy of the GNU General Public License
wolfSSL 0:d92f9d21154c 18 * along with this program; if not, write to the Free Software
wolfSSL 0:d92f9d21154c 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
wolfSSL 0:d92f9d21154c 20 */
wolfSSL 0:d92f9d21154c 21
wolfSSL 0:d92f9d21154c 22 /* Name change compatibility layer no longer needs to be included here */
wolfSSL 0:d92f9d21154c 23
wolfSSL 0:d92f9d21154c 24 #ifdef HAVE_CONFIG_H
wolfSSL 0:d92f9d21154c 25 #include <config.h>
wolfSSL 0:d92f9d21154c 26 #endif
wolfSSL 0:d92f9d21154c 27
wolfSSL 0:d92f9d21154c 28 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 0:d92f9d21154c 29
wolfSSL 0:d92f9d21154c 30 #include <wolfssl/internal.h>
wolfSSL 0:d92f9d21154c 31 #include <wolfssl/error-ssl.h>
wolfSSL 0:d92f9d21154c 32 #if defined(SHOW_SECRETS) || defined(CHACHA_AEAD_TEST)
wolfSSL 0:d92f9d21154c 33 #ifdef FREESCALE_MQX
wolfSSL 0:d92f9d21154c 34 #include <fio.h>
wolfSSL 0:d92f9d21154c 35 #else
wolfSSL 0:d92f9d21154c 36 #include <stdio.h>
wolfSSL 0:d92f9d21154c 37 #endif
wolfSSL 0:d92f9d21154c 38 #endif
wolfSSL 0:d92f9d21154c 39
wolfSSL 0:d92f9d21154c 40
wolfSSL 0:d92f9d21154c 41 int SetCipherSpecs(WOLFSSL* ssl)
wolfSSL 0:d92f9d21154c 42 {
wolfSSL 0:d92f9d21154c 43 #ifndef NO_WOLFSSL_CLIENT
wolfSSL 0:d92f9d21154c 44 if (ssl->options.side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 45 /* server side verified before SetCipherSpecs call */
wolfSSL 0:d92f9d21154c 46 if (VerifyClientSuite(ssl) != 1) {
wolfSSL 0:d92f9d21154c 47 WOLFSSL_MSG("SetCipherSpecs() client has an unusuable suite");
wolfSSL 0:d92f9d21154c 48 return UNSUPPORTED_SUITE;
wolfSSL 0:d92f9d21154c 49 }
wolfSSL 0:d92f9d21154c 50 }
wolfSSL 0:d92f9d21154c 51 #endif /* NO_WOLFSSL_CLIENT */
wolfSSL 0:d92f9d21154c 52
wolfSSL 0:d92f9d21154c 53 /* Chacha extensions, 0xcc */
wolfSSL 0:d92f9d21154c 54 if (ssl->options.cipherSuite0 == CHACHA_BYTE) {
wolfSSL 0:d92f9d21154c 55
wolfSSL 0:d92f9d21154c 56 switch (ssl->options.cipherSuite) {
wolfSSL 0:d92f9d21154c 57 #ifdef BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
wolfSSL 0:d92f9d21154c 58 case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:
wolfSSL 0:d92f9d21154c 59 ssl->specs.bulk_cipher_algorithm = wolfssl_chacha;
wolfSSL 0:d92f9d21154c 60 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 61 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 62 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 63 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 64 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 65 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 66 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 67 ssl->specs.key_size = CHACHA20_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 68 ssl->specs.block_size = CHACHA20_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 69 ssl->specs.iv_size = CHACHA20_IV_SIZE;
wolfSSL 0:d92f9d21154c 70 ssl->specs.aead_mac_size = POLY1305_AUTH_SZ;
wolfSSL 0:d92f9d21154c 71
wolfSSL 0:d92f9d21154c 72 break;
wolfSSL 0:d92f9d21154c 73 #endif
wolfSSL 0:d92f9d21154c 74
wolfSSL 0:d92f9d21154c 75 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
wolfSSL 0:d92f9d21154c 76 case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:
wolfSSL 0:d92f9d21154c 77 ssl->specs.bulk_cipher_algorithm = wolfssl_chacha;
wolfSSL 0:d92f9d21154c 78 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 79 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 80 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 81 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 82 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 83 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 84 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 85 ssl->specs.key_size = CHACHA20_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 86 ssl->specs.block_size = CHACHA20_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 87 ssl->specs.iv_size = CHACHA20_IV_SIZE;
wolfSSL 0:d92f9d21154c 88 ssl->specs.aead_mac_size = POLY1305_AUTH_SZ;
wolfSSL 0:d92f9d21154c 89
wolfSSL 0:d92f9d21154c 90 break;
wolfSSL 0:d92f9d21154c 91 #endif
wolfSSL 0:d92f9d21154c 92
wolfSSL 0:d92f9d21154c 93 #ifdef BUILD_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
wolfSSL 0:d92f9d21154c 94 case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256:
wolfSSL 0:d92f9d21154c 95 ssl->specs.bulk_cipher_algorithm = wolfssl_chacha;
wolfSSL 0:d92f9d21154c 96 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 97 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 98 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 99 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 100 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 101 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 102 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 103 ssl->specs.key_size = CHACHA20_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 104 ssl->specs.block_size = CHACHA20_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 105 ssl->specs.iv_size = CHACHA20_IV_SIZE;
wolfSSL 0:d92f9d21154c 106 ssl->specs.aead_mac_size = POLY1305_AUTH_SZ;
wolfSSL 0:d92f9d21154c 107
wolfSSL 0:d92f9d21154c 108 break;
wolfSSL 0:d92f9d21154c 109 #endif
wolfSSL 0:d92f9d21154c 110 default:
wolfSSL 0:d92f9d21154c 111 WOLFSSL_MSG("Unsupported cipher suite, SetCipherSpecs ChaCha");
wolfSSL 0:d92f9d21154c 112 return UNSUPPORTED_SUITE;
wolfSSL 0:d92f9d21154c 113 }
wolfSSL 0:d92f9d21154c 114 }
wolfSSL 0:d92f9d21154c 115
wolfSSL 0:d92f9d21154c 116 /* ECC extensions, or AES-CCM */
wolfSSL 0:d92f9d21154c 117 if (ssl->options.cipherSuite0 == ECC_BYTE) {
wolfSSL 0:d92f9d21154c 118
wolfSSL 0:d92f9d21154c 119 switch (ssl->options.cipherSuite) {
wolfSSL 0:d92f9d21154c 120
wolfSSL 0:d92f9d21154c 121 #ifdef HAVE_ECC
wolfSSL 0:d92f9d21154c 122
wolfSSL 0:d92f9d21154c 123 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 124 case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 125 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 126 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 127 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 128 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 129 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 130 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 131 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 132 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 133 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 134 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 135 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 136 break;
wolfSSL 0:d92f9d21154c 137 #endif
wolfSSL 0:d92f9d21154c 138
wolfSSL 0:d92f9d21154c 139 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 140 case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 141 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 142 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 143 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 144 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 145 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 146 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 147 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 148 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 149 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 150 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 151 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 152 break;
wolfSSL 0:d92f9d21154c 153 #endif
wolfSSL 0:d92f9d21154c 154
wolfSSL 0:d92f9d21154c 155 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 156 case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 157 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 158 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 159 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 160 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 161 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 162 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 163 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 164 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 165 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 166 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 167 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 168 break;
wolfSSL 0:d92f9d21154c 169 #endif
wolfSSL 0:d92f9d21154c 170
wolfSSL 0:d92f9d21154c 171 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 172 case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 173 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 174 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 175 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 176 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 177 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 178 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 179 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 180 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 181 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 182 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 183 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 184 break;
wolfSSL 0:d92f9d21154c 185 #endif
wolfSSL 0:d92f9d21154c 186
wolfSSL 0:d92f9d21154c 187 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 188 case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 189 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 190 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 191 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 192 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 193 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 194 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 195 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 196 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 197 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 198 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 199 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 200 break;
wolfSSL 0:d92f9d21154c 201 #endif
wolfSSL 0:d92f9d21154c 202
wolfSSL 0:d92f9d21154c 203 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 204 case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 205 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 206 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 207 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 208 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 209 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 210 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 211 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 212 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 213 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 214 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 215 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 216 break;
wolfSSL 0:d92f9d21154c 217 #endif
wolfSSL 0:d92f9d21154c 218
wolfSSL 0:d92f9d21154c 219 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 220 case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 221 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 222 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 223 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 224 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 225 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 226 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 227 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 228 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 229 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 230 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 231 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 232 break;
wolfSSL 0:d92f9d21154c 233 #endif
wolfSSL 0:d92f9d21154c 234
wolfSSL 0:d92f9d21154c 235 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 236 case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 237 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 238 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 239 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 240 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 241 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 242 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 243 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 244 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 245 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 246 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 247 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 248 break;
wolfSSL 0:d92f9d21154c 249 #endif
wolfSSL 0:d92f9d21154c 250
wolfSSL 0:d92f9d21154c 251 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 252 case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 253 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 254 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 255 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 256 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 257 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 258 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 259 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 260 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 261 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 262 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 263 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 264
wolfSSL 0:d92f9d21154c 265 break;
wolfSSL 0:d92f9d21154c 266 #endif
wolfSSL 0:d92f9d21154c 267
wolfSSL 0:d92f9d21154c 268 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 269 case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 270 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 271 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 272 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 273 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 274 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 275 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 276 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 277 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 278 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 279 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 280 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 281
wolfSSL 0:d92f9d21154c 282 break;
wolfSSL 0:d92f9d21154c 283 #endif
wolfSSL 0:d92f9d21154c 284
wolfSSL 0:d92f9d21154c 285 #ifdef BUILD_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 286 case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 287 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 288 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 289 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 290 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 291 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 292 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 293 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 294 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 295 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 296 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 297 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 298
wolfSSL 0:d92f9d21154c 299 break;
wolfSSL 0:d92f9d21154c 300 #endif
wolfSSL 0:d92f9d21154c 301
wolfSSL 0:d92f9d21154c 302 #ifdef BUILD_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 303 case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 304 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 305 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 306 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 307 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 308 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 309 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 310 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 311 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 312 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 313 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 314 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 315
wolfSSL 0:d92f9d21154c 316 break;
wolfSSL 0:d92f9d21154c 317 #endif
wolfSSL 0:d92f9d21154c 318
wolfSSL 0:d92f9d21154c 319 #ifdef BUILD_TLS_ECDHE_RSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 320 case TLS_ECDHE_RSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 321 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 322 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 323 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 324 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 325 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 326 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 327 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 328 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 329 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 330 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 331 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 332
wolfSSL 0:d92f9d21154c 333 break;
wolfSSL 0:d92f9d21154c 334 #endif
wolfSSL 0:d92f9d21154c 335
wolfSSL 0:d92f9d21154c 336 #ifdef BUILD_TLS_ECDH_RSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 337 case TLS_ECDH_RSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 338 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 339 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 340 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 341 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 342 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 343 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 344 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 345 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 346 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 347 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 348 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 349
wolfSSL 0:d92f9d21154c 350 break;
wolfSSL 0:d92f9d21154c 351 #endif
wolfSSL 0:d92f9d21154c 352
wolfSSL 0:d92f9d21154c 353 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 354 case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 355 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 356 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 357 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 358 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 359 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 360 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 361 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 362 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 363 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 364 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 365 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 366
wolfSSL 0:d92f9d21154c 367 break;
wolfSSL 0:d92f9d21154c 368 #endif
wolfSSL 0:d92f9d21154c 369
wolfSSL 0:d92f9d21154c 370 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 371 case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 372 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 373 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 374 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 375 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 376 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 377 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 378 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 379 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 380 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 381 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 382 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 383
wolfSSL 0:d92f9d21154c 384 break;
wolfSSL 0:d92f9d21154c 385 #endif
wolfSSL 0:d92f9d21154c 386
wolfSSL 0:d92f9d21154c 387 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 388 case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 389 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 390 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 391 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 392 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 393 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 394 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 395 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 396 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 397 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 398 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 399 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 400
wolfSSL 0:d92f9d21154c 401 break;
wolfSSL 0:d92f9d21154c 402 #endif
wolfSSL 0:d92f9d21154c 403
wolfSSL 0:d92f9d21154c 404 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 405 case TLS_ECDH_ECDSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 406 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 407 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 408 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 409 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 410 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 411 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 412 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 413 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 414 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 415 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 416 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 417
wolfSSL 0:d92f9d21154c 418 break;
wolfSSL 0:d92f9d21154c 419 #endif
wolfSSL 0:d92f9d21154c 420
wolfSSL 0:d92f9d21154c 421 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 422 case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 423 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 424 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 425 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 426 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 427 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 428 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 429 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 430 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 431 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 432 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 433 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 434
wolfSSL 0:d92f9d21154c 435 break;
wolfSSL 0:d92f9d21154c 436 #endif
wolfSSL 0:d92f9d21154c 437
wolfSSL 0:d92f9d21154c 438 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 439 case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 440 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 441 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 442 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 443 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 444 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 445 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 446 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 447 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 448 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 449 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 450 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 451
wolfSSL 0:d92f9d21154c 452 break;
wolfSSL 0:d92f9d21154c 453 #endif
wolfSSL 0:d92f9d21154c 454
wolfSSL 0:d92f9d21154c 455 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 456 case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 457 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 458 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 459 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 460 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 461 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 462 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 463 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 464 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 465 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 466 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 467 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 468
wolfSSL 0:d92f9d21154c 469 break;
wolfSSL 0:d92f9d21154c 470 #endif
wolfSSL 0:d92f9d21154c 471
wolfSSL 0:d92f9d21154c 472 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 473 case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 474 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 475 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 476 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 477 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 478 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 479 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 480 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 481 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 482 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 483 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 484 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 485
wolfSSL 0:d92f9d21154c 486 break;
wolfSSL 0:d92f9d21154c 487 #endif
wolfSSL 0:d92f9d21154c 488
wolfSSL 0:d92f9d21154c 489 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 490 case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 491 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 492 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 493 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 494 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 495 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 496 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 497 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 498 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 499 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 500 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 501 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 502
wolfSSL 0:d92f9d21154c 503 break;
wolfSSL 0:d92f9d21154c 504 #endif
wolfSSL 0:d92f9d21154c 505
wolfSSL 0:d92f9d21154c 506 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 507 case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 508 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 509 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 510 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 511 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 512 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 513 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 514 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 515 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 516 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 517 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 518 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 519
wolfSSL 0:d92f9d21154c 520 break;
wolfSSL 0:d92f9d21154c 521 #endif
wolfSSL 0:d92f9d21154c 522
wolfSSL 0:d92f9d21154c 523 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 524 case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 525 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 526 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 527 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 528 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 529 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 530 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 531 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 532 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 533 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 534 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 535 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 536 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 537
wolfSSL 0:d92f9d21154c 538 break;
wolfSSL 0:d92f9d21154c 539 #endif
wolfSSL 0:d92f9d21154c 540
wolfSSL 0:d92f9d21154c 541 #ifdef BUILD_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 542 case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 543 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 544 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 545 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 546 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 547 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 548 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 549 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 550 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 551 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 552 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 553 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 554 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 555
wolfSSL 0:d92f9d21154c 556 break;
wolfSSL 0:d92f9d21154c 557 #endif
wolfSSL 0:d92f9d21154c 558
wolfSSL 0:d92f9d21154c 559 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 560 case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 561 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 562 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 563 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 564 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 565 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 566 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 567 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 568 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 569 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 570 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 571 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 572 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 573
wolfSSL 0:d92f9d21154c 574 break;
wolfSSL 0:d92f9d21154c 575 #endif
wolfSSL 0:d92f9d21154c 576
wolfSSL 0:d92f9d21154c 577 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 578 case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 579 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 580 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 581 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 582 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 583 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 584 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 585 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 586 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 587 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 588 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 589 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 590 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 591
wolfSSL 0:d92f9d21154c 592 break;
wolfSSL 0:d92f9d21154c 593 #endif
wolfSSL 0:d92f9d21154c 594
wolfSSL 0:d92f9d21154c 595 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 596 case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 597 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 598 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 599 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 600 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 601 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 602 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 603 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 604 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 605 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 606 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 607 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 608 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 609
wolfSSL 0:d92f9d21154c 610 break;
wolfSSL 0:d92f9d21154c 611 #endif
wolfSSL 0:d92f9d21154c 612
wolfSSL 0:d92f9d21154c 613 #ifdef BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 614 case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 615 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 616 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 617 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 618 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 619 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 620 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 621 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 622 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 623 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 624 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 625 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 626 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 627
wolfSSL 0:d92f9d21154c 628 break;
wolfSSL 0:d92f9d21154c 629 #endif
wolfSSL 0:d92f9d21154c 630
wolfSSL 0:d92f9d21154c 631 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 632 case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 633 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 634 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 635 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 636 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 637 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 638 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 639 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 640 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 641 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 642 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 643 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 644 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 645
wolfSSL 0:d92f9d21154c 646 break;
wolfSSL 0:d92f9d21154c 647 #endif
wolfSSL 0:d92f9d21154c 648
wolfSSL 0:d92f9d21154c 649 #ifdef BUILD_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 650 case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 651 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 652 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 653 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 654 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 655 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 656 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 657 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 658 ssl->specs.static_ecdh = 1;
wolfSSL 0:d92f9d21154c 659 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 660 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 661 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 662 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 663
wolfSSL 0:d92f9d21154c 664 break;
wolfSSL 0:d92f9d21154c 665 #endif
wolfSSL 0:d92f9d21154c 666
wolfSSL 0:d92f9d21154c 667 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
wolfSSL 0:d92f9d21154c 668 case TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 :
wolfSSL 0:d92f9d21154c 669 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 670 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 671 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 672 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 673 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 674 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 675 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 676 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 677 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 678 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 679 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 680 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 681
wolfSSL 0:d92f9d21154c 682 break;
wolfSSL 0:d92f9d21154c 683 #endif
wolfSSL 0:d92f9d21154c 684
wolfSSL 0:d92f9d21154c 685 #ifdef BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8
wolfSSL 0:d92f9d21154c 686 case TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 :
wolfSSL 0:d92f9d21154c 687 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 688 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 689 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 690 ssl->specs.kea = ecc_diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 691 ssl->specs.sig_algo = ecc_dsa_sa_algo;
wolfSSL 0:d92f9d21154c 692 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 693 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 694 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 695 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 696 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 697 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 698 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 699
wolfSSL 0:d92f9d21154c 700 break;
wolfSSL 0:d92f9d21154c 701 #endif
wolfSSL 0:d92f9d21154c 702 #endif /* HAVE_ECC */
wolfSSL 0:d92f9d21154c 703
wolfSSL 0:d92f9d21154c 704 #ifdef BUILD_TLS_RSA_WITH_AES_128_CCM_8
wolfSSL 0:d92f9d21154c 705 case TLS_RSA_WITH_AES_128_CCM_8 :
wolfSSL 0:d92f9d21154c 706 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 707 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 708 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 709 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 710 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 711 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 712 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 713 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 714 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 715 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 716 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 717 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 718
wolfSSL 0:d92f9d21154c 719 break;
wolfSSL 0:d92f9d21154c 720 #endif
wolfSSL 0:d92f9d21154c 721
wolfSSL 0:d92f9d21154c 722 #ifdef BUILD_TLS_RSA_WITH_AES_256_CCM_8
wolfSSL 0:d92f9d21154c 723 case TLS_RSA_WITH_AES_256_CCM_8 :
wolfSSL 0:d92f9d21154c 724 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 725 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 726 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 727 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 728 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 729 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 730 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 731 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 732 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 733 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 734 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 735 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 736
wolfSSL 0:d92f9d21154c 737 break;
wolfSSL 0:d92f9d21154c 738 #endif
wolfSSL 0:d92f9d21154c 739
wolfSSL 0:d92f9d21154c 740 #ifdef BUILD_TLS_PSK_WITH_AES_128_CCM_8
wolfSSL 0:d92f9d21154c 741 case TLS_PSK_WITH_AES_128_CCM_8 :
wolfSSL 0:d92f9d21154c 742 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 743 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 744 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 745 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 746 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 747 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 748 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 749 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 750 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 751 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 752 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 753 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 754
wolfSSL 0:d92f9d21154c 755 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 756 break;
wolfSSL 0:d92f9d21154c 757 #endif
wolfSSL 0:d92f9d21154c 758
wolfSSL 0:d92f9d21154c 759 #ifdef BUILD_TLS_PSK_WITH_AES_256_CCM_8
wolfSSL 0:d92f9d21154c 760 case TLS_PSK_WITH_AES_256_CCM_8 :
wolfSSL 0:d92f9d21154c 761 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 762 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 763 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 764 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 765 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 766 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 767 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 768 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 769 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 770 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 771 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 772 ssl->specs.aead_mac_size = AES_CCM_8_AUTH_SZ;
wolfSSL 0:d92f9d21154c 773
wolfSSL 0:d92f9d21154c 774 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 775 break;
wolfSSL 0:d92f9d21154c 776 #endif
wolfSSL 0:d92f9d21154c 777
wolfSSL 0:d92f9d21154c 778 #ifdef BUILD_TLS_PSK_WITH_AES_128_CCM
wolfSSL 0:d92f9d21154c 779 case TLS_PSK_WITH_AES_128_CCM :
wolfSSL 0:d92f9d21154c 780 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 781 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 782 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 783 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 784 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 785 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 786 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 787 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 788 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 789 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 790 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 791 ssl->specs.aead_mac_size = AES_CCM_16_AUTH_SZ;
wolfSSL 0:d92f9d21154c 792
wolfSSL 0:d92f9d21154c 793 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 794 break;
wolfSSL 0:d92f9d21154c 795 #endif
wolfSSL 0:d92f9d21154c 796
wolfSSL 0:d92f9d21154c 797 #ifdef BUILD_TLS_PSK_WITH_AES_256_CCM
wolfSSL 0:d92f9d21154c 798 case TLS_PSK_WITH_AES_256_CCM :
wolfSSL 0:d92f9d21154c 799 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 800 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 801 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 802 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 803 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 804 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 805 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 806 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 807 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 808 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 809 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 810 ssl->specs.aead_mac_size = AES_CCM_16_AUTH_SZ;
wolfSSL 0:d92f9d21154c 811
wolfSSL 0:d92f9d21154c 812 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 813 break;
wolfSSL 0:d92f9d21154c 814 #endif
wolfSSL 0:d92f9d21154c 815
wolfSSL 0:d92f9d21154c 816 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_128_CCM
wolfSSL 0:d92f9d21154c 817 case TLS_DHE_PSK_WITH_AES_128_CCM :
wolfSSL 0:d92f9d21154c 818 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 819 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 820 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 821 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 822 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 823 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 824 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 825 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 826 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 827 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 828 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 829 ssl->specs.aead_mac_size = AES_CCM_16_AUTH_SZ;
wolfSSL 0:d92f9d21154c 830
wolfSSL 0:d92f9d21154c 831 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 832 break;
wolfSSL 0:d92f9d21154c 833 #endif
wolfSSL 0:d92f9d21154c 834
wolfSSL 0:d92f9d21154c 835 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_256_CCM
wolfSSL 0:d92f9d21154c 836 case TLS_DHE_PSK_WITH_AES_256_CCM :
wolfSSL 0:d92f9d21154c 837 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_ccm;
wolfSSL 0:d92f9d21154c 838 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 839 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 840 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 841 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 842 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 843 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 844 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 845 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 846 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 847 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 848 ssl->specs.aead_mac_size = AES_CCM_16_AUTH_SZ;
wolfSSL 0:d92f9d21154c 849
wolfSSL 0:d92f9d21154c 850 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 851 break;
wolfSSL 0:d92f9d21154c 852 #endif
wolfSSL 0:d92f9d21154c 853
wolfSSL 0:d92f9d21154c 854 default:
wolfSSL 0:d92f9d21154c 855 WOLFSSL_MSG("Unsupported cipher suite, SetCipherSpecs ECC");
wolfSSL 0:d92f9d21154c 856 return UNSUPPORTED_SUITE;
wolfSSL 0:d92f9d21154c 857 } /* switch */
wolfSSL 0:d92f9d21154c 858 } /* if */
wolfSSL 0:d92f9d21154c 859 if (ssl->options.cipherSuite0 != ECC_BYTE &&
wolfSSL 0:d92f9d21154c 860 ssl->options.cipherSuite0 != CHACHA_BYTE) { /* normal suites */
wolfSSL 0:d92f9d21154c 861 switch (ssl->options.cipherSuite) {
wolfSSL 0:d92f9d21154c 862
wolfSSL 0:d92f9d21154c 863 #ifdef BUILD_SSL_RSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 864 case SSL_RSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 865 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 866 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 867 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 868 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 869 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 870 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 871 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 872 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 873 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 874 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 875 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 876
wolfSSL 0:d92f9d21154c 877 break;
wolfSSL 0:d92f9d21154c 878 #endif
wolfSSL 0:d92f9d21154c 879
wolfSSL 0:d92f9d21154c 880 #ifdef BUILD_TLS_NTRU_RSA_WITH_RC4_128_SHA
wolfSSL 0:d92f9d21154c 881 case TLS_NTRU_RSA_WITH_RC4_128_SHA :
wolfSSL 0:d92f9d21154c 882 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 883 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 884 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 885 ssl->specs.kea = ntru_kea;
wolfSSL 0:d92f9d21154c 886 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 887 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 888 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 889 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 890 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 891 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 892 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 893
wolfSSL 0:d92f9d21154c 894 break;
wolfSSL 0:d92f9d21154c 895 #endif
wolfSSL 0:d92f9d21154c 896
wolfSSL 0:d92f9d21154c 897 #ifdef BUILD_SSL_RSA_WITH_RC4_128_MD5
wolfSSL 0:d92f9d21154c 898 case SSL_RSA_WITH_RC4_128_MD5 :
wolfSSL 0:d92f9d21154c 899 ssl->specs.bulk_cipher_algorithm = wolfssl_rc4;
wolfSSL 0:d92f9d21154c 900 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 901 ssl->specs.mac_algorithm = md5_mac;
wolfSSL 0:d92f9d21154c 902 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 903 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 904 ssl->specs.hash_size = MD5_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 905 ssl->specs.pad_size = PAD_MD5;
wolfSSL 0:d92f9d21154c 906 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 907 ssl->specs.key_size = RC4_KEY_SIZE;
wolfSSL 0:d92f9d21154c 908 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 909 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 910
wolfSSL 0:d92f9d21154c 911 break;
wolfSSL 0:d92f9d21154c 912 #endif
wolfSSL 0:d92f9d21154c 913
wolfSSL 0:d92f9d21154c 914 #ifdef BUILD_SSL_RSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 915 case SSL_RSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 916 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 917 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 918 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 919 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 920 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 921 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 922 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 923 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 924 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 925 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 926 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 927
wolfSSL 0:d92f9d21154c 928 break;
wolfSSL 0:d92f9d21154c 929 #endif
wolfSSL 0:d92f9d21154c 930
wolfSSL 0:d92f9d21154c 931 #ifdef BUILD_TLS_NTRU_RSA_WITH_3DES_EDE_CBC_SHA
wolfSSL 0:d92f9d21154c 932 case TLS_NTRU_RSA_WITH_3DES_EDE_CBC_SHA :
wolfSSL 0:d92f9d21154c 933 ssl->specs.bulk_cipher_algorithm = wolfssl_triple_des;
wolfSSL 0:d92f9d21154c 934 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 935 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 936 ssl->specs.kea = ntru_kea;
wolfSSL 0:d92f9d21154c 937 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 938 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 939 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 940 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 941 ssl->specs.key_size = DES3_KEY_SIZE;
wolfSSL 0:d92f9d21154c 942 ssl->specs.block_size = DES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 943 ssl->specs.iv_size = DES_IV_SIZE;
wolfSSL 0:d92f9d21154c 944
wolfSSL 0:d92f9d21154c 945 break;
wolfSSL 0:d92f9d21154c 946 #endif
wolfSSL 0:d92f9d21154c 947
wolfSSL 0:d92f9d21154c 948 #ifdef BUILD_TLS_RSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 949 case TLS_RSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 950 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 951 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 952 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 953 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 954 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 955 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 956 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 957 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 958 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 959 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 960 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 961
wolfSSL 0:d92f9d21154c 962 break;
wolfSSL 0:d92f9d21154c 963 #endif
wolfSSL 0:d92f9d21154c 964
wolfSSL 0:d92f9d21154c 965 #ifdef BUILD_TLS_RSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 966 case TLS_RSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 967 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 968 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 969 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 970 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 971 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 972 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 973 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 974 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 975 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 976 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 977 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 978
wolfSSL 0:d92f9d21154c 979 break;
wolfSSL 0:d92f9d21154c 980 #endif
wolfSSL 0:d92f9d21154c 981
wolfSSL 0:d92f9d21154c 982 #ifdef BUILD_TLS_RSA_WITH_NULL_SHA
wolfSSL 0:d92f9d21154c 983 case TLS_RSA_WITH_NULL_SHA :
wolfSSL 0:d92f9d21154c 984 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 985 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 986 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 987 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 988 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 989 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 990 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 991 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 992 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 993 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 994 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 995
wolfSSL 0:d92f9d21154c 996 break;
wolfSSL 0:d92f9d21154c 997 #endif
wolfSSL 0:d92f9d21154c 998
wolfSSL 0:d92f9d21154c 999 #ifdef BUILD_TLS_RSA_WITH_NULL_SHA256
wolfSSL 0:d92f9d21154c 1000 case TLS_RSA_WITH_NULL_SHA256 :
wolfSSL 0:d92f9d21154c 1001 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1002 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1003 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1004 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1005 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1006 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1007 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1008 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1009 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1010 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1011 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1012
wolfSSL 0:d92f9d21154c 1013 break;
wolfSSL 0:d92f9d21154c 1014 #endif
wolfSSL 0:d92f9d21154c 1015
wolfSSL 0:d92f9d21154c 1016 #ifdef BUILD_TLS_NTRU_RSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1017 case TLS_NTRU_RSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1018 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1019 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1020 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1021 ssl->specs.kea = ntru_kea;
wolfSSL 0:d92f9d21154c 1022 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1023 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1024 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1025 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1026 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1027 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1028 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1029
wolfSSL 0:d92f9d21154c 1030 break;
wolfSSL 0:d92f9d21154c 1031 #endif
wolfSSL 0:d92f9d21154c 1032
wolfSSL 0:d92f9d21154c 1033 #ifdef BUILD_TLS_RSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1034 case TLS_RSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1035 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1036 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1037 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1038 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1039 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1040 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1041 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1042 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1043 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1044 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1045 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1046
wolfSSL 0:d92f9d21154c 1047 break;
wolfSSL 0:d92f9d21154c 1048 #endif
wolfSSL 0:d92f9d21154c 1049
wolfSSL 0:d92f9d21154c 1050 #ifdef BUILD_TLS_RSA_WITH_AES_256_CBC_SHA256
wolfSSL 0:d92f9d21154c 1051 case TLS_RSA_WITH_AES_256_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1052 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1053 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1054 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1055 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1056 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1057 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1058 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1059 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1060 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1061 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1062 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1063
wolfSSL 0:d92f9d21154c 1064 break;
wolfSSL 0:d92f9d21154c 1065 #endif
wolfSSL 0:d92f9d21154c 1066
wolfSSL 0:d92f9d21154c 1067 #ifdef BUILD_TLS_NTRU_RSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1068 case TLS_NTRU_RSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1069 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1070 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1071 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1072 ssl->specs.kea = ntru_kea;
wolfSSL 0:d92f9d21154c 1073 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1074 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1075 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1076 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1077 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1078 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1079 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1080
wolfSSL 0:d92f9d21154c 1081 break;
wolfSSL 0:d92f9d21154c 1082 #endif
wolfSSL 0:d92f9d21154c 1083
wolfSSL 0:d92f9d21154c 1084 #ifdef BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 1085 case TLS_PSK_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 1086 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1087 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1088 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1089 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1090 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1091 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1092 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1093 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1094 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1095 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1096 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1097 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1098
wolfSSL 0:d92f9d21154c 1099 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1100 break;
wolfSSL 0:d92f9d21154c 1101 #endif
wolfSSL 0:d92f9d21154c 1102
wolfSSL 0:d92f9d21154c 1103 #ifdef BUILD_TLS_PSK_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 1104 case TLS_PSK_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 1105 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1106 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1107 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1108 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1109 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1110 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1111 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1112 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1113 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1114 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1115 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1116 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1117
wolfSSL 0:d92f9d21154c 1118 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1119 break;
wolfSSL 0:d92f9d21154c 1120 #endif
wolfSSL 0:d92f9d21154c 1121
wolfSSL 0:d92f9d21154c 1122 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 1123 case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 1124 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1125 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1126 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1127 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1128 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1129 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1130 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1131 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1132 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1133 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1134 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1135 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1136
wolfSSL 0:d92f9d21154c 1137 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1138 break;
wolfSSL 0:d92f9d21154c 1139 #endif
wolfSSL 0:d92f9d21154c 1140
wolfSSL 0:d92f9d21154c 1141 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 1142 case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 1143 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1144 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1145 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1146 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1147 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1148 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1149 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1150 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1151 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1152 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1153 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1154 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1155
wolfSSL 0:d92f9d21154c 1156 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1157 break;
wolfSSL 0:d92f9d21154c 1158 #endif
wolfSSL 0:d92f9d21154c 1159
wolfSSL 0:d92f9d21154c 1160 #ifdef BUILD_TLS_PSK_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 1161 case TLS_PSK_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1162 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1163 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1164 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1165 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1166 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1167 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1168 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1169 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1170 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1171 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1172 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1173
wolfSSL 0:d92f9d21154c 1174 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1175 break;
wolfSSL 0:d92f9d21154c 1176 #endif
wolfSSL 0:d92f9d21154c 1177
wolfSSL 0:d92f9d21154c 1178 #ifdef BUILD_TLS_PSK_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 1179 case TLS_PSK_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 1180 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1181 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1182 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1183 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1184 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1185 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1186 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1187 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1188 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1189 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1190 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1191
wolfSSL 0:d92f9d21154c 1192 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1193 break;
wolfSSL 0:d92f9d21154c 1194 #endif
wolfSSL 0:d92f9d21154c 1195
wolfSSL 0:d92f9d21154c 1196 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 1197 case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1198 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1199 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1200 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1201 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1202 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1203 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1204 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1205 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1206 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1207 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1208 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1209
wolfSSL 0:d92f9d21154c 1210 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1211 break;
wolfSSL 0:d92f9d21154c 1212 #endif
wolfSSL 0:d92f9d21154c 1213
wolfSSL 0:d92f9d21154c 1214 #ifdef BUILD_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
wolfSSL 0:d92f9d21154c 1215 case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 :
wolfSSL 0:d92f9d21154c 1216 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1217 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1218 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1219 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1220 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1221 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1222 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1223 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1224 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1225 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1226 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1227
wolfSSL 0:d92f9d21154c 1228 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1229 break;
wolfSSL 0:d92f9d21154c 1230 #endif
wolfSSL 0:d92f9d21154c 1231
wolfSSL 0:d92f9d21154c 1232 #ifdef BUILD_TLS_PSK_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1233 case TLS_PSK_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1234 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1235 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1236 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1237 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1238 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1239 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1240 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1241 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1242 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1243 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1244 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1245
wolfSSL 0:d92f9d21154c 1246 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1247 break;
wolfSSL 0:d92f9d21154c 1248 #endif
wolfSSL 0:d92f9d21154c 1249
wolfSSL 0:d92f9d21154c 1250 #ifdef BUILD_TLS_PSK_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1251 case TLS_PSK_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1252 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1253 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1254 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1255 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1256 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1257 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1258 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1259 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1260 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1261 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1262 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1263
wolfSSL 0:d92f9d21154c 1264 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1265 break;
wolfSSL 0:d92f9d21154c 1266 #endif
wolfSSL 0:d92f9d21154c 1267
wolfSSL 0:d92f9d21154c 1268 #ifdef BUILD_TLS_PSK_WITH_NULL_SHA256
wolfSSL 0:d92f9d21154c 1269 case TLS_PSK_WITH_NULL_SHA256 :
wolfSSL 0:d92f9d21154c 1270 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1271 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1272 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1273 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1274 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1275 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1276 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1277 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1278 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1279 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1280 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1281
wolfSSL 0:d92f9d21154c 1282 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1283 break;
wolfSSL 0:d92f9d21154c 1284 #endif
wolfSSL 0:d92f9d21154c 1285
wolfSSL 0:d92f9d21154c 1286 #ifdef BUILD_TLS_PSK_WITH_NULL_SHA384
wolfSSL 0:d92f9d21154c 1287 case TLS_PSK_WITH_NULL_SHA384 :
wolfSSL 0:d92f9d21154c 1288 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1289 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1290 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1291 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1292 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1293 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1294 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1295 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1296 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1297 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1298 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1299
wolfSSL 0:d92f9d21154c 1300 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1301 break;
wolfSSL 0:d92f9d21154c 1302 #endif
wolfSSL 0:d92f9d21154c 1303
wolfSSL 0:d92f9d21154c 1304 #ifdef BUILD_TLS_PSK_WITH_NULL_SHA
wolfSSL 0:d92f9d21154c 1305 case TLS_PSK_WITH_NULL_SHA :
wolfSSL 0:d92f9d21154c 1306 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1307 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1308 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1309 ssl->specs.kea = psk_kea;
wolfSSL 0:d92f9d21154c 1310 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1311 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1312 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1313 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1314 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1315 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1316 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1317
wolfSSL 0:d92f9d21154c 1318 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1319 break;
wolfSSL 0:d92f9d21154c 1320 #endif
wolfSSL 0:d92f9d21154c 1321
wolfSSL 0:d92f9d21154c 1322 #ifdef BUILD_TLS_DHE_PSK_WITH_NULL_SHA256
wolfSSL 0:d92f9d21154c 1323 case TLS_DHE_PSK_WITH_NULL_SHA256 :
wolfSSL 0:d92f9d21154c 1324 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1325 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1326 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1327 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1328 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1329 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1330 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1331 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1332 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1333 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1334 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1335
wolfSSL 0:d92f9d21154c 1336 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1337 break;
wolfSSL 0:d92f9d21154c 1338 #endif
wolfSSL 0:d92f9d21154c 1339
wolfSSL 0:d92f9d21154c 1340 #ifdef BUILD_TLS_DHE_PSK_WITH_NULL_SHA384
wolfSSL 0:d92f9d21154c 1341 case TLS_DHE_PSK_WITH_NULL_SHA384 :
wolfSSL 0:d92f9d21154c 1342 ssl->specs.bulk_cipher_algorithm = wolfssl_cipher_null;
wolfSSL 0:d92f9d21154c 1343 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1344 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1345 ssl->specs.kea = dhe_psk_kea;
wolfSSL 0:d92f9d21154c 1346 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1347 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1348 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1349 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1350 ssl->specs.key_size = 0;
wolfSSL 0:d92f9d21154c 1351 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1352 ssl->specs.iv_size = 0;
wolfSSL 0:d92f9d21154c 1353
wolfSSL 0:d92f9d21154c 1354 ssl->options.usingPSK_cipher = 1;
wolfSSL 0:d92f9d21154c 1355 break;
wolfSSL 0:d92f9d21154c 1356 #endif
wolfSSL 0:d92f9d21154c 1357
wolfSSL 0:d92f9d21154c 1358 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 1359 case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1360 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1361 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1362 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1363 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1364 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1365 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1366 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1367 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1368 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1369 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1370 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1371
wolfSSL 0:d92f9d21154c 1372 break;
wolfSSL 0:d92f9d21154c 1373 #endif
wolfSSL 0:d92f9d21154c 1374
wolfSSL 0:d92f9d21154c 1375 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
wolfSSL 0:d92f9d21154c 1376 case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1377 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1378 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1379 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1380 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1381 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1382 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1383 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1384 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1385 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1386 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1387 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1388
wolfSSL 0:d92f9d21154c 1389 break;
wolfSSL 0:d92f9d21154c 1390 #endif
wolfSSL 0:d92f9d21154c 1391
wolfSSL 0:d92f9d21154c 1392 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1393 case TLS_DHE_RSA_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1394 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1395 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1396 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1397 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1398 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1399 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1400 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1401 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1402 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1403 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1404 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1405
wolfSSL 0:d92f9d21154c 1406 break;
wolfSSL 0:d92f9d21154c 1407 #endif
wolfSSL 0:d92f9d21154c 1408
wolfSSL 0:d92f9d21154c 1409 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1410 case TLS_DHE_RSA_WITH_AES_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1411 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1412 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1413 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1414 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1415 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1416 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1417 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1418 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1419 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1420 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1421 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1422
wolfSSL 0:d92f9d21154c 1423 break;
wolfSSL 0:d92f9d21154c 1424 #endif
wolfSSL 0:d92f9d21154c 1425
wolfSSL 0:d92f9d21154c 1426 #ifdef BUILD_TLS_RSA_WITH_HC_128_MD5
wolfSSL 0:d92f9d21154c 1427 case TLS_RSA_WITH_HC_128_MD5 :
wolfSSL 0:d92f9d21154c 1428 ssl->specs.bulk_cipher_algorithm = wolfssl_hc128;
wolfSSL 0:d92f9d21154c 1429 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1430 ssl->specs.mac_algorithm = md5_mac;
wolfSSL 0:d92f9d21154c 1431 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1432 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1433 ssl->specs.hash_size = MD5_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1434 ssl->specs.pad_size = PAD_MD5;
wolfSSL 0:d92f9d21154c 1435 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1436 ssl->specs.key_size = HC_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1437 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1438 ssl->specs.iv_size = HC_128_IV_SIZE;
wolfSSL 0:d92f9d21154c 1439
wolfSSL 0:d92f9d21154c 1440 break;
wolfSSL 0:d92f9d21154c 1441 #endif
wolfSSL 0:d92f9d21154c 1442
wolfSSL 0:d92f9d21154c 1443 #ifdef BUILD_TLS_RSA_WITH_HC_128_SHA
wolfSSL 0:d92f9d21154c 1444 case TLS_RSA_WITH_HC_128_SHA :
wolfSSL 0:d92f9d21154c 1445 ssl->specs.bulk_cipher_algorithm = wolfssl_hc128;
wolfSSL 0:d92f9d21154c 1446 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1447 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1448 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1449 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1450 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1451 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1452 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1453 ssl->specs.key_size = HC_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1454 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1455 ssl->specs.iv_size = HC_128_IV_SIZE;
wolfSSL 0:d92f9d21154c 1456
wolfSSL 0:d92f9d21154c 1457 break;
wolfSSL 0:d92f9d21154c 1458 #endif
wolfSSL 0:d92f9d21154c 1459
wolfSSL 0:d92f9d21154c 1460 #ifdef BUILD_TLS_RSA_WITH_HC_128_B2B256
wolfSSL 0:d92f9d21154c 1461 case TLS_RSA_WITH_HC_128_B2B256:
wolfSSL 0:d92f9d21154c 1462 ssl->specs.bulk_cipher_algorithm = wolfssl_hc128;
wolfSSL 0:d92f9d21154c 1463 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1464 ssl->specs.mac_algorithm = blake2b_mac;
wolfSSL 0:d92f9d21154c 1465 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1466 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1467 ssl->specs.hash_size = BLAKE2B_256;
wolfSSL 0:d92f9d21154c 1468 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1469 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1470 ssl->specs.key_size = HC_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1471 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1472 ssl->specs.iv_size = HC_128_IV_SIZE;
wolfSSL 0:d92f9d21154c 1473
wolfSSL 0:d92f9d21154c 1474 break;
wolfSSL 0:d92f9d21154c 1475 #endif
wolfSSL 0:d92f9d21154c 1476
wolfSSL 0:d92f9d21154c 1477 #ifdef BUILD_TLS_RSA_WITH_AES_128_CBC_B2B256
wolfSSL 0:d92f9d21154c 1478 case TLS_RSA_WITH_AES_128_CBC_B2B256:
wolfSSL 0:d92f9d21154c 1479 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1480 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1481 ssl->specs.mac_algorithm = blake2b_mac;
wolfSSL 0:d92f9d21154c 1482 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1483 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1484 ssl->specs.hash_size = BLAKE2B_256;
wolfSSL 0:d92f9d21154c 1485 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1486 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1487 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1488 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1489 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1490
wolfSSL 0:d92f9d21154c 1491 break;
wolfSSL 0:d92f9d21154c 1492 #endif
wolfSSL 0:d92f9d21154c 1493
wolfSSL 0:d92f9d21154c 1494 #ifdef BUILD_TLS_RSA_WITH_AES_256_CBC_B2B256
wolfSSL 0:d92f9d21154c 1495 case TLS_RSA_WITH_AES_256_CBC_B2B256:
wolfSSL 0:d92f9d21154c 1496 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1497 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1498 ssl->specs.mac_algorithm = blake2b_mac;
wolfSSL 0:d92f9d21154c 1499 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1500 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1501 ssl->specs.hash_size = BLAKE2B_256;
wolfSSL 0:d92f9d21154c 1502 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1503 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1504 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1505 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1506 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1507
wolfSSL 0:d92f9d21154c 1508 break;
wolfSSL 0:d92f9d21154c 1509 #endif
wolfSSL 0:d92f9d21154c 1510
wolfSSL 0:d92f9d21154c 1511 #ifdef BUILD_TLS_RSA_WITH_RABBIT_SHA
wolfSSL 0:d92f9d21154c 1512 case TLS_RSA_WITH_RABBIT_SHA :
wolfSSL 0:d92f9d21154c 1513 ssl->specs.bulk_cipher_algorithm = wolfssl_rabbit;
wolfSSL 0:d92f9d21154c 1514 ssl->specs.cipher_type = stream;
wolfSSL 0:d92f9d21154c 1515 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1516 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1517 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1518 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1519 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1520 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1521 ssl->specs.key_size = RABBIT_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1522 ssl->specs.block_size = 0;
wolfSSL 0:d92f9d21154c 1523 ssl->specs.iv_size = RABBIT_IV_SIZE;
wolfSSL 0:d92f9d21154c 1524
wolfSSL 0:d92f9d21154c 1525 break;
wolfSSL 0:d92f9d21154c 1526 #endif
wolfSSL 0:d92f9d21154c 1527
wolfSSL 0:d92f9d21154c 1528 #ifdef BUILD_TLS_RSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 1529 case TLS_RSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 1530 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1531 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1532 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1533 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1534 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1535 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1536 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1537 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1538 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1539 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1540 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1541 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1542
wolfSSL 0:d92f9d21154c 1543 break;
wolfSSL 0:d92f9d21154c 1544 #endif
wolfSSL 0:d92f9d21154c 1545
wolfSSL 0:d92f9d21154c 1546 #ifdef BUILD_TLS_RSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 1547 case TLS_RSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 1548 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1549 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1550 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1551 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1552 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1553 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1554 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1555 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1556 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1557 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1558 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1559 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1560
wolfSSL 0:d92f9d21154c 1561 break;
wolfSSL 0:d92f9d21154c 1562 #endif
wolfSSL 0:d92f9d21154c 1563
wolfSSL 0:d92f9d21154c 1564 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
wolfSSL 0:d92f9d21154c 1565 case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 :
wolfSSL 0:d92f9d21154c 1566 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1567 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1568 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1569 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1570 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1571 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1572 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1573 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1574 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1575 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1576 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1577 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1578
wolfSSL 0:d92f9d21154c 1579 break;
wolfSSL 0:d92f9d21154c 1580 #endif
wolfSSL 0:d92f9d21154c 1581
wolfSSL 0:d92f9d21154c 1582 #ifdef BUILD_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
wolfSSL 0:d92f9d21154c 1583 case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 :
wolfSSL 0:d92f9d21154c 1584 ssl->specs.bulk_cipher_algorithm = wolfssl_aes_gcm;
wolfSSL 0:d92f9d21154c 1585 ssl->specs.cipher_type = aead;
wolfSSL 0:d92f9d21154c 1586 ssl->specs.mac_algorithm = sha384_mac;
wolfSSL 0:d92f9d21154c 1587 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1588 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1589 ssl->specs.hash_size = SHA384_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1590 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1591 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1592 ssl->specs.key_size = AES_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1593 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1594 ssl->specs.iv_size = AEAD_IMP_IV_SZ;
wolfSSL 0:d92f9d21154c 1595 ssl->specs.aead_mac_size = AES_GCM_AUTH_SZ;
wolfSSL 0:d92f9d21154c 1596
wolfSSL 0:d92f9d21154c 1597 break;
wolfSSL 0:d92f9d21154c 1598 #endif
wolfSSL 0:d92f9d21154c 1599
wolfSSL 0:d92f9d21154c 1600 #ifdef BUILD_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1601 case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1602 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1603 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1604 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1605 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1606 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1607 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1608 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1609 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1610 ssl->specs.key_size = CAMELLIA_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1611 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1612 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1613
wolfSSL 0:d92f9d21154c 1614 break;
wolfSSL 0:d92f9d21154c 1615 #endif
wolfSSL 0:d92f9d21154c 1616
wolfSSL 0:d92f9d21154c 1617 #ifdef BUILD_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1618 case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1619 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1620 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1621 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1622 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1623 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1624 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1625 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1626 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1627 ssl->specs.key_size = CAMELLIA_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1628 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1629 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1630
wolfSSL 0:d92f9d21154c 1631 break;
wolfSSL 0:d92f9d21154c 1632 #endif
wolfSSL 0:d92f9d21154c 1633
wolfSSL 0:d92f9d21154c 1634 #ifdef BUILD_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 1635 case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1636 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1637 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1638 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1639 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1640 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1641 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1642 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1643 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1644 ssl->specs.key_size = CAMELLIA_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1645 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1646 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1647
wolfSSL 0:d92f9d21154c 1648 break;
wolfSSL 0:d92f9d21154c 1649 #endif
wolfSSL 0:d92f9d21154c 1650
wolfSSL 0:d92f9d21154c 1651 #ifdef BUILD_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
wolfSSL 0:d92f9d21154c 1652 case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1653 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1654 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1655 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1656 ssl->specs.kea = rsa_kea;
wolfSSL 0:d92f9d21154c 1657 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1658 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1659 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1660 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1661 ssl->specs.key_size = CAMELLIA_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1662 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1663 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1664
wolfSSL 0:d92f9d21154c 1665 break;
wolfSSL 0:d92f9d21154c 1666 #endif
wolfSSL 0:d92f9d21154c 1667
wolfSSL 0:d92f9d21154c 1668 #ifdef BUILD_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1669 case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1670 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1671 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1672 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1673 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1674 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1675 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1676 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1677 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1678 ssl->specs.key_size = CAMELLIA_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1679 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1680 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1681
wolfSSL 0:d92f9d21154c 1682 break;
wolfSSL 0:d92f9d21154c 1683 #endif
wolfSSL 0:d92f9d21154c 1684
wolfSSL 0:d92f9d21154c 1685 #ifdef BUILD_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
wolfSSL 0:d92f9d21154c 1686 case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA :
wolfSSL 0:d92f9d21154c 1687 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1688 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1689 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1690 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1691 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1692 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1693 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1694 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1695 ssl->specs.key_size = CAMELLIA_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1696 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1697 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1698
wolfSSL 0:d92f9d21154c 1699 break;
wolfSSL 0:d92f9d21154c 1700 #endif
wolfSSL 0:d92f9d21154c 1701
wolfSSL 0:d92f9d21154c 1702 #ifdef BUILD_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
wolfSSL 0:d92f9d21154c 1703 case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1704 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1705 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1706 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1707 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1708 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1709 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1710 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1711 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1712 ssl->specs.key_size = CAMELLIA_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1713 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1714 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1715
wolfSSL 0:d92f9d21154c 1716 break;
wolfSSL 0:d92f9d21154c 1717 #endif
wolfSSL 0:d92f9d21154c 1718
wolfSSL 0:d92f9d21154c 1719 #ifdef BUILD_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
wolfSSL 0:d92f9d21154c 1720 case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 :
wolfSSL 0:d92f9d21154c 1721 ssl->specs.bulk_cipher_algorithm = wolfssl_camellia;
wolfSSL 0:d92f9d21154c 1722 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1723 ssl->specs.mac_algorithm = sha256_mac;
wolfSSL 0:d92f9d21154c 1724 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1725 ssl->specs.sig_algo = rsa_sa_algo;
wolfSSL 0:d92f9d21154c 1726 ssl->specs.hash_size = SHA256_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1727 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1728 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1729 ssl->specs.key_size = CAMELLIA_256_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1730 ssl->specs.block_size = CAMELLIA_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1731 ssl->specs.iv_size = CAMELLIA_IV_SIZE;
wolfSSL 0:d92f9d21154c 1732
wolfSSL 0:d92f9d21154c 1733 break;
wolfSSL 0:d92f9d21154c 1734 #endif
wolfSSL 0:d92f9d21154c 1735
wolfSSL 0:d92f9d21154c 1736 #ifdef BUILD_TLS_DH_anon_WITH_AES_128_CBC_SHA
wolfSSL 0:d92f9d21154c 1737 case TLS_DH_anon_WITH_AES_128_CBC_SHA :
wolfSSL 0:d92f9d21154c 1738 ssl->specs.bulk_cipher_algorithm = wolfssl_aes;
wolfSSL 0:d92f9d21154c 1739 ssl->specs.cipher_type = block;
wolfSSL 0:d92f9d21154c 1740 ssl->specs.mac_algorithm = sha_mac;
wolfSSL 0:d92f9d21154c 1741 ssl->specs.kea = diffie_hellman_kea;
wolfSSL 0:d92f9d21154c 1742 ssl->specs.sig_algo = anonymous_sa_algo;
wolfSSL 0:d92f9d21154c 1743 ssl->specs.hash_size = SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 1744 ssl->specs.pad_size = PAD_SHA;
wolfSSL 0:d92f9d21154c 1745 ssl->specs.static_ecdh = 0;
wolfSSL 0:d92f9d21154c 1746 ssl->specs.key_size = AES_128_KEY_SIZE;
wolfSSL 0:d92f9d21154c 1747 ssl->specs.block_size = AES_BLOCK_SIZE;
wolfSSL 0:d92f9d21154c 1748 ssl->specs.iv_size = AES_IV_SIZE;
wolfSSL 0:d92f9d21154c 1749
wolfSSL 0:d92f9d21154c 1750 ssl->options.usingAnon_cipher = 1;
wolfSSL 0:d92f9d21154c 1751 break;
wolfSSL 0:d92f9d21154c 1752 #endif
wolfSSL 0:d92f9d21154c 1753
wolfSSL 0:d92f9d21154c 1754 default:
wolfSSL 0:d92f9d21154c 1755 WOLFSSL_MSG("Unsupported cipher suite, SetCipherSpecs");
wolfSSL 0:d92f9d21154c 1756 return UNSUPPORTED_SUITE;
wolfSSL 0:d92f9d21154c 1757 } /* switch */
wolfSSL 0:d92f9d21154c 1758 } /* if ECC / Normal suites else */
wolfSSL 0:d92f9d21154c 1759
wolfSSL 0:d92f9d21154c 1760 /* set TLS if it hasn't been turned off */
wolfSSL 0:d92f9d21154c 1761 if (ssl->version.major == 3 && ssl->version.minor >= 1) {
wolfSSL 0:d92f9d21154c 1762 #ifndef NO_TLS
wolfSSL 0:d92f9d21154c 1763 ssl->options.tls = 1;
wolfSSL 0:d92f9d21154c 1764 ssl->hmac = TLS_hmac;
wolfSSL 0:d92f9d21154c 1765 if (ssl->version.minor >= 2)
wolfSSL 0:d92f9d21154c 1766 ssl->options.tls1_1 = 1;
wolfSSL 0:d92f9d21154c 1767 #endif
wolfSSL 0:d92f9d21154c 1768 }
wolfSSL 0:d92f9d21154c 1769
wolfSSL 0:d92f9d21154c 1770 #ifdef WOLFSSL_DTLS
wolfSSL 0:d92f9d21154c 1771 if (ssl->options.dtls)
wolfSSL 0:d92f9d21154c 1772 ssl->hmac = TLS_hmac;
wolfSSL 0:d92f9d21154c 1773 #endif
wolfSSL 0:d92f9d21154c 1774
wolfSSL 0:d92f9d21154c 1775 return 0;
wolfSSL 0:d92f9d21154c 1776 }
wolfSSL 0:d92f9d21154c 1777
wolfSSL 0:d92f9d21154c 1778
wolfSSL 0:d92f9d21154c 1779 enum KeyStuff {
wolfSSL 0:d92f9d21154c 1780 MASTER_ROUNDS = 3,
wolfSSL 0:d92f9d21154c 1781 PREFIX = 3, /* up to three letters for master prefix */
wolfSSL 0:d92f9d21154c 1782 KEY_PREFIX = 7 /* up to 7 prefix letters for key rounds */
wolfSSL 0:d92f9d21154c 1783
wolfSSL 0:d92f9d21154c 1784
wolfSSL 0:d92f9d21154c 1785 };
wolfSSL 0:d92f9d21154c 1786
wolfSSL 0:d92f9d21154c 1787 #ifndef NO_OLD_TLS
wolfSSL 0:d92f9d21154c 1788 /* true or false, zero for error */
wolfSSL 0:d92f9d21154c 1789 static int SetPrefix(byte* sha_input, int idx)
wolfSSL 0:d92f9d21154c 1790 {
wolfSSL 0:d92f9d21154c 1791 switch (idx) {
wolfSSL 0:d92f9d21154c 1792 case 0:
wolfSSL 0:d92f9d21154c 1793 XMEMCPY(sha_input, "A", 1);
wolfSSL 0:d92f9d21154c 1794 break;
wolfSSL 0:d92f9d21154c 1795 case 1:
wolfSSL 0:d92f9d21154c 1796 XMEMCPY(sha_input, "BB", 2);
wolfSSL 0:d92f9d21154c 1797 break;
wolfSSL 0:d92f9d21154c 1798 case 2:
wolfSSL 0:d92f9d21154c 1799 XMEMCPY(sha_input, "CCC", 3);
wolfSSL 0:d92f9d21154c 1800 break;
wolfSSL 0:d92f9d21154c 1801 case 3:
wolfSSL 0:d92f9d21154c 1802 XMEMCPY(sha_input, "DDDD", 4);
wolfSSL 0:d92f9d21154c 1803 break;
wolfSSL 0:d92f9d21154c 1804 case 4:
wolfSSL 0:d92f9d21154c 1805 XMEMCPY(sha_input, "EEEEE", 5);
wolfSSL 0:d92f9d21154c 1806 break;
wolfSSL 0:d92f9d21154c 1807 case 5:
wolfSSL 0:d92f9d21154c 1808 XMEMCPY(sha_input, "FFFFFF", 6);
wolfSSL 0:d92f9d21154c 1809 break;
wolfSSL 0:d92f9d21154c 1810 case 6:
wolfSSL 0:d92f9d21154c 1811 XMEMCPY(sha_input, "GGGGGGG", 7);
wolfSSL 0:d92f9d21154c 1812 break;
wolfSSL 0:d92f9d21154c 1813 default:
wolfSSL 0:d92f9d21154c 1814 WOLFSSL_MSG("Set Prefix error, bad input");
wolfSSL 0:d92f9d21154c 1815 return 0;
wolfSSL 0:d92f9d21154c 1816 }
wolfSSL 0:d92f9d21154c 1817 return 1;
wolfSSL 0:d92f9d21154c 1818 }
wolfSSL 0:d92f9d21154c 1819 #endif
wolfSSL 0:d92f9d21154c 1820
wolfSSL 0:d92f9d21154c 1821
wolfSSL 0:d92f9d21154c 1822 static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs,
wolfSSL 0:d92f9d21154c 1823 int side, void* heap, int devId)
wolfSSL 0:d92f9d21154c 1824 {
wolfSSL 0:d92f9d21154c 1825 #ifdef BUILD_ARC4
wolfSSL 0:d92f9d21154c 1826 word32 sz = specs->key_size;
wolfSSL 0:d92f9d21154c 1827 if (specs->bulk_cipher_algorithm == wolfssl_rc4) {
wolfSSL 0:d92f9d21154c 1828 if (enc && enc->arc4 == NULL)
wolfSSL 0:d92f9d21154c 1829 enc->arc4 = (Arc4*)XMALLOC(sizeof(Arc4), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1830 if (enc && enc->arc4 == NULL)
wolfSSL 0:d92f9d21154c 1831 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1832 if (dec && dec->arc4 == NULL)
wolfSSL 0:d92f9d21154c 1833 dec->arc4 = (Arc4*)XMALLOC(sizeof(Arc4), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1834 if (dec && dec->arc4 == NULL)
wolfSSL 0:d92f9d21154c 1835 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1836 #ifdef HAVE_CAVIUM
wolfSSL 0:d92f9d21154c 1837 if (devId != NO_CAVIUM_DEVICE) {
wolfSSL 0:d92f9d21154c 1838 if (enc) {
wolfSSL 0:d92f9d21154c 1839 if (Arc4InitCavium(enc->arc4, devId) != 0) {
wolfSSL 0:d92f9d21154c 1840 WOLFSSL_MSG("Arc4InitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 1841 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 1842 }
wolfSSL 0:d92f9d21154c 1843 }
wolfSSL 0:d92f9d21154c 1844 if (dec) {
wolfSSL 0:d92f9d21154c 1845 if (Arc4InitCavium(dec->arc4, devId) != 0) {
wolfSSL 0:d92f9d21154c 1846 WOLFSSL_MSG("Arc4InitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 1847 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 1848 }
wolfSSL 0:d92f9d21154c 1849 }
wolfSSL 0:d92f9d21154c 1850 }
wolfSSL 0:d92f9d21154c 1851 #endif
wolfSSL 0:d92f9d21154c 1852 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 1853 if (enc)
wolfSSL 0:d92f9d21154c 1854 wc_Arc4SetKey(enc->arc4, keys->client_write_key, sz);
wolfSSL 0:d92f9d21154c 1855 if (dec)
wolfSSL 0:d92f9d21154c 1856 wc_Arc4SetKey(dec->arc4, keys->server_write_key, sz);
wolfSSL 0:d92f9d21154c 1857 }
wolfSSL 0:d92f9d21154c 1858 else {
wolfSSL 0:d92f9d21154c 1859 if (enc)
wolfSSL 0:d92f9d21154c 1860 wc_Arc4SetKey(enc->arc4, keys->server_write_key, sz);
wolfSSL 0:d92f9d21154c 1861 if (dec)
wolfSSL 0:d92f9d21154c 1862 wc_Arc4SetKey(dec->arc4, keys->client_write_key, sz);
wolfSSL 0:d92f9d21154c 1863 }
wolfSSL 0:d92f9d21154c 1864 if (enc)
wolfSSL 0:d92f9d21154c 1865 enc->setup = 1;
wolfSSL 0:d92f9d21154c 1866 if (dec)
wolfSSL 0:d92f9d21154c 1867 dec->setup = 1;
wolfSSL 0:d92f9d21154c 1868 }
wolfSSL 0:d92f9d21154c 1869 #endif
wolfSSL 0:d92f9d21154c 1870
wolfSSL 0:d92f9d21154c 1871
wolfSSL 0:d92f9d21154c 1872 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
wolfSSL 0:d92f9d21154c 1873 if (specs->bulk_cipher_algorithm == wolfssl_chacha) {
wolfSSL 0:d92f9d21154c 1874 int chachaRet;
wolfSSL 0:d92f9d21154c 1875 if (enc && enc->chacha == NULL)
wolfSSL 0:d92f9d21154c 1876 enc->chacha =
wolfSSL 0:d92f9d21154c 1877 (ChaCha*)XMALLOC(sizeof(ChaCha), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1878 if (enc && enc->chacha == NULL)
wolfSSL 0:d92f9d21154c 1879 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1880 if (dec && dec->chacha == NULL)
wolfSSL 0:d92f9d21154c 1881 dec->chacha =
wolfSSL 0:d92f9d21154c 1882 (ChaCha*)XMALLOC(sizeof(ChaCha), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1883 if (dec && dec->chacha == NULL)
wolfSSL 0:d92f9d21154c 1884 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1885 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 1886 if (enc) {
wolfSSL 0:d92f9d21154c 1887 chachaRet = wc_Chacha_SetKey(enc->chacha, keys->client_write_key,
wolfSSL 0:d92f9d21154c 1888 specs->key_size);
wolfSSL 0:d92f9d21154c 1889 XMEMCPY(keys->aead_enc_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 1890 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 1891 if (chachaRet != 0) return chachaRet;
wolfSSL 0:d92f9d21154c 1892 }
wolfSSL 0:d92f9d21154c 1893 if (dec) {
wolfSSL 0:d92f9d21154c 1894 chachaRet = wc_Chacha_SetKey(dec->chacha, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1895 specs->key_size);
wolfSSL 0:d92f9d21154c 1896 XMEMCPY(keys->aead_dec_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 1897 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 1898 if (chachaRet != 0) return chachaRet;
wolfSSL 0:d92f9d21154c 1899 }
wolfSSL 0:d92f9d21154c 1900 }
wolfSSL 0:d92f9d21154c 1901 else {
wolfSSL 0:d92f9d21154c 1902 if (enc) {
wolfSSL 0:d92f9d21154c 1903 chachaRet = wc_Chacha_SetKey(enc->chacha, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1904 specs->key_size);
wolfSSL 0:d92f9d21154c 1905 XMEMCPY(keys->aead_enc_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 1906 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 1907 if (chachaRet != 0) return chachaRet;
wolfSSL 0:d92f9d21154c 1908 }
wolfSSL 0:d92f9d21154c 1909 if (dec) {
wolfSSL 0:d92f9d21154c 1910 chachaRet = wc_Chacha_SetKey(dec->chacha, keys->client_write_key,
wolfSSL 0:d92f9d21154c 1911 specs->key_size);
wolfSSL 0:d92f9d21154c 1912 XMEMCPY(keys->aead_dec_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 1913 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 1914 if (chachaRet != 0) return chachaRet;
wolfSSL 0:d92f9d21154c 1915 }
wolfSSL 0:d92f9d21154c 1916 }
wolfSSL 0:d92f9d21154c 1917
wolfSSL 0:d92f9d21154c 1918 if (enc)
wolfSSL 0:d92f9d21154c 1919 enc->setup = 1;
wolfSSL 0:d92f9d21154c 1920 if (dec)
wolfSSL 0:d92f9d21154c 1921 dec->setup = 1;
wolfSSL 0:d92f9d21154c 1922 }
wolfSSL 0:d92f9d21154c 1923 #endif
wolfSSL 0:d92f9d21154c 1924
wolfSSL 0:d92f9d21154c 1925 #ifdef HAVE_HC128
wolfSSL 0:d92f9d21154c 1926 if (specs->bulk_cipher_algorithm == wolfssl_hc128) {
wolfSSL 0:d92f9d21154c 1927 int hcRet;
wolfSSL 0:d92f9d21154c 1928 if (enc && enc->hc128 == NULL)
wolfSSL 0:d92f9d21154c 1929 enc->hc128 =
wolfSSL 0:d92f9d21154c 1930 (HC128*)XMALLOC(sizeof(HC128), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1931 if (enc && enc->hc128 == NULL)
wolfSSL 0:d92f9d21154c 1932 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1933 if (dec && dec->hc128 == NULL)
wolfSSL 0:d92f9d21154c 1934 dec->hc128 =
wolfSSL 0:d92f9d21154c 1935 (HC128*)XMALLOC(sizeof(HC128), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1936 if (dec && dec->hc128 == NULL)
wolfSSL 0:d92f9d21154c 1937 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1938 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 1939 if (enc) {
wolfSSL 0:d92f9d21154c 1940 hcRet = wc_Hc128_SetKey(enc->hc128, keys->client_write_key,
wolfSSL 0:d92f9d21154c 1941 keys->client_write_IV);
wolfSSL 0:d92f9d21154c 1942 if (hcRet != 0) return hcRet;
wolfSSL 0:d92f9d21154c 1943 }
wolfSSL 0:d92f9d21154c 1944 if (dec) {
wolfSSL 0:d92f9d21154c 1945 hcRet = wc_Hc128_SetKey(dec->hc128, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1946 keys->server_write_IV);
wolfSSL 0:d92f9d21154c 1947 if (hcRet != 0) return hcRet;
wolfSSL 0:d92f9d21154c 1948 }
wolfSSL 0:d92f9d21154c 1949 }
wolfSSL 0:d92f9d21154c 1950 else {
wolfSSL 0:d92f9d21154c 1951 if (enc) {
wolfSSL 0:d92f9d21154c 1952 hcRet = wc_Hc128_SetKey(enc->hc128, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1953 keys->server_write_IV);
wolfSSL 0:d92f9d21154c 1954 if (hcRet != 0) return hcRet;
wolfSSL 0:d92f9d21154c 1955 }
wolfSSL 0:d92f9d21154c 1956 if (dec) {
wolfSSL 0:d92f9d21154c 1957 hcRet = wc_Hc128_SetKey(dec->hc128, keys->client_write_key,
wolfSSL 0:d92f9d21154c 1958 keys->client_write_IV);
wolfSSL 0:d92f9d21154c 1959 if (hcRet != 0) return hcRet;
wolfSSL 0:d92f9d21154c 1960 }
wolfSSL 0:d92f9d21154c 1961 }
wolfSSL 0:d92f9d21154c 1962 if (enc)
wolfSSL 0:d92f9d21154c 1963 enc->setup = 1;
wolfSSL 0:d92f9d21154c 1964 if (dec)
wolfSSL 0:d92f9d21154c 1965 dec->setup = 1;
wolfSSL 0:d92f9d21154c 1966 }
wolfSSL 0:d92f9d21154c 1967 #endif
wolfSSL 0:d92f9d21154c 1968
wolfSSL 0:d92f9d21154c 1969 #ifdef BUILD_RABBIT
wolfSSL 0:d92f9d21154c 1970 if (specs->bulk_cipher_algorithm == wolfssl_rabbit) {
wolfSSL 0:d92f9d21154c 1971 int rabRet;
wolfSSL 0:d92f9d21154c 1972 if (enc && enc->rabbit == NULL)
wolfSSL 0:d92f9d21154c 1973 enc->rabbit =
wolfSSL 0:d92f9d21154c 1974 (Rabbit*)XMALLOC(sizeof(Rabbit), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1975 if (enc && enc->rabbit == NULL)
wolfSSL 0:d92f9d21154c 1976 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1977 if (dec && dec->rabbit == NULL)
wolfSSL 0:d92f9d21154c 1978 dec->rabbit =
wolfSSL 0:d92f9d21154c 1979 (Rabbit*)XMALLOC(sizeof(Rabbit), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 1980 if (dec && dec->rabbit == NULL)
wolfSSL 0:d92f9d21154c 1981 return MEMORY_E;
wolfSSL 0:d92f9d21154c 1982 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 1983 if (enc) {
wolfSSL 0:d92f9d21154c 1984 rabRet = wc_RabbitSetKey(enc->rabbit, keys->client_write_key,
wolfSSL 0:d92f9d21154c 1985 keys->client_write_IV);
wolfSSL 0:d92f9d21154c 1986 if (rabRet != 0) return rabRet;
wolfSSL 0:d92f9d21154c 1987 }
wolfSSL 0:d92f9d21154c 1988 if (dec) {
wolfSSL 0:d92f9d21154c 1989 rabRet = wc_RabbitSetKey(dec->rabbit, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1990 keys->server_write_IV);
wolfSSL 0:d92f9d21154c 1991 if (rabRet != 0) return rabRet;
wolfSSL 0:d92f9d21154c 1992 }
wolfSSL 0:d92f9d21154c 1993 }
wolfSSL 0:d92f9d21154c 1994 else {
wolfSSL 0:d92f9d21154c 1995 if (enc) {
wolfSSL 0:d92f9d21154c 1996 rabRet = wc_RabbitSetKey(enc->rabbit, keys->server_write_key,
wolfSSL 0:d92f9d21154c 1997 keys->server_write_IV);
wolfSSL 0:d92f9d21154c 1998 if (rabRet != 0) return rabRet;
wolfSSL 0:d92f9d21154c 1999 }
wolfSSL 0:d92f9d21154c 2000 if (dec) {
wolfSSL 0:d92f9d21154c 2001 rabRet = wc_RabbitSetKey(dec->rabbit, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2002 keys->client_write_IV);
wolfSSL 0:d92f9d21154c 2003 if (rabRet != 0) return rabRet;
wolfSSL 0:d92f9d21154c 2004 }
wolfSSL 0:d92f9d21154c 2005 }
wolfSSL 0:d92f9d21154c 2006 if (enc)
wolfSSL 0:d92f9d21154c 2007 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2008 if (dec)
wolfSSL 0:d92f9d21154c 2009 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2010 }
wolfSSL 0:d92f9d21154c 2011 #endif
wolfSSL 0:d92f9d21154c 2012
wolfSSL 0:d92f9d21154c 2013 #ifdef BUILD_DES3
wolfSSL 0:d92f9d21154c 2014 if (specs->bulk_cipher_algorithm == wolfssl_triple_des) {
wolfSSL 0:d92f9d21154c 2015 int desRet = 0;
wolfSSL 0:d92f9d21154c 2016
wolfSSL 0:d92f9d21154c 2017 if (enc && enc->des3 == NULL)
wolfSSL 0:d92f9d21154c 2018 enc->des3 = (Des3*)XMALLOC(sizeof(Des3), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2019 if (enc && enc->des3 == NULL)
wolfSSL 0:d92f9d21154c 2020 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2021 if (dec && dec->des3 == NULL)
wolfSSL 0:d92f9d21154c 2022 dec->des3 = (Des3*)XMALLOC(sizeof(Des3), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2023 if (dec && dec->des3 == NULL)
wolfSSL 0:d92f9d21154c 2024 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2025 #ifdef HAVE_CAVIUM
wolfSSL 0:d92f9d21154c 2026 if (devId != NO_CAVIUM_DEVICE) {
wolfSSL 0:d92f9d21154c 2027 if (enc) {
wolfSSL 0:d92f9d21154c 2028 if (Des3_InitCavium(enc->des3, devId) != 0) {
wolfSSL 0:d92f9d21154c 2029 WOLFSSL_MSG("Des3_InitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 2030 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 2031 }
wolfSSL 0:d92f9d21154c 2032 }
wolfSSL 0:d92f9d21154c 2033 if (dec) {
wolfSSL 0:d92f9d21154c 2034 if (Des3_InitCavium(dec->des3, devId) != 0) {
wolfSSL 0:d92f9d21154c 2035 WOLFSSL_MSG("Des3_InitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 2036 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 2037 }
wolfSSL 0:d92f9d21154c 2038 }
wolfSSL 0:d92f9d21154c 2039 }
wolfSSL 0:d92f9d21154c 2040 #endif
wolfSSL 0:d92f9d21154c 2041 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2042 if (enc) {
wolfSSL 0:d92f9d21154c 2043 desRet = wc_Des3_SetKey(enc->des3, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2044 keys->client_write_IV, DES_ENCRYPTION);
wolfSSL 0:d92f9d21154c 2045 if (desRet != 0) return desRet;
wolfSSL 0:d92f9d21154c 2046 }
wolfSSL 0:d92f9d21154c 2047 if (dec) {
wolfSSL 0:d92f9d21154c 2048 desRet = wc_Des3_SetKey(dec->des3, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2049 keys->server_write_IV, DES_DECRYPTION);
wolfSSL 0:d92f9d21154c 2050 if (desRet != 0) return desRet;
wolfSSL 0:d92f9d21154c 2051 }
wolfSSL 0:d92f9d21154c 2052 }
wolfSSL 0:d92f9d21154c 2053 else {
wolfSSL 0:d92f9d21154c 2054 if (enc) {
wolfSSL 0:d92f9d21154c 2055 desRet = wc_Des3_SetKey(enc->des3, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2056 keys->server_write_IV, DES_ENCRYPTION);
wolfSSL 0:d92f9d21154c 2057 if (desRet != 0) return desRet;
wolfSSL 0:d92f9d21154c 2058 }
wolfSSL 0:d92f9d21154c 2059 if (dec) {
wolfSSL 0:d92f9d21154c 2060 desRet = wc_Des3_SetKey(dec->des3, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2061 keys->client_write_IV, DES_DECRYPTION);
wolfSSL 0:d92f9d21154c 2062 if (desRet != 0) return desRet;
wolfSSL 0:d92f9d21154c 2063 }
wolfSSL 0:d92f9d21154c 2064 }
wolfSSL 0:d92f9d21154c 2065 if (enc)
wolfSSL 0:d92f9d21154c 2066 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2067 if (dec)
wolfSSL 0:d92f9d21154c 2068 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2069 }
wolfSSL 0:d92f9d21154c 2070 #endif
wolfSSL 0:d92f9d21154c 2071
wolfSSL 0:d92f9d21154c 2072 #ifdef BUILD_AES
wolfSSL 0:d92f9d21154c 2073 if (specs->bulk_cipher_algorithm == wolfssl_aes) {
wolfSSL 0:d92f9d21154c 2074 int aesRet = 0;
wolfSSL 0:d92f9d21154c 2075
wolfSSL 0:d92f9d21154c 2076 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2077 enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2078 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2079 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2080 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2081 dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2082 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2083 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2084 #ifdef HAVE_CAVIUM
wolfSSL 0:d92f9d21154c 2085 if (devId != NO_CAVIUM_DEVICE) {
wolfSSL 0:d92f9d21154c 2086 if (enc) {
wolfSSL 0:d92f9d21154c 2087 if (wc_AesInitCavium(enc->aes, devId) != 0) {
wolfSSL 0:d92f9d21154c 2088 WOLFSSL_MSG("AesInitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 2089 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 2090 }
wolfSSL 0:d92f9d21154c 2091 }
wolfSSL 0:d92f9d21154c 2092 if (dec) {
wolfSSL 0:d92f9d21154c 2093 if (wc_AesInitCavium(dec->aes, devId) != 0) {
wolfSSL 0:d92f9d21154c 2094 WOLFSSL_MSG("AesInitCavium failed in SetKeys");
wolfSSL 0:d92f9d21154c 2095 return CAVIUM_INIT_E;
wolfSSL 0:d92f9d21154c 2096 }
wolfSSL 0:d92f9d21154c 2097 }
wolfSSL 0:d92f9d21154c 2098 }
wolfSSL 0:d92f9d21154c 2099 #endif
wolfSSL 0:d92f9d21154c 2100 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2101 if (enc) {
wolfSSL 0:d92f9d21154c 2102 aesRet = wc_AesSetKey(enc->aes, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2103 specs->key_size, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2104 AES_ENCRYPTION);
wolfSSL 0:d92f9d21154c 2105 if (aesRet != 0) return aesRet;
wolfSSL 0:d92f9d21154c 2106 }
wolfSSL 0:d92f9d21154c 2107 if (dec) {
wolfSSL 0:d92f9d21154c 2108 aesRet = wc_AesSetKey(dec->aes, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2109 specs->key_size, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2110 AES_DECRYPTION);
wolfSSL 0:d92f9d21154c 2111 if (aesRet != 0) return aesRet;
wolfSSL 0:d92f9d21154c 2112 }
wolfSSL 0:d92f9d21154c 2113 }
wolfSSL 0:d92f9d21154c 2114 else {
wolfSSL 0:d92f9d21154c 2115 if (enc) {
wolfSSL 0:d92f9d21154c 2116 aesRet = wc_AesSetKey(enc->aes, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2117 specs->key_size, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2118 AES_ENCRYPTION);
wolfSSL 0:d92f9d21154c 2119 if (aesRet != 0) return aesRet;
wolfSSL 0:d92f9d21154c 2120 }
wolfSSL 0:d92f9d21154c 2121 if (dec) {
wolfSSL 0:d92f9d21154c 2122 aesRet = wc_AesSetKey(dec->aes, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2123 specs->key_size, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2124 AES_DECRYPTION);
wolfSSL 0:d92f9d21154c 2125 if (aesRet != 0) return aesRet;
wolfSSL 0:d92f9d21154c 2126 }
wolfSSL 0:d92f9d21154c 2127 }
wolfSSL 0:d92f9d21154c 2128 if (enc)
wolfSSL 0:d92f9d21154c 2129 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2130 if (dec)
wolfSSL 0:d92f9d21154c 2131 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2132 }
wolfSSL 0:d92f9d21154c 2133 #endif
wolfSSL 0:d92f9d21154c 2134
wolfSSL 0:d92f9d21154c 2135 #ifdef BUILD_AESGCM
wolfSSL 0:d92f9d21154c 2136 if (specs->bulk_cipher_algorithm == wolfssl_aes_gcm) {
wolfSSL 0:d92f9d21154c 2137 int gcmRet;
wolfSSL 0:d92f9d21154c 2138
wolfSSL 0:d92f9d21154c 2139 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2140 enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2141 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2142 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2143 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2144 dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2145 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2146 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2147
wolfSSL 0:d92f9d21154c 2148 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2149 if (enc) {
wolfSSL 0:d92f9d21154c 2150 gcmRet = wc_AesGcmSetKey(enc->aes, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2151 specs->key_size);
wolfSSL 0:d92f9d21154c 2152 if (gcmRet != 0) return gcmRet;
wolfSSL 0:d92f9d21154c 2153 XMEMCPY(keys->aead_enc_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2154 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2155 }
wolfSSL 0:d92f9d21154c 2156 if (dec) {
wolfSSL 0:d92f9d21154c 2157 gcmRet = wc_AesGcmSetKey(dec->aes, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2158 specs->key_size);
wolfSSL 0:d92f9d21154c 2159 if (gcmRet != 0) return gcmRet;
wolfSSL 0:d92f9d21154c 2160 XMEMCPY(keys->aead_dec_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2161 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2162 }
wolfSSL 0:d92f9d21154c 2163 }
wolfSSL 0:d92f9d21154c 2164 else {
wolfSSL 0:d92f9d21154c 2165 if (enc) {
wolfSSL 0:d92f9d21154c 2166 gcmRet = wc_AesGcmSetKey(enc->aes, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2167 specs->key_size);
wolfSSL 0:d92f9d21154c 2168 if (gcmRet != 0) return gcmRet;
wolfSSL 0:d92f9d21154c 2169 XMEMCPY(keys->aead_enc_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2170 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2171 }
wolfSSL 0:d92f9d21154c 2172 if (dec) {
wolfSSL 0:d92f9d21154c 2173 gcmRet = wc_AesGcmSetKey(dec->aes, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2174 specs->key_size);
wolfSSL 0:d92f9d21154c 2175 if (gcmRet != 0) return gcmRet;
wolfSSL 0:d92f9d21154c 2176 XMEMCPY(keys->aead_dec_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2177 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2178 }
wolfSSL 0:d92f9d21154c 2179 }
wolfSSL 0:d92f9d21154c 2180 if (enc)
wolfSSL 0:d92f9d21154c 2181 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2182 if (dec)
wolfSSL 0:d92f9d21154c 2183 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2184 }
wolfSSL 0:d92f9d21154c 2185 #endif
wolfSSL 0:d92f9d21154c 2186
wolfSSL 0:d92f9d21154c 2187 #ifdef HAVE_AESCCM
wolfSSL 0:d92f9d21154c 2188 if (specs->bulk_cipher_algorithm == wolfssl_aes_ccm) {
wolfSSL 0:d92f9d21154c 2189 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2190 enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2191 if (enc && enc->aes == NULL)
wolfSSL 0:d92f9d21154c 2192 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2193 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2194 dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2195 if (dec && dec->aes == NULL)
wolfSSL 0:d92f9d21154c 2196 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2197
wolfSSL 0:d92f9d21154c 2198 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2199 if (enc) {
wolfSSL 0:d92f9d21154c 2200 wc_AesCcmSetKey(enc->aes, keys->client_write_key, specs->key_size);
wolfSSL 0:d92f9d21154c 2201 XMEMCPY(keys->aead_enc_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2202 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2203 }
wolfSSL 0:d92f9d21154c 2204 if (dec) {
wolfSSL 0:d92f9d21154c 2205 wc_AesCcmSetKey(dec->aes, keys->server_write_key, specs->key_size);
wolfSSL 0:d92f9d21154c 2206 XMEMCPY(keys->aead_dec_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2207 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2208 }
wolfSSL 0:d92f9d21154c 2209 }
wolfSSL 0:d92f9d21154c 2210 else {
wolfSSL 0:d92f9d21154c 2211 if (enc) {
wolfSSL 0:d92f9d21154c 2212 wc_AesCcmSetKey(enc->aes, keys->server_write_key, specs->key_size);
wolfSSL 0:d92f9d21154c 2213 XMEMCPY(keys->aead_enc_imp_IV, keys->server_write_IV,
wolfSSL 0:d92f9d21154c 2214 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2215 }
wolfSSL 0:d92f9d21154c 2216 if (dec) {
wolfSSL 0:d92f9d21154c 2217 wc_AesCcmSetKey(dec->aes, keys->client_write_key, specs->key_size);
wolfSSL 0:d92f9d21154c 2218 XMEMCPY(keys->aead_dec_imp_IV, keys->client_write_IV,
wolfSSL 0:d92f9d21154c 2219 AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2220 }
wolfSSL 0:d92f9d21154c 2221 }
wolfSSL 0:d92f9d21154c 2222 if (enc)
wolfSSL 0:d92f9d21154c 2223 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2224 if (dec)
wolfSSL 0:d92f9d21154c 2225 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2226 }
wolfSSL 0:d92f9d21154c 2227 #endif
wolfSSL 0:d92f9d21154c 2228
wolfSSL 0:d92f9d21154c 2229 #ifdef HAVE_CAMELLIA
wolfSSL 0:d92f9d21154c 2230 if (specs->bulk_cipher_algorithm == wolfssl_camellia) {
wolfSSL 0:d92f9d21154c 2231 int camRet;
wolfSSL 0:d92f9d21154c 2232
wolfSSL 0:d92f9d21154c 2233 if (enc && enc->cam == NULL)
wolfSSL 0:d92f9d21154c 2234 enc->cam =
wolfSSL 0:d92f9d21154c 2235 (Camellia*)XMALLOC(sizeof(Camellia), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2236 if (enc && enc->cam == NULL)
wolfSSL 0:d92f9d21154c 2237 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2238
wolfSSL 0:d92f9d21154c 2239 if (dec && dec->cam == NULL)
wolfSSL 0:d92f9d21154c 2240 dec->cam =
wolfSSL 0:d92f9d21154c 2241 (Camellia*)XMALLOC(sizeof(Camellia), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2242 if (dec && dec->cam == NULL)
wolfSSL 0:d92f9d21154c 2243 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2244
wolfSSL 0:d92f9d21154c 2245 if (side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2246 if (enc) {
wolfSSL 0:d92f9d21154c 2247 camRet = wc_CamelliaSetKey(enc->cam, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2248 specs->key_size, keys->client_write_IV);
wolfSSL 0:d92f9d21154c 2249 if (camRet != 0) return camRet;
wolfSSL 0:d92f9d21154c 2250 }
wolfSSL 0:d92f9d21154c 2251 if (dec) {
wolfSSL 0:d92f9d21154c 2252 camRet = wc_CamelliaSetKey(dec->cam, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2253 specs->key_size, keys->server_write_IV);
wolfSSL 0:d92f9d21154c 2254 if (camRet != 0) return camRet;
wolfSSL 0:d92f9d21154c 2255 }
wolfSSL 0:d92f9d21154c 2256 }
wolfSSL 0:d92f9d21154c 2257 else {
wolfSSL 0:d92f9d21154c 2258 if (enc) {
wolfSSL 0:d92f9d21154c 2259 camRet = wc_CamelliaSetKey(enc->cam, keys->server_write_key,
wolfSSL 0:d92f9d21154c 2260 specs->key_size, keys->server_write_IV);
wolfSSL 0:d92f9d21154c 2261 if (camRet != 0) return camRet;
wolfSSL 0:d92f9d21154c 2262 }
wolfSSL 0:d92f9d21154c 2263 if (dec) {
wolfSSL 0:d92f9d21154c 2264 camRet = wc_CamelliaSetKey(dec->cam, keys->client_write_key,
wolfSSL 0:d92f9d21154c 2265 specs->key_size, keys->client_write_IV);
wolfSSL 0:d92f9d21154c 2266 if (camRet != 0) return camRet;
wolfSSL 0:d92f9d21154c 2267 }
wolfSSL 0:d92f9d21154c 2268 }
wolfSSL 0:d92f9d21154c 2269 if (enc)
wolfSSL 0:d92f9d21154c 2270 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2271 if (dec)
wolfSSL 0:d92f9d21154c 2272 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2273 }
wolfSSL 0:d92f9d21154c 2274 #endif
wolfSSL 0:d92f9d21154c 2275
wolfSSL 0:d92f9d21154c 2276 #ifdef HAVE_NULL_CIPHER
wolfSSL 0:d92f9d21154c 2277 if (specs->bulk_cipher_algorithm == wolfssl_cipher_null) {
wolfSSL 0:d92f9d21154c 2278 if (enc)
wolfSSL 0:d92f9d21154c 2279 enc->setup = 1;
wolfSSL 0:d92f9d21154c 2280 if (dec)
wolfSSL 0:d92f9d21154c 2281 dec->setup = 1;
wolfSSL 0:d92f9d21154c 2282 }
wolfSSL 0:d92f9d21154c 2283 #endif
wolfSSL 0:d92f9d21154c 2284
wolfSSL 0:d92f9d21154c 2285 if (enc)
wolfSSL 0:d92f9d21154c 2286 keys->sequence_number = 0;
wolfSSL 0:d92f9d21154c 2287 if (dec)
wolfSSL 0:d92f9d21154c 2288 keys->peer_sequence_number = 0;
wolfSSL 0:d92f9d21154c 2289 (void)side;
wolfSSL 0:d92f9d21154c 2290 (void)heap;
wolfSSL 0:d92f9d21154c 2291 (void)enc;
wolfSSL 0:d92f9d21154c 2292 (void)dec;
wolfSSL 0:d92f9d21154c 2293 (void)specs;
wolfSSL 0:d92f9d21154c 2294 (void)devId;
wolfSSL 0:d92f9d21154c 2295
wolfSSL 0:d92f9d21154c 2296 return 0;
wolfSSL 0:d92f9d21154c 2297 }
wolfSSL 0:d92f9d21154c 2298
wolfSSL 0:d92f9d21154c 2299
wolfSSL 0:d92f9d21154c 2300 #ifdef HAVE_ONE_TIME_AUTH
wolfSSL 0:d92f9d21154c 2301 /* set one time authentication keys */
wolfSSL 0:d92f9d21154c 2302 static int SetAuthKeys(OneTimeAuth* authentication, Keys* keys,
wolfSSL 0:d92f9d21154c 2303 CipherSpecs* specs, void* heap, int devId)
wolfSSL 0:d92f9d21154c 2304 {
wolfSSL 0:d92f9d21154c 2305
wolfSSL 0:d92f9d21154c 2306 #ifdef HAVE_POLY1305
wolfSSL 0:d92f9d21154c 2307 /* set up memory space for poly1305 */
wolfSSL 0:d92f9d21154c 2308 if (authentication && authentication->poly1305 == NULL)
wolfSSL 0:d92f9d21154c 2309 authentication->poly1305 =
wolfSSL 0:d92f9d21154c 2310 (Poly1305*)XMALLOC(sizeof(Poly1305), heap, DYNAMIC_TYPE_CIPHER);
wolfSSL 0:d92f9d21154c 2311 if (authentication && authentication->poly1305 == NULL)
wolfSSL 0:d92f9d21154c 2312 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2313 if (authentication)
wolfSSL 0:d92f9d21154c 2314 authentication->setup = 1;
wolfSSL 0:d92f9d21154c 2315 #endif
wolfSSL 0:d92f9d21154c 2316 (void)heap;
wolfSSL 0:d92f9d21154c 2317 (void)keys;
wolfSSL 0:d92f9d21154c 2318 (void)specs;
wolfSSL 0:d92f9d21154c 2319 (void)devId;
wolfSSL 0:d92f9d21154c 2320
wolfSSL 0:d92f9d21154c 2321 return 0;
wolfSSL 0:d92f9d21154c 2322 }
wolfSSL 0:d92f9d21154c 2323 #endif /* HAVE_ONE_TIME_AUTH */
wolfSSL 0:d92f9d21154c 2324
wolfSSL 0:d92f9d21154c 2325
wolfSSL 0:d92f9d21154c 2326 /* Set wc_encrypt/wc_decrypt or both sides of key setup
wolfSSL 0:d92f9d21154c 2327 * note: use wc_encrypt to avoid shadowing global encrypt
wolfSSL 0:d92f9d21154c 2328 * declared in unistd.h
wolfSSL 0:d92f9d21154c 2329 */
wolfSSL 0:d92f9d21154c 2330 int SetKeysSide(WOLFSSL* ssl, enum encrypt_side side)
wolfSSL 0:d92f9d21154c 2331 {
wolfSSL 0:d92f9d21154c 2332 int devId = NO_CAVIUM_DEVICE, ret, copy = 0;
wolfSSL 0:d92f9d21154c 2333 Ciphers* wc_encrypt = NULL;
wolfSSL 0:d92f9d21154c 2334 Ciphers* wc_decrypt = NULL;
wolfSSL 0:d92f9d21154c 2335 Keys* keys = &ssl->keys;
wolfSSL 0:d92f9d21154c 2336
wolfSSL 0:d92f9d21154c 2337 (void)copy;
wolfSSL 0:d92f9d21154c 2338
wolfSSL 0:d92f9d21154c 2339 #ifdef HAVE_CAVIUM
wolfSSL 0:d92f9d21154c 2340 devId = ssl->devId;
wolfSSL 0:d92f9d21154c 2341 #endif
wolfSSL 0:d92f9d21154c 2342
wolfSSL 0:d92f9d21154c 2343 #ifdef HAVE_SECURE_RENEGOTIATION
wolfSSL 0:d92f9d21154c 2344 if (ssl->secure_renegotiation && ssl->secure_renegotiation->cache_status) {
wolfSSL 0:d92f9d21154c 2345 keys = &ssl->secure_renegotiation->tmp_keys;
wolfSSL 0:d92f9d21154c 2346 copy = 1;
wolfSSL 0:d92f9d21154c 2347 }
wolfSSL 0:d92f9d21154c 2348 #endif /* HAVE_SECURE_RENEGOTIATION */
wolfSSL 0:d92f9d21154c 2349
wolfSSL 0:d92f9d21154c 2350 switch (side) {
wolfSSL 0:d92f9d21154c 2351 case ENCRYPT_SIDE_ONLY:
wolfSSL 0:d92f9d21154c 2352 wc_encrypt = &ssl->encrypt;
wolfSSL 0:d92f9d21154c 2353 break;
wolfSSL 0:d92f9d21154c 2354
wolfSSL 0:d92f9d21154c 2355 case DECRYPT_SIDE_ONLY:
wolfSSL 0:d92f9d21154c 2356 wc_decrypt = &ssl->decrypt;
wolfSSL 0:d92f9d21154c 2357 break;
wolfSSL 0:d92f9d21154c 2358
wolfSSL 0:d92f9d21154c 2359 case ENCRYPT_AND_DECRYPT_SIDE:
wolfSSL 0:d92f9d21154c 2360 wc_encrypt = &ssl->encrypt;
wolfSSL 0:d92f9d21154c 2361 wc_decrypt = &ssl->decrypt;
wolfSSL 0:d92f9d21154c 2362 break;
wolfSSL 0:d92f9d21154c 2363
wolfSSL 0:d92f9d21154c 2364 default:
wolfSSL 0:d92f9d21154c 2365 return BAD_FUNC_ARG;
wolfSSL 0:d92f9d21154c 2366 }
wolfSSL 0:d92f9d21154c 2367
wolfSSL 0:d92f9d21154c 2368 #ifdef HAVE_ONE_TIME_AUTH
wolfSSL 0:d92f9d21154c 2369 if (!ssl->auth.setup && ssl->specs.bulk_cipher_algorithm == wolfssl_chacha){
wolfSSL 0:d92f9d21154c 2370 ret = SetAuthKeys(&ssl->auth, keys, &ssl->specs, ssl->heap, devId);
wolfSSL 0:d92f9d21154c 2371 if (ret != 0)
wolfSSL 0:d92f9d21154c 2372 return ret;
wolfSSL 0:d92f9d21154c 2373 }
wolfSSL 0:d92f9d21154c 2374 #endif
wolfSSL 0:d92f9d21154c 2375
wolfSSL 0:d92f9d21154c 2376 ret = SetKeys(wc_encrypt, wc_decrypt, keys, &ssl->specs, ssl->options.side,
wolfSSL 0:d92f9d21154c 2377 ssl->heap, devId);
wolfSSL 0:d92f9d21154c 2378
wolfSSL 0:d92f9d21154c 2379 #ifdef HAVE_SECURE_RENEGOTIATION
wolfSSL 0:d92f9d21154c 2380 if (copy) {
wolfSSL 0:d92f9d21154c 2381 int clientCopy = 0;
wolfSSL 0:d92f9d21154c 2382
wolfSSL 0:d92f9d21154c 2383 if (ssl->options.side == WOLFSSL_CLIENT_END && wc_encrypt)
wolfSSL 0:d92f9d21154c 2384 clientCopy = 1;
wolfSSL 0:d92f9d21154c 2385 else if (ssl->options.side == WOLFSSL_SERVER_END && wc_decrypt)
wolfSSL 0:d92f9d21154c 2386 clientCopy = 1;
wolfSSL 0:d92f9d21154c 2387
wolfSSL 0:d92f9d21154c 2388 if (clientCopy) {
wolfSSL 0:d92f9d21154c 2389 XMEMCPY(ssl->keys.client_write_MAC_secret,
wolfSSL 0:d92f9d21154c 2390 keys->client_write_MAC_secret, MAX_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2391 XMEMCPY(ssl->keys.client_write_key,
wolfSSL 0:d92f9d21154c 2392 keys->client_write_key, AES_256_KEY_SIZE);
wolfSSL 0:d92f9d21154c 2393 XMEMCPY(ssl->keys.client_write_IV,
wolfSSL 0:d92f9d21154c 2394 keys->client_write_IV, AES_IV_SIZE);
wolfSSL 0:d92f9d21154c 2395 } else {
wolfSSL 0:d92f9d21154c 2396 XMEMCPY(ssl->keys.server_write_MAC_secret,
wolfSSL 0:d92f9d21154c 2397 keys->server_write_MAC_secret, MAX_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2398 XMEMCPY(ssl->keys.server_write_key,
wolfSSL 0:d92f9d21154c 2399 keys->server_write_key, AES_256_KEY_SIZE);
wolfSSL 0:d92f9d21154c 2400 XMEMCPY(ssl->keys.server_write_IV,
wolfSSL 0:d92f9d21154c 2401 keys->server_write_IV, AES_IV_SIZE);
wolfSSL 0:d92f9d21154c 2402 }
wolfSSL 0:d92f9d21154c 2403 if (wc_encrypt) {
wolfSSL 0:d92f9d21154c 2404 ssl->keys.sequence_number = keys->sequence_number;
wolfSSL 0:d92f9d21154c 2405 #ifdef HAVE_AEAD
wolfSSL 0:d92f9d21154c 2406 if (ssl->specs.cipher_type == aead) {
wolfSSL 0:d92f9d21154c 2407 /* Initialize the AES-GCM/CCM explicit IV to a zero. */
wolfSSL 0:d92f9d21154c 2408 XMEMCPY(ssl->keys.aead_exp_IV, keys->aead_exp_IV,
wolfSSL 0:d92f9d21154c 2409 AEAD_EXP_IV_SZ);
wolfSSL 0:d92f9d21154c 2410
wolfSSL 0:d92f9d21154c 2411 /* Initialize encrypt implicit IV by encrypt side */
wolfSSL 0:d92f9d21154c 2412 if (ssl->options.side == WOLFSSL_CLIENT_END) {
wolfSSL 0:d92f9d21154c 2413 XMEMCPY(ssl->keys.aead_enc_imp_IV,
wolfSSL 0:d92f9d21154c 2414 keys->client_write_IV, AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2415 } else {
wolfSSL 0:d92f9d21154c 2416 XMEMCPY(ssl->keys.aead_enc_imp_IV,
wolfSSL 0:d92f9d21154c 2417 keys->server_write_IV, AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2418 }
wolfSSL 0:d92f9d21154c 2419 }
wolfSSL 0:d92f9d21154c 2420 #endif
wolfSSL 0:d92f9d21154c 2421 }
wolfSSL 0:d92f9d21154c 2422 if (wc_decrypt) {
wolfSSL 0:d92f9d21154c 2423 ssl->keys.peer_sequence_number = keys->peer_sequence_number;
wolfSSL 0:d92f9d21154c 2424 #ifdef HAVE_AEAD
wolfSSL 0:d92f9d21154c 2425 if (ssl->specs.cipher_type == aead) {
wolfSSL 0:d92f9d21154c 2426 /* Initialize decrypt implicit IV by decrypt side */
wolfSSL 0:d92f9d21154c 2427 if (ssl->options.side == WOLFSSL_SERVER_END) {
wolfSSL 0:d92f9d21154c 2428 XMEMCPY(ssl->keys.aead_dec_imp_IV,
wolfSSL 0:d92f9d21154c 2429 keys->client_write_IV, AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2430 } else {
wolfSSL 0:d92f9d21154c 2431 XMEMCPY(ssl->keys.aead_dec_imp_IV,
wolfSSL 0:d92f9d21154c 2432 keys->server_write_IV, AEAD_IMP_IV_SZ);
wolfSSL 0:d92f9d21154c 2433 }
wolfSSL 0:d92f9d21154c 2434 }
wolfSSL 0:d92f9d21154c 2435 #endif
wolfSSL 0:d92f9d21154c 2436 }
wolfSSL 0:d92f9d21154c 2437 ssl->secure_renegotiation->cache_status++;
wolfSSL 0:d92f9d21154c 2438 }
wolfSSL 0:d92f9d21154c 2439 #endif /* HAVE_SECURE_RENEGOTIATION */
wolfSSL 0:d92f9d21154c 2440
wolfSSL 0:d92f9d21154c 2441 return ret;
wolfSSL 0:d92f9d21154c 2442 }
wolfSSL 0:d92f9d21154c 2443
wolfSSL 0:d92f9d21154c 2444
wolfSSL 0:d92f9d21154c 2445 /* TLS can call too */
wolfSSL 0:d92f9d21154c 2446 int StoreKeys(WOLFSSL* ssl, const byte* keyData)
wolfSSL 0:d92f9d21154c 2447 {
wolfSSL 0:d92f9d21154c 2448 int sz, i = 0;
wolfSSL 0:d92f9d21154c 2449 Keys* keys = &ssl->keys;
wolfSSL 0:d92f9d21154c 2450
wolfSSL 0:d92f9d21154c 2451 #ifdef HAVE_SECURE_RENEGOTIATION
wolfSSL 0:d92f9d21154c 2452 if (ssl->secure_renegotiation && ssl->secure_renegotiation->cache_status ==
wolfSSL 0:d92f9d21154c 2453 SCR_CACHE_NEEDED) {
wolfSSL 0:d92f9d21154c 2454 keys = &ssl->secure_renegotiation->tmp_keys;
wolfSSL 0:d92f9d21154c 2455 ssl->secure_renegotiation->cache_status++;
wolfSSL 0:d92f9d21154c 2456 }
wolfSSL 0:d92f9d21154c 2457 #endif /* HAVE_SECURE_RENEGOTIATION */
wolfSSL 0:d92f9d21154c 2458
wolfSSL 0:d92f9d21154c 2459 if (ssl->specs.cipher_type != aead) {
wolfSSL 0:d92f9d21154c 2460 sz = ssl->specs.hash_size;
wolfSSL 0:d92f9d21154c 2461 XMEMCPY(keys->client_write_MAC_secret,&keyData[i], sz);
wolfSSL 0:d92f9d21154c 2462 i += sz;
wolfSSL 0:d92f9d21154c 2463 XMEMCPY(keys->server_write_MAC_secret,&keyData[i], sz);
wolfSSL 0:d92f9d21154c 2464 i += sz;
wolfSSL 0:d92f9d21154c 2465 }
wolfSSL 0:d92f9d21154c 2466 sz = ssl->specs.key_size;
wolfSSL 0:d92f9d21154c 2467 XMEMCPY(keys->client_write_key, &keyData[i], sz);
wolfSSL 0:d92f9d21154c 2468 i += sz;
wolfSSL 0:d92f9d21154c 2469 XMEMCPY(keys->server_write_key, &keyData[i], sz);
wolfSSL 0:d92f9d21154c 2470 i += sz;
wolfSSL 0:d92f9d21154c 2471
wolfSSL 0:d92f9d21154c 2472 sz = ssl->specs.iv_size;
wolfSSL 0:d92f9d21154c 2473 XMEMCPY(keys->client_write_IV, &keyData[i], sz);
wolfSSL 0:d92f9d21154c 2474 i += sz;
wolfSSL 0:d92f9d21154c 2475 XMEMCPY(keys->server_write_IV, &keyData[i], sz);
wolfSSL 0:d92f9d21154c 2476
wolfSSL 0:d92f9d21154c 2477 #ifdef HAVE_AEAD
wolfSSL 0:d92f9d21154c 2478 if (ssl->specs.cipher_type == aead) {
wolfSSL 0:d92f9d21154c 2479 /* Initialize the AES-GCM/CCM explicit IV to a zero. */
wolfSSL 0:d92f9d21154c 2480 XMEMSET(keys->aead_exp_IV, 0, AEAD_EXP_IV_SZ);
wolfSSL 0:d92f9d21154c 2481 }
wolfSSL 0:d92f9d21154c 2482 #endif
wolfSSL 0:d92f9d21154c 2483
wolfSSL 0:d92f9d21154c 2484 return 0;
wolfSSL 0:d92f9d21154c 2485 }
wolfSSL 0:d92f9d21154c 2486
wolfSSL 0:d92f9d21154c 2487 #ifndef NO_OLD_TLS
wolfSSL 0:d92f9d21154c 2488 int DeriveKeys(WOLFSSL* ssl)
wolfSSL 0:d92f9d21154c 2489 {
wolfSSL 0:d92f9d21154c 2490 int length = 2 * ssl->specs.hash_size +
wolfSSL 0:d92f9d21154c 2491 2 * ssl->specs.key_size +
wolfSSL 0:d92f9d21154c 2492 2 * ssl->specs.iv_size;
wolfSSL 0:d92f9d21154c 2493 int rounds = (length + MD5_DIGEST_SIZE - 1 ) / MD5_DIGEST_SIZE, i;
wolfSSL 0:d92f9d21154c 2494 int ret = 0;
wolfSSL 0:d92f9d21154c 2495
wolfSSL 0:d92f9d21154c 2496 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2497 byte* shaOutput;
wolfSSL 0:d92f9d21154c 2498 byte* md5Input;
wolfSSL 0:d92f9d21154c 2499 byte* shaInput;
wolfSSL 0:d92f9d21154c 2500 byte* keyData;
wolfSSL 0:d92f9d21154c 2501 Md5* md5;
wolfSSL 0:d92f9d21154c 2502 Sha* sha;
wolfSSL 0:d92f9d21154c 2503 #else
wolfSSL 0:d92f9d21154c 2504 byte shaOutput[SHA_DIGEST_SIZE];
wolfSSL 0:d92f9d21154c 2505 byte md5Input[SECRET_LEN + SHA_DIGEST_SIZE];
wolfSSL 0:d92f9d21154c 2506 byte shaInput[KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN];
wolfSSL 0:d92f9d21154c 2507 byte keyData[KEY_PREFIX * MD5_DIGEST_SIZE];
wolfSSL 0:d92f9d21154c 2508 Md5 md5[1];
wolfSSL 0:d92f9d21154c 2509 Sha sha[1];
wolfSSL 0:d92f9d21154c 2510 #endif
wolfSSL 0:d92f9d21154c 2511
wolfSSL 0:d92f9d21154c 2512 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2513 shaOutput = (byte*)XMALLOC(SHA_DIGEST_SIZE,
wolfSSL 0:d92f9d21154c 2514 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2515 md5Input = (byte*)XMALLOC(SECRET_LEN + SHA_DIGEST_SIZE,
wolfSSL 0:d92f9d21154c 2516 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2517 shaInput = (byte*)XMALLOC(KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN,
wolfSSL 0:d92f9d21154c 2518 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2519 keyData = (byte*)XMALLOC(KEY_PREFIX * MD5_DIGEST_SIZE,
wolfSSL 0:d92f9d21154c 2520 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2521 md5 = (Md5*)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2522 sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2523
wolfSSL 0:d92f9d21154c 2524 if (shaOutput == NULL || md5Input == NULL || shaInput == NULL ||
wolfSSL 0:d92f9d21154c 2525 keyData == NULL || md5 == NULL || sha == NULL) {
wolfSSL 0:d92f9d21154c 2526 if (shaOutput) XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2527 if (md5Input) XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2528 if (shaInput) XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2529 if (keyData) XFREE(keyData, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2530 if (md5) XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2531 if (sha) XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2532
wolfSSL 0:d92f9d21154c 2533 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2534 }
wolfSSL 0:d92f9d21154c 2535 #endif
wolfSSL 0:d92f9d21154c 2536
wolfSSL 0:d92f9d21154c 2537 wc_InitMd5(md5);
wolfSSL 0:d92f9d21154c 2538
wolfSSL 0:d92f9d21154c 2539 ret = wc_InitSha(sha);
wolfSSL 0:d92f9d21154c 2540
wolfSSL 0:d92f9d21154c 2541 if (ret == 0) {
wolfSSL 0:d92f9d21154c 2542 XMEMCPY(md5Input, ssl->arrays->masterSecret, SECRET_LEN);
wolfSSL 0:d92f9d21154c 2543
wolfSSL 0:d92f9d21154c 2544 for (i = 0; i < rounds; ++i) {
wolfSSL 0:d92f9d21154c 2545 int j = i + 1;
wolfSSL 0:d92f9d21154c 2546 int idx = j;
wolfSSL 0:d92f9d21154c 2547
wolfSSL 0:d92f9d21154c 2548 if (!SetPrefix(shaInput, i)) {
wolfSSL 0:d92f9d21154c 2549 ret = PREFIX_ERROR;
wolfSSL 0:d92f9d21154c 2550 break;
wolfSSL 0:d92f9d21154c 2551 }
wolfSSL 0:d92f9d21154c 2552
wolfSSL 0:d92f9d21154c 2553 XMEMCPY(shaInput + idx, ssl->arrays->masterSecret, SECRET_LEN);
wolfSSL 0:d92f9d21154c 2554 idx += SECRET_LEN;
wolfSSL 0:d92f9d21154c 2555 XMEMCPY(shaInput + idx, ssl->arrays->serverRandom, RAN_LEN);
wolfSSL 0:d92f9d21154c 2556 idx += RAN_LEN;
wolfSSL 0:d92f9d21154c 2557 XMEMCPY(shaInput + idx, ssl->arrays->clientRandom, RAN_LEN);
wolfSSL 0:d92f9d21154c 2558
wolfSSL 0:d92f9d21154c 2559 wc_ShaUpdate(sha, shaInput, (KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN)
wolfSSL 0:d92f9d21154c 2560 - KEY_PREFIX + j);
wolfSSL 0:d92f9d21154c 2561 wc_ShaFinal(sha, shaOutput);
wolfSSL 0:d92f9d21154c 2562
wolfSSL 0:d92f9d21154c 2563 XMEMCPY(md5Input + SECRET_LEN, shaOutput, SHA_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2564 wc_Md5Update(md5, md5Input, SECRET_LEN + SHA_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2565 wc_Md5Final(md5, keyData + i * MD5_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2566 }
wolfSSL 0:d92f9d21154c 2567
wolfSSL 0:d92f9d21154c 2568 if (ret == 0)
wolfSSL 0:d92f9d21154c 2569 ret = StoreKeys(ssl, keyData);
wolfSSL 0:d92f9d21154c 2570 }
wolfSSL 0:d92f9d21154c 2571
wolfSSL 0:d92f9d21154c 2572 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2573 XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2574 XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2575 XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2576 XFREE(keyData, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2577 XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2578 XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2579 #endif
wolfSSL 0:d92f9d21154c 2580
wolfSSL 0:d92f9d21154c 2581 return ret;
wolfSSL 0:d92f9d21154c 2582 }
wolfSSL 0:d92f9d21154c 2583
wolfSSL 0:d92f9d21154c 2584
wolfSSL 0:d92f9d21154c 2585 static int CleanPreMaster(WOLFSSL* ssl)
wolfSSL 0:d92f9d21154c 2586 {
wolfSSL 0:d92f9d21154c 2587 int i, ret, sz = ssl->arrays->preMasterSz;
wolfSSL 0:d92f9d21154c 2588
wolfSSL 0:d92f9d21154c 2589 for (i = 0; i < sz; i++)
wolfSSL 0:d92f9d21154c 2590 ssl->arrays->preMasterSecret[i] = 0;
wolfSSL 0:d92f9d21154c 2591
wolfSSL 0:d92f9d21154c 2592 ret = wc_RNG_GenerateBlock(ssl->rng, ssl->arrays->preMasterSecret, sz);
wolfSSL 0:d92f9d21154c 2593 if (ret != 0)
wolfSSL 0:d92f9d21154c 2594 return ret;
wolfSSL 0:d92f9d21154c 2595
wolfSSL 0:d92f9d21154c 2596 for (i = 0; i < sz; i++)
wolfSSL 0:d92f9d21154c 2597 ssl->arrays->preMasterSecret[i] = 0;
wolfSSL 0:d92f9d21154c 2598
wolfSSL 0:d92f9d21154c 2599 return 0;
wolfSSL 0:d92f9d21154c 2600 }
wolfSSL 0:d92f9d21154c 2601
wolfSSL 0:d92f9d21154c 2602
wolfSSL 0:d92f9d21154c 2603 /* Create and store the master secret see page 32, 6.1 */
wolfSSL 0:d92f9d21154c 2604 static int MakeSslMasterSecret(WOLFSSL* ssl)
wolfSSL 0:d92f9d21154c 2605 {
wolfSSL 0:d92f9d21154c 2606 int i, ret;
wolfSSL 0:d92f9d21154c 2607 word32 idx;
wolfSSL 0:d92f9d21154c 2608 word32 pmsSz = ssl->arrays->preMasterSz;
wolfSSL 0:d92f9d21154c 2609
wolfSSL 0:d92f9d21154c 2610 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2611 byte* shaOutput;
wolfSSL 0:d92f9d21154c 2612 byte* md5Input;
wolfSSL 0:d92f9d21154c 2613 byte* shaInput;
wolfSSL 0:d92f9d21154c 2614 Md5* md5;
wolfSSL 0:d92f9d21154c 2615 Sha* sha;
wolfSSL 0:d92f9d21154c 2616 #else
wolfSSL 0:d92f9d21154c 2617 byte shaOutput[SHA_DIGEST_SIZE];
wolfSSL 0:d92f9d21154c 2618 byte md5Input[ENCRYPT_LEN + SHA_DIGEST_SIZE];
wolfSSL 0:d92f9d21154c 2619 byte shaInput[PREFIX + ENCRYPT_LEN + 2 * RAN_LEN];
wolfSSL 0:d92f9d21154c 2620 Md5 md5[1];
wolfSSL 0:d92f9d21154c 2621 Sha sha[1];
wolfSSL 0:d92f9d21154c 2622 #endif
wolfSSL 0:d92f9d21154c 2623
wolfSSL 0:d92f9d21154c 2624 #ifdef SHOW_SECRETS
wolfSSL 0:d92f9d21154c 2625 {
wolfSSL 0:d92f9d21154c 2626 word32 j;
wolfSSL 0:d92f9d21154c 2627 printf("pre master secret: ");
wolfSSL 0:d92f9d21154c 2628 for (j = 0; j < pmsSz; j++)
wolfSSL 0:d92f9d21154c 2629 printf("%02x", ssl->arrays->preMasterSecret[j]);
wolfSSL 0:d92f9d21154c 2630 printf("\n");
wolfSSL 0:d92f9d21154c 2631 }
wolfSSL 0:d92f9d21154c 2632 #endif
wolfSSL 0:d92f9d21154c 2633
wolfSSL 0:d92f9d21154c 2634 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2635 shaOutput = (byte*)XMALLOC(SHA_DIGEST_SIZE,
wolfSSL 0:d92f9d21154c 2636 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2637 md5Input = (byte*)XMALLOC(ENCRYPT_LEN + SHA_DIGEST_SIZE,
wolfSSL 0:d92f9d21154c 2638 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2639 shaInput = (byte*)XMALLOC(PREFIX + ENCRYPT_LEN + 2 * RAN_LEN,
wolfSSL 0:d92f9d21154c 2640 NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2641 md5 = (Md5*)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2642 sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2643
wolfSSL 0:d92f9d21154c 2644 if (shaOutput == NULL || md5Input == NULL || shaInput == NULL ||
wolfSSL 0:d92f9d21154c 2645 md5 == NULL || sha == NULL) {
wolfSSL 0:d92f9d21154c 2646 if (shaOutput) XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2647 if (md5Input) XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2648 if (shaInput) XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2649 if (md5) XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2650 if (sha) XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2651
wolfSSL 0:d92f9d21154c 2652 return MEMORY_E;
wolfSSL 0:d92f9d21154c 2653 }
wolfSSL 0:d92f9d21154c 2654 #endif
wolfSSL 0:d92f9d21154c 2655
wolfSSL 0:d92f9d21154c 2656 wc_InitMd5(md5);
wolfSSL 0:d92f9d21154c 2657
wolfSSL 0:d92f9d21154c 2658 ret = wc_InitSha(sha);
wolfSSL 0:d92f9d21154c 2659
wolfSSL 0:d92f9d21154c 2660 if (ret == 0) {
wolfSSL 0:d92f9d21154c 2661 XMEMCPY(md5Input, ssl->arrays->preMasterSecret, pmsSz);
wolfSSL 0:d92f9d21154c 2662
wolfSSL 0:d92f9d21154c 2663 for (i = 0; i < MASTER_ROUNDS; ++i) {
wolfSSL 0:d92f9d21154c 2664 byte prefix[KEY_PREFIX]; /* only need PREFIX bytes but static */
wolfSSL 0:d92f9d21154c 2665 if (!SetPrefix(prefix, i)) { /* analysis thinks will overrun */
wolfSSL 0:d92f9d21154c 2666 ret = PREFIX_ERROR;
wolfSSL 0:d92f9d21154c 2667 break;
wolfSSL 0:d92f9d21154c 2668 }
wolfSSL 0:d92f9d21154c 2669
wolfSSL 0:d92f9d21154c 2670 idx = 0;
wolfSSL 0:d92f9d21154c 2671 XMEMCPY(shaInput, prefix, i + 1);
wolfSSL 0:d92f9d21154c 2672 idx += i + 1;
wolfSSL 0:d92f9d21154c 2673
wolfSSL 0:d92f9d21154c 2674 XMEMCPY(shaInput + idx, ssl->arrays->preMasterSecret, pmsSz);
wolfSSL 0:d92f9d21154c 2675 idx += pmsSz;
wolfSSL 0:d92f9d21154c 2676 XMEMCPY(shaInput + idx, ssl->arrays->clientRandom, RAN_LEN);
wolfSSL 0:d92f9d21154c 2677 idx += RAN_LEN;
wolfSSL 0:d92f9d21154c 2678 XMEMCPY(shaInput + idx, ssl->arrays->serverRandom, RAN_LEN);
wolfSSL 0:d92f9d21154c 2679 idx += RAN_LEN;
wolfSSL 0:d92f9d21154c 2680 wc_ShaUpdate(sha, shaInput, idx);
wolfSSL 0:d92f9d21154c 2681 wc_ShaFinal(sha, shaOutput);
wolfSSL 0:d92f9d21154c 2682
wolfSSL 0:d92f9d21154c 2683 idx = pmsSz; /* preSz */
wolfSSL 0:d92f9d21154c 2684 XMEMCPY(md5Input + idx, shaOutput, SHA_DIGEST_SIZE);
wolfSSL 0:d92f9d21154c 2685 idx += SHA_DIGEST_SIZE;
wolfSSL 0:d92f9d21154c 2686 wc_Md5Update(md5, md5Input, idx);
wolfSSL 0:d92f9d21154c 2687 wc_Md5Final(md5, &ssl->arrays->masterSecret[i * MD5_DIGEST_SIZE]);
wolfSSL 0:d92f9d21154c 2688 }
wolfSSL 0:d92f9d21154c 2689
wolfSSL 0:d92f9d21154c 2690 #ifdef SHOW_SECRETS
wolfSSL 0:d92f9d21154c 2691 {
wolfSSL 0:d92f9d21154c 2692 word32 j;
wolfSSL 0:d92f9d21154c 2693 printf("master secret: ");
wolfSSL 0:d92f9d21154c 2694 for (j = 0; j < SECRET_LEN; j++)
wolfSSL 0:d92f9d21154c 2695 printf("%02x", ssl->arrays->masterSecret[j]);
wolfSSL 0:d92f9d21154c 2696 printf("\n");
wolfSSL 0:d92f9d21154c 2697 }
wolfSSL 0:d92f9d21154c 2698 #endif
wolfSSL 0:d92f9d21154c 2699
wolfSSL 0:d92f9d21154c 2700 if (ret == 0)
wolfSSL 0:d92f9d21154c 2701 ret = DeriveKeys(ssl);
wolfSSL 0:d92f9d21154c 2702 }
wolfSSL 0:d92f9d21154c 2703
wolfSSL 0:d92f9d21154c 2704 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 0:d92f9d21154c 2705 XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2706 XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2707 XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2708 XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2709 XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:d92f9d21154c 2710 #endif
wolfSSL 0:d92f9d21154c 2711
wolfSSL 0:d92f9d21154c 2712 if (ret == 0)
wolfSSL 0:d92f9d21154c 2713 ret = CleanPreMaster(ssl);
wolfSSL 0:d92f9d21154c 2714 else
wolfSSL 0:d92f9d21154c 2715 CleanPreMaster(ssl);
wolfSSL 0:d92f9d21154c 2716
wolfSSL 0:d92f9d21154c 2717 return ret;
wolfSSL 0:d92f9d21154c 2718 }
wolfSSL 0:d92f9d21154c 2719 #endif
wolfSSL 0:d92f9d21154c 2720
wolfSSL 0:d92f9d21154c 2721
wolfSSL 0:d92f9d21154c 2722 /* Master wrapper, doesn't use SSL stack space in TLS mode */
wolfSSL 0:d92f9d21154c 2723 int MakeMasterSecret(WOLFSSL* ssl)
wolfSSL 0:d92f9d21154c 2724 {
wolfSSL 0:d92f9d21154c 2725 #ifdef NO_OLD_TLS
wolfSSL 0:d92f9d21154c 2726 return MakeTlsMasterSecret(ssl);
wolfSSL 0:d92f9d21154c 2727 #elif !defined(NO_TLS)
wolfSSL 0:d92f9d21154c 2728 if (ssl->options.tls) return MakeTlsMasterSecret(ssl);
wolfSSL 0:d92f9d21154c 2729 #endif
wolfSSL 0:d92f9d21154c 2730
wolfSSL 0:d92f9d21154c 2731 #ifndef NO_OLD_TLS
wolfSSL 0:d92f9d21154c 2732 return MakeSslMasterSecret(ssl);
wolfSSL 0:d92f9d21154c 2733 #endif
wolfSSL 0:d92f9d21154c 2734 }
wolfSSL 0:d92f9d21154c 2735
wolfSSL 0:d92f9d21154c 2736