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

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

Committer:
wolfSSL
Date:
Tue Aug 22 10:48:22 2017 +0000
Revision:
13:f67a6c6013ca
wolfSSL3.12.0 with TLS1.3

Who changed what in which revision?

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