mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-30 16:24:09 +03:00
some fixes to bigint library
git-svn-id: svn://svn.code.sf.net/p/axtls/code/trunk@175 9a5d90b5-6617-0410-8a86-bb477d3ed2e3
This commit is contained in:
20
ssl/tls1.c
20
ssl/tls1.c
@ -47,7 +47,7 @@ static const char * server_finished = "server finished";
|
||||
static const char * client_finished = "client finished";
|
||||
|
||||
static int do_handshake(SSL *ssl, uint8_t *buf, int read_len);
|
||||
static void set_key_block(SSL *ssl, int is_write);
|
||||
static int set_key_block(SSL *ssl, int is_write);
|
||||
static int verify_digest(SSL *ssl, int mode, const uint8_t *buf, int read_len);
|
||||
static void *crypt_new(SSL *ssl, uint8_t *key, uint8_t *iv, int is_decrypt);
|
||||
static int send_raw_packet(SSL *ssl, uint8_t protocol);
|
||||
@ -1059,7 +1059,7 @@ int send_packet(SSL *ssl, uint8_t protocol, const uint8_t *in, int length)
|
||||
* Work out the cipher keys we are going to use for this session based on the
|
||||
* master secret.
|
||||
*/
|
||||
static void set_key_block(SSL *ssl, int is_write)
|
||||
static int set_key_block(SSL *ssl, int is_write)
|
||||
{
|
||||
const cipher_info_t *ciph_info = get_cipher_info(ssl->cipher);
|
||||
uint8_t *q;
|
||||
@ -1067,6 +1067,9 @@ static void set_key_block(SSL *ssl, int is_write)
|
||||
uint8_t client_iv[16], server_iv[16]; /* big enough for AES128/256 */
|
||||
int is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT);
|
||||
|
||||
if (ciph_info == NULL)
|
||||
return -1;
|
||||
|
||||
/* only do once in a handshake */
|
||||
if (ssl->dc->key_block == NULL)
|
||||
{
|
||||
@ -1138,6 +1141,7 @@ static void set_key_block(SSL *ssl, int is_write)
|
||||
}
|
||||
|
||||
ssl->cipher_info = ciph_info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1251,7 +1255,12 @@ int basic_read(SSL *ssl, uint8_t **in_data)
|
||||
|
||||
/* all encrypted from now on */
|
||||
SET_SSL_FLAG(SSL_RX_ENCRYPTED);
|
||||
set_key_block(ssl, 0);
|
||||
if (set_key_block(ssl, 0) < 0)
|
||||
{
|
||||
ret = SSL_ERROR_INVALID_HANDSHAKE;
|
||||
goto error;
|
||||
}
|
||||
|
||||
memset(ssl->read_sequence, 0, 8);
|
||||
break;
|
||||
|
||||
@ -1341,7 +1350,10 @@ int send_change_cipher_spec(SSL *ssl)
|
||||
int ret = send_packet(ssl, PT_CHANGE_CIPHER_SPEC,
|
||||
g_chg_cipher_spec_pkt, sizeof(g_chg_cipher_spec_pkt));
|
||||
SET_SSL_FLAG(SSL_TX_ENCRYPTED);
|
||||
set_key_block(ssl, 1);
|
||||
|
||||
if (ret >= 0 && set_key_block(ssl, 1) < 0)
|
||||
ret = SSL_ERROR_INVALID_HANDSHAKE;
|
||||
|
||||
memset(ssl->write_sequence, 0, 8);
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user