Xuyi Wang / wolfSSL

Dependents:   OS

Committer:
sPymbed
Date:
Wed Nov 20 13:27:48 2019 +0000
Revision:
17:ff9d1e86ad5f
Parent:
15:117db924cf7c
removed: wolfcrypt

Who changed what in which revision?

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