1
0
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:
cameronrich
2010-08-06 09:58:26 +00:00
parent c1c5656718
commit 09e79822d5
5 changed files with 36 additions and 25 deletions

View File

@ -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;
}