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

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

Committer:
wolfSSL
Date:
Thu Apr 28 00:57:21 2016 +0000
Revision:
4:1b0d80432c79
wolfSSL 3.9.0

Who changed what in which revision?

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