36 #if defined(POLARSSL_SSL_TLS_C)
46 #if defined(POLARSSL_GCM_C)
53 #if defined _MSC_VER && !defined strcasecmp
54 #define strcasecmp _stricmp
57 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
59 const unsigned char *key_enc,
const unsigned char *key_dec,
60 const unsigned char *iv_enc,
const unsigned char *iv_dec,
61 const unsigned char *mac_enc,
const unsigned char *mac_dec) = NULL;
62 int (*ssl_hw_record_reset)(
ssl_context *ssl) = NULL;
63 int (*ssl_hw_record_write)(
ssl_context *ssl) = NULL;
65 int (*ssl_hw_record_finish)(
ssl_context *ssl) = NULL;
68 static int ssl_rsa_decrypt(
void *ctx,
int mode,
size_t *olen,
69 const unsigned char *input,
unsigned char *output,
70 size_t output_max_len )
76 static int ssl_rsa_sign(
void *ctx,
77 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng,
78 int mode,
int hash_id,
unsigned int hashlen,
79 const unsigned char *hash,
unsigned char *sig )
85 static size_t ssl_rsa_key_len(
void *ctx )
93 static int ssl3_prf(
unsigned char *secret,
size_t slen,
char *label,
94 unsigned char *random,
size_t rlen,
95 unsigned char *dstbuf,
size_t dlen )
100 unsigned char padding[16];
101 unsigned char sha1sum[20];
112 for( i = 0; i < dlen / 16; i++ )
114 memset( padding,
'A' + i, 1 + i );
128 memset( &md5, 0,
sizeof( md5 ) );
129 memset( &sha1, 0,
sizeof( sha1 ) );
131 memset( padding, 0,
sizeof( padding ) );
132 memset( sha1sum, 0,
sizeof( sha1sum ) );
137 static int tls1_prf(
unsigned char *secret,
size_t slen,
char *label,
138 unsigned char *random,
size_t rlen,
139 unsigned char *dstbuf,
size_t dlen )
143 unsigned char *S1, *S2;
144 unsigned char tmp[128];
145 unsigned char h_i[20];
147 if(
sizeof( tmp ) < 20 + strlen( label ) + rlen )
150 hs = ( slen + 1 ) / 2;
152 S2 = secret + slen - hs;
154 nb = strlen( label );
155 memcpy( tmp + 20, label, nb );
156 memcpy( tmp + 20 + nb, random, rlen );
162 md5_hmac( S1, hs, tmp + 20, nb, 4 + tmp );
164 for( i = 0; i < dlen; i += 16 )
166 md5_hmac( S1, hs, 4 + tmp, 16 + nb, h_i );
167 md5_hmac( S1, hs, 4 + tmp, 16, 4 + tmp );
169 k = ( i + 16 > dlen ) ? dlen % 16 : 16;
171 for( j = 0; j < k; j++ )
172 dstbuf[i + j] = h_i[j];
180 for( i = 0; i < dlen; i += 20 )
185 k = ( i + 20 > dlen ) ? dlen % 20 : 20;
187 for( j = 0; j < k; j++ )
188 dstbuf[i + j] = (
unsigned char)( dstbuf[i + j] ^ h_i[j] );
191 memset( tmp, 0,
sizeof( tmp ) );
192 memset( h_i, 0,
sizeof( h_i ) );
197 static int tls_prf_sha256(
unsigned char *secret,
size_t slen,
char *label,
198 unsigned char *random,
size_t rlen,
199 unsigned char *dstbuf,
size_t dlen )
203 unsigned char tmp[128];
204 unsigned char h_i[32];
206 if(
sizeof( tmp ) < 32 + strlen( label ) + rlen )
209 nb = strlen( label );
210 memcpy( tmp + 32, label, nb );
211 memcpy( tmp + 32 + nb, random, rlen );
217 sha2_hmac( secret, slen, tmp + 32, nb, tmp, 0 );
219 for( i = 0; i < dlen; i += 32 )
221 sha2_hmac( secret, slen, tmp, 32 + nb, h_i, 0 );
222 sha2_hmac( secret, slen, tmp, 32, tmp, 0 );
224 k = ( i + 32 > dlen ) ? dlen % 32 : 32;
226 for( j = 0; j < k; j++ )
227 dstbuf[i + j] = h_i[j];
230 memset( tmp, 0,
sizeof( tmp ) );
231 memset( h_i, 0,
sizeof( h_i ) );
236 #if defined(POLARSSL_SHA4_C)
237 static int tls_prf_sha384(
unsigned char *secret,
size_t slen,
char *label,
238 unsigned char *random,
size_t rlen,
239 unsigned char *dstbuf,
size_t dlen )
243 unsigned char tmp[128];
244 unsigned char h_i[48];
246 if(
sizeof( tmp ) < 48 + strlen( label ) + rlen )
249 nb = strlen( label );
250 memcpy( tmp + 48, label, nb );
251 memcpy( tmp + 48 + nb, random, rlen );
257 sha4_hmac( secret, slen, tmp + 48, nb, tmp, 1 );
259 for( i = 0; i < dlen; i += 48 )
261 sha4_hmac( secret, slen, tmp, 48 + nb, h_i, 1 );
262 sha4_hmac( secret, slen, tmp, 48, tmp, 1 );
264 k = ( i + 48 > dlen ) ? dlen % 48 : 48;
266 for( j = 0; j < k; j++ )
267 dstbuf[i + j] = h_i[j];
270 memset( tmp, 0,
sizeof( tmp ) );
271 memset( h_i, 0,
sizeof( h_i ) );
277 static void ssl_update_checksum_start(
ssl_context *,
unsigned char *,
size_t);
278 static void ssl_update_checksum_md5sha1(
ssl_context *,
unsigned char *,
size_t);
279 static void ssl_update_checksum_sha256(
ssl_context *,
unsigned char *,
size_t);
281 static void ssl_calc_verify_ssl(
ssl_context *,
unsigned char *);
282 static void ssl_calc_verify_tls(
ssl_context *,
unsigned char *);
283 static void ssl_calc_verify_tls_sha256(
ssl_context *,
unsigned char *);
285 static void ssl_calc_finished_ssl(
ssl_context *,
unsigned char *,
int);
286 static void ssl_calc_finished_tls(
ssl_context *,
unsigned char *,
int);
287 static void ssl_calc_finished_tls_sha256(
ssl_context *,
unsigned char *,
int);
289 #if defined(POLARSSL_SHA4_C)
290 static void ssl_update_checksum_sha384(
ssl_context *,
unsigned char *,
size_t);
291 static void ssl_calc_verify_tls_sha384(
ssl_context *,
unsigned char *);
292 static void ssl_calc_finished_tls_sha384(
ssl_context *,
unsigned char *,
int);
297 unsigned char tmp[64];
298 unsigned char keyblk[256];
301 unsigned int iv_copy_len;
323 #if defined(POLARSSL_SHA4_C)
327 handshake->
tls_prf = tls_prf_sha384;
328 handshake->
calc_verify = ssl_calc_verify_tls_sha384;
334 handshake->
tls_prf = tls_prf_sha256;
335 handshake->
calc_verify = ssl_calc_verify_tls_sha256;
349 if( handshake->
resume == 0 )
367 memcpy( handshake->
randbytes, tmp + 32, 32 );
368 memcpy( handshake->
randbytes + 32, tmp, 32 );
369 memset( tmp, 0,
sizeof( tmp ) );
399 #if defined(POLARSSL_ARC4_C)
411 #if defined(POLARSSL_DES_C)
419 #if defined(POLARSSL_AES_C)
432 #if defined(POLARSSL_SHA2_C)
445 #if defined(POLARSSL_GCM_C)
462 #if defined(POLARSSL_CAMELLIA_C)
475 #if defined(POLARSSL_SHA2_C)
490 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
491 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
508 #if defined(POLARSSL_DES_C)
523 SSL_DEBUG_MSG( 3, (
"keylen: %d, minlen: %d, ivlen: %d, maclen: %d",
532 key1 = keyblk + transform->
maclen * 2;
533 key2 = keyblk + transform->
maclen * 2 + transform->
keylen;
544 memcpy( transform->
iv_enc, key2 + transform->
keylen, iv_copy_len );
545 memcpy( transform->
iv_dec, key2 + transform->
keylen + iv_copy_len,
550 key1 = keyblk + transform->
maclen * 2 + transform->
keylen;
551 key2 = keyblk + transform->
maclen * 2;
562 memcpy( transform->
iv_dec, key1 + transform->
keylen, iv_copy_len );
563 memcpy( transform->
iv_enc, key1 + transform->
keylen + iv_copy_len,
567 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
568 if( ssl_hw_record_init != NULL)
574 if( ( ret = ssl_hw_record_init( ssl, key1, key2, transform->
iv_enc,
586 #if defined(POLARSSL_ARC4_C)
596 #if defined(POLARSSL_DES_C)
604 #if defined(POLARSSL_AES_C)
621 #if defined(POLARSSL_GCM_C)
636 #if defined(POLARSSL_CAMELLIA_C)
654 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
655 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
662 #if defined(POLARSSL_DES_C)
675 memset( keyblk, 0,
sizeof( keyblk ) );
677 #if defined(POLARSSL_ZLIB_SUPPORT)
684 memset( &transform->ctx_deflate, 0,
sizeof( transform->ctx_deflate ) );
685 memset( &transform->ctx_inflate, 0,
sizeof( transform->ctx_inflate ) );
687 if( deflateInit( &transform->ctx_deflate, Z_DEFAULT_COMPRESSION ) != Z_OK ||
688 inflateInit( &transform->ctx_inflate ) != Z_OK )
701 void ssl_calc_verify_ssl(
ssl_context *ssl,
unsigned char hash[36] )
705 unsigned char pad_1[48];
706 unsigned char pad_2[48];
713 memset( pad_1, 0x36, 48 );
714 memset( pad_2, 0x5C, 48 );
742 void ssl_calc_verify_tls(
ssl_context *ssl,
unsigned char hash[36] )
761 void ssl_calc_verify_tls_sha256(
ssl_context *ssl,
unsigned char hash[32] )
776 #if defined(POLARSSL_SHA4_C)
777 void ssl_calc_verify_tls_sha384(
ssl_context *ssl,
unsigned char hash[48] )
796 static void ssl_mac_md5(
unsigned char *secret,
797 unsigned char *buf,
size_t len,
798 unsigned char *ctr,
int type )
800 unsigned char header[11];
801 unsigned char padding[48];
804 memcpy( header, ctr, 8 );
805 header[ 8] = (
unsigned char) type;
806 header[ 9] = (
unsigned char)( len >> 8 );
807 header[10] = (
unsigned char)( len );
809 memset( padding, 0x36, 48 );
817 memset( padding, 0x5C, 48 );
825 static void ssl_mac_sha1(
unsigned char *secret,
826 unsigned char *buf,
size_t len,
827 unsigned char *ctr,
int type )
829 unsigned char header[11];
830 unsigned char padding[40];
833 memcpy( header, ctr, 8 );
834 header[ 8] = (
unsigned char) type;
835 header[ 9] = (
unsigned char)( len >> 8 );
836 header[10] = (
unsigned char)( len );
838 memset( padding, 0x36, 40 );
846 memset( padding, 0x5C, 40 );
854 static void ssl_mac_sha2(
unsigned char *secret,
855 unsigned char *buf,
size_t len,
856 unsigned char *ctr,
int type )
858 unsigned char header[11];
859 unsigned char padding[32];
862 memcpy( header, ctr, 8 );
863 header[ 8] = (
unsigned char) type;
864 header[ 9] = (
unsigned char)( len >> 8 );
865 header[10] = (
unsigned char)( len );
867 memset( padding, 0x36, 32 );
875 memset( padding, 0x5C, 32 );
963 "including %d bytes of padding",
969 #if defined(POLARSSL_ARC4_C)
978 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
990 unsigned char *enc_msg;
991 unsigned char add_data[13];
997 memcpy( add_data, ssl->
out_ctr, 8 );
1001 add_data[11] = ( ssl->
out_msglen >> 8 ) & 0xFF;
1007 #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
1043 "including %d bytes of padding",
1059 16, enc_msg + enc_msglen );
1062 enc_msg + enc_msglen, 16 );
1070 unsigned char *enc_msg;
1078 for( i = 0; i <= padlen; i++ )
1117 "including %d bytes of IV and %d bytes of padding",
1125 #if defined(POLARSSL_DES_C)
1127 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
1144 #if defined(POLARSSL_AES_C)
1161 #if defined(POLARSSL_CAMELLIA_C)
1183 for( i = 8; i > 0; i-- )
1184 if( ++ssl->
out_ctr[i - 1] != 0 )
1195 #define POLARSSL_SSL_MAX_MAC_SIZE 32
1199 size_t i, padlen = 0, correct = 1;
1200 unsigned char tmp[POLARSSL_SSL_MAX_MAC_SIZE];
1213 #if defined(POLARSSL_ARC4_C)
1222 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
1233 unsigned char *dec_msg;
1234 unsigned char *dec_msg_result;
1236 unsigned char add_data[13];
1239 #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
1250 dec_msg_result = ssl->
in_msg;
1253 memcpy( add_data, ssl->
in_ctr, 8 );
1257 add_data[11] = ( ssl->
in_msglen >> 8 ) & 0xFF;
1280 dec_msg + dec_msglen, 16,
1281 dec_msg, dec_msg_result );
1285 SSL_DEBUG_MSG( 1, (
"AEAD decrypt failed on validation (ret = -0x%02x)",
1299 unsigned char *dec_msg;
1300 unsigned char *dec_msg_result;
1302 size_t minlen = 0, fake_padlen;
1320 SSL_DEBUG_MSG( 1, (
"msglen (%d) < max( ivlen(%d), maclen (%d) + 1 ) ( + expl IV )",
1327 dec_msg_result = ssl->
in_msg;
1344 #if defined(POLARSSL_DES_C)
1346 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
1363 #if defined(POLARSSL_AES_C)
1380 #if defined(POLARSSL_CAMELLIA_C)
1402 fake_padlen = 256 - padlen;
1406 #if defined(POLARSSL_SSL_DEBUG_ALL)
1407 SSL_DEBUG_MSG( 1, (
"msglen (%d) < maclen (%d) + padlen (%d)",
1419 #if defined(POLARSSL_SSL_DEBUG_ALL)
1421 "should be no more than %d",
1433 for( i = 1; i <= padlen; i++ )
1438 fake_padlen = 256 - i;
1442 for( i = 1; i <= fake_padlen; i++ )
1444 if( ssl->
in_msg[i + 1] != fake_padlen - 1 )
1449 #if defined(POLARSSL_SSL_DEBUG_ALL)
1450 if( padlen > 0 && correct == 0)
1544 "messages, possible DoS attack" ) );
1551 for( i = 8; i > 0; i-- )
1552 if( ++ssl->
in_ctr[i - 1] != 0 )
1560 #if defined(POLARSSL_ZLIB_SUPPORT)
1567 unsigned char *msg_post = ssl->
out_msg;
1569 unsigned char *msg_pre;
1573 msg_pre = (
unsigned char*) malloc( len_pre );
1574 if( msg_pre == NULL )
1580 memcpy( msg_pre, ssl->
out_msg, len_pre );
1593 ret = deflate( &ssl->
transform_out->ctx_deflate, Z_SYNC_FLUSH );
1596 SSL_DEBUG_MSG( 1, (
"failed to perform compression (%d)", ret ) );
1618 unsigned char *msg_post = ssl->
in_msg;
1620 unsigned char *msg_pre;
1624 msg_pre = (
unsigned char*) malloc( len_pre );
1625 if( msg_pre == NULL )
1631 memcpy( msg_pre, ssl->
in_msg, len_pre );
1644 ret = inflate( &ssl->
transform_in->ctx_inflate, Z_SYNC_FLUSH );
1647 SSL_DEBUG_MSG( 1, (
"failed to perform decompression (%d)", ret ) );
1677 while( ssl->
in_left < nb_want )
1719 buf = ssl->
out_hdr + 5 - header_left;
1758 ssl->
out_msg[1] = (
unsigned char)( ( len - 4 ) >> 16 );
1759 ssl->
out_msg[2] = (
unsigned char)( ( len - 4 ) >> 8 );
1760 ssl->
out_msg[3] = (
unsigned char)( ( len - 4 ) );
1765 #if defined(POLARSSL_ZLIB_SUPPORT)
1769 if( ( ret = ssl_compress_buf( ssl ) ) != 0 )
1779 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
1780 if( ssl_hw_record_write != NULL)
1784 ret = ssl_hw_record_write( ssl );
1798 ssl->
out_hdr[3] = (
unsigned char)( len >> 8 );
1799 ssl->
out_hdr[4] = (
unsigned char)( len );
1803 if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 )
1810 ssl->
out_hdr[3] = (
unsigned char)( len >> 8 );
1811 ssl->
out_hdr[4] = (
unsigned char)( len );
1817 "version = [%d:%d], msglen = %d",
1859 " %d, type = %d, hslen = %d",
1894 "version = [%d:%d], msglen = %d",
1960 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
1961 if( ssl_hw_record_read != NULL)
1965 ret = ssl_hw_record_read( ssl );
1976 if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 )
1978 #if defined(POLARSSL_SSL_ALERT_MESSAGES)
2000 #if defined(POLARSSL_ZLIB_SUPPORT)
2004 if( ( ret = ssl_decompress_buf( ssl ) ) != 0 )
2038 " %d, type = %d, hslen = %d",
2109 unsigned char level,
2110 unsigned char message )
2191 while( crt != NULL )
2201 ssl->
out_msg[i ] = (
unsigned char)( n >> 16 );
2202 ssl->
out_msg[i + 1] = (
unsigned char)( n >> 8 );
2203 ssl->
out_msg[i + 2] = (
unsigned char)( n );
2205 i += 3; memcpy( ssl->
out_msg + i, crt->
raw.
p, n );
2206 i += n; crt = crt->
next;
2209 ssl->
out_msg[4] = (
unsigned char)( ( i - 7 ) >> 16 );
2210 ssl->
out_msg[5] = (
unsigned char)( ( i - 7 ) >> 8 );
2211 ssl->
out_msg[6] = (
unsigned char)( ( i - 7 ) );
2283 memcmp( ssl->
in_msg + 4,
"\0\0\0", 3 ) == 0 )
2330 while( i < ssl->in_hslen )
2332 if( ssl->
in_msg[i] != 0 )
2338 n = ( (
unsigned int) ssl->
in_msg[i + 1] << 8 )
2339 | (
unsigned int) ssl->
in_msg[i + 2];
2342 if( n < 128 || i + n > ssl->
in_hslen )
2442 #if !defined(POLARSSL_SHA4_C)
2443 ((void) ciphersuite);
2448 #if defined(POLARSSL_SHA4_C)
2459 static void ssl_update_checksum_start(
ssl_context *ssl,
unsigned char *buf,
2465 #if defined(POLARSSL_SHA4_C)
2470 static void ssl_update_checksum_md5sha1(
ssl_context *ssl,
unsigned char *buf,
2477 static void ssl_update_checksum_sha256(
ssl_context *ssl,
unsigned char *buf,
2483 #if defined(POLARSSL_SHA4_C)
2484 static void ssl_update_checksum_sha384(
ssl_context *ssl,
unsigned char *buf,
2491 static void ssl_calc_finished_ssl(
2498 unsigned char padbuf[48];
2499 unsigned char md5sum[16];
2500 unsigned char sha1sum[20];
2529 memset( padbuf, 0x36, 48 );
2531 md5_update( &md5, (
unsigned char *) sender, 4 );
2536 sha1_update( &sha1, (
unsigned char *) sender, 4 );
2541 memset( padbuf, 0x5C, 48 );
2560 memset( padbuf, 0,
sizeof( padbuf ) );
2561 memset( md5sum, 0,
sizeof( md5sum ) );
2562 memset( sha1sum, 0,
sizeof( sha1sum ) );
2567 static void ssl_calc_finished_tls(
2574 unsigned char padbuf[36];
2598 ? (
char *)
"client finished"
2599 : (
char *)
"server finished";
2605 padbuf, 36, buf, len );
2612 memset( padbuf, 0,
sizeof( padbuf ) );
2617 static void ssl_calc_finished_tls_sha256(
2623 unsigned char padbuf[32];
2643 ? (
char *)
"client finished"
2644 : (
char *)
"server finished";
2649 padbuf, 32, buf, len );
2655 memset( padbuf, 0,
sizeof( padbuf ) );
2660 #if defined(POLARSSL_SHA4_C)
2661 static void ssl_calc_finished_tls_sha384(
2667 unsigned char padbuf[48];
2687 ? (
char *)
"client finished"
2688 : (
char *)
"server finished";
2693 padbuf, 48, buf, len );
2699 memset( padbuf, 0,
sizeof( padbuf ) );
2782 SSL_DEBUG_MSG( 3, (
"switching to new transform spec for outbound data" ) );
2801 unsigned int hash_len;
2802 unsigned char buf[36];
2811 SSL_DEBUG_MSG( 3, (
"switching to new transform spec for inbound data" ) );
2814 memset( ssl->
in_ctr, 0, 8 );
2838 if( memcmp( ssl->
in_msg + 4, buf, hash_len ) != 0 )
2884 SSL_DEBUG_MSG( 1, (
"malloc() of ssl sub-contexts failed" ) );
2895 #if defined(POLARSSL_SHA4_C)
2927 #if defined(POLARSSL_DHM_C)
2941 ssl->
in_ctr = (
unsigned char *) malloc( len );
2945 if( ssl->
in_ctr == NULL )
2951 ssl->
out_ctr = (
unsigned char *) malloc( len );
2958 free( ssl-> in_ctr );
2968 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3009 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
3010 if( ssl_hw_record_reset != NULL)
3013 if( ssl_hw_record_reset( ssl ) != 0 )
3028 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3048 int (*f_vrfy)(
void *,
x509_cert *,
int,
int *),
3056 int (*f_rng)(
void *,
unsigned char *,
size_t),
3064 void (*f_dbg)(
void *,
int,
const char *),
3072 int (*f_recv)(
void *,
unsigned char *,
size_t),
void *p_recv,
3073 int (*f_send)(
void *,
const unsigned char *,
size_t),
void *p_send )
3082 int (*f_get_cache)(
void *,
ssl_session *),
void *p_get_cache,
3083 int (*f_set_cache)(
void *,
const ssl_session *),
void *p_set_cache )
3103 x509_crl *ca_crl,
const char *peer_cn )
3131 #if defined(POLARSSL_DHM_C)
3173 if( hostname == NULL )
3182 memcpy( ssl->
hostname, (
unsigned char *) hostname,
3192 const unsigned char *,
size_t),
3236 switch( ciphersuite_id )
3238 #if defined(POLARSSL_ARC4_C)
3240 return(
"TLS-RSA-WITH-RC4-128-MD5" );
3243 return(
"TLS-RSA-WITH-RC4-128-SHA" );
3246 #if defined(POLARSSL_DES_C)
3248 return(
"TLS-RSA-WITH-3DES-EDE-CBC-SHA" );
3251 return(
"TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA" );
3254 #if defined(POLARSSL_AES_C)
3256 return(
"TLS-RSA-WITH-AES-128-CBC-SHA" );
3259 return(
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA" );
3262 return(
"TLS-RSA-WITH-AES-256-CBC-SHA" );
3265 return(
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA" );
3267 #if defined(POLARSSL_SHA2_C)
3269 return(
"TLS-RSA-WITH-AES-128-CBC-SHA256" );
3272 return(
"TLS-RSA-WITH-AES-256-CBC-SHA256" );
3275 return(
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA256" );
3278 return(
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" );
3281 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3283 return(
"TLS-RSA-WITH-AES-128-GCM-SHA256" );
3286 return(
"TLS-RSA-WITH-AES-256-GCM-SHA384" );
3289 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3291 return(
"TLS-DHE-RSA-WITH-AES-128-GCM-SHA256" );
3294 return(
"TLS-DHE-RSA-WITH-AES-256-GCM-SHA384" );
3298 #if defined(POLARSSL_CAMELLIA_C)
3300 return(
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA" );
3303 return(
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA" );
3306 return(
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA" );
3309 return(
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA" );
3311 #if defined(POLARSSL_SHA2_C)
3313 return(
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
3316 return(
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
3319 return(
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
3322 return(
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
3326 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
3327 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
3329 return(
"TLS-RSA-WITH-NULL-MD5" );
3331 return(
"TLS-RSA-WITH-NULL-SHA" );
3333 return(
"TLS-RSA-WITH-NULL-SHA256" );
3336 #if defined(POLARSSL_DES_C)
3338 return(
"TLS-RSA-WITH-DES-CBC-SHA" );
3340 return(
"TLS-DHE-RSA-WITH-DES-CBC-SHA" );
3348 return(
"unknown" );
3353 #if defined(POLARSSL_ARC4_C)
3354 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-RC4-128-MD5"))
3356 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-RC4-128-SHA"))
3360 #if defined(POLARSSL_DES_C)
3361 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-3DES-EDE-CBC-SHA"))
3363 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA"))
3367 #if defined(POLARSSL_AES_C)
3368 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-CBC-SHA"))
3370 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA"))
3372 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-CBC-SHA"))
3374 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA"))
3377 #if defined(POLARSSL_SHA2_C)
3378 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-CBC-SHA256"))
3380 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-CBC-SHA256"))
3382 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA256"))
3384 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256"))
3388 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3389 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-GCM-SHA256"))
3391 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-GCM-SHA384"))
3395 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3396 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-GCM-SHA256"))
3398 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-GCM-SHA384"))
3403 #if defined(POLARSSL_CAMELLIA_C)
3404 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA"))
3406 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA"))
3408 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA"))
3410 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA"))
3413 #if defined(POLARSSL_SHA2_C)
3414 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
3416 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
3418 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
3420 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
3425 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
3426 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
3427 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-MD5"))
3429 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-SHA"))
3431 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-SHA256"))
3435 #if defined(POLARSSL_DES_C)
3436 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-DES-CBC-SHA"))
3438 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-DES-CBC-SHA"))
3456 return(
"SSLv3.0" );
3459 return(
"TLSv1.0" );
3462 return(
"TLSv1.1" );
3465 return(
"TLSv1.2" );
3470 return(
"unknown" );
3475 if( ssl == NULL || ssl->
session == NULL )
3483 #if defined(POLARSSL_DHM_C)
3484 #if defined(POLARSSL_AES_C)
3485 #if defined(POLARSSL_SHA2_C)
3488 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3492 #if defined(POLARSSL_SHA2_C)
3495 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3500 #if defined(POLARSSL_CAMELLIA_C)
3501 #if defined(POLARSSL_SHA2_C)
3505 #if defined(POLARSSL_SHA2_C)
3510 #if defined(POLARSSL_DES_C)
3515 #if defined(POLARSSL_AES_C)
3516 #if defined(POLARSSL_SHA2_C)
3519 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3524 #if defined(POLARSSL_CAMELLIA_C)
3525 #if defined(POLARSSL_SHA2_C)
3530 #if defined(POLARSSL_AES_C)
3531 #if defined(POLARSSL_SHA2_C)
3534 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3539 #if defined(POLARSSL_CAMELLIA_C)
3540 #if defined(POLARSSL_SHA2_C)
3545 #if defined(POLARSSL_DES_C)
3548 #if defined(POLARSSL_ARC4_C)
3562 #if defined(POLARSSL_SSL_CLI_C)
3567 #if defined(POLARSSL_SSL_SRV_C)
3612 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3680 SSL_DEBUG_MSG( 1, (
"handshake received (not HelloRequest)" ) );
3688 SSL_DEBUG_MSG( 3, (
"ignoring renegotiation, sending alert" ) );
3731 memcpy( buf, ssl->
in_offt, n );
3780 memcpy( ssl->
out_msg, buf, n );
3826 #if defined(POLARSSL_ZLIB_SUPPORT)
3827 deflateEnd( &transform->ctx_deflate );
3828 inflateEnd( &transform->ctx_inflate );
3836 #if defined(POLARSSL_DHM_C)
3866 if( ssl->
in_ctr != NULL )
3872 #if defined(POLARSSL_DHM_C)
3901 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
3902 if( ssl_hw_record_finish != NULL )
3905 ssl_hw_record_finish( ssl );