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,
69 int (*f_rng)(
void *,
unsigned char *,
size_t),
70 void *p_rng,
int mode,
size_t *olen,
71 const unsigned char *input,
unsigned char *output,
72 size_t output_max_len )
75 input, output, output_max_len );
78 static int ssl_rsa_sign(
void *ctx,
79 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng,
80 int mode,
int hash_id,
unsigned int hashlen,
81 const unsigned char *hash,
unsigned char *sig )
87 static size_t ssl_rsa_key_len(
void *ctx )
95 static int ssl3_prf(
unsigned char *secret,
size_t slen,
char *label,
96 unsigned char *random,
size_t rlen,
97 unsigned char *dstbuf,
size_t dlen )
102 unsigned char padding[16];
103 unsigned char sha1sum[20];
114 for( i = 0; i < dlen / 16; i++ )
116 memset( padding,
'A' + i, 1 + i );
130 memset( &md5, 0,
sizeof( md5 ) );
131 memset( &sha1, 0,
sizeof( sha1 ) );
133 memset( padding, 0,
sizeof( padding ) );
134 memset( sha1sum, 0,
sizeof( sha1sum ) );
139 static int tls1_prf(
unsigned char *secret,
size_t slen,
char *label,
140 unsigned char *random,
size_t rlen,
141 unsigned char *dstbuf,
size_t dlen )
145 unsigned char *S1, *S2;
146 unsigned char tmp[128];
147 unsigned char h_i[20];
149 if(
sizeof( tmp ) < 20 + strlen( label ) + rlen )
152 hs = ( slen + 1 ) / 2;
154 S2 = secret + slen - hs;
156 nb = strlen( label );
157 memcpy( tmp + 20, label, nb );
158 memcpy( tmp + 20 + nb, random, rlen );
164 md5_hmac( S1, hs, tmp + 20, nb, 4 + tmp );
166 for( i = 0; i < dlen; i += 16 )
168 md5_hmac( S1, hs, 4 + tmp, 16 + nb, h_i );
169 md5_hmac( S1, hs, 4 + tmp, 16, 4 + tmp );
171 k = ( i + 16 > dlen ) ? dlen % 16 : 16;
173 for( j = 0; j < k; j++ )
174 dstbuf[i + j] = h_i[j];
182 for( i = 0; i < dlen; i += 20 )
187 k = ( i + 20 > dlen ) ? dlen % 20 : 20;
189 for( j = 0; j < k; j++ )
190 dstbuf[i + j] = (
unsigned char)( dstbuf[i + j] ^ h_i[j] );
193 memset( tmp, 0,
sizeof( tmp ) );
194 memset( h_i, 0,
sizeof( h_i ) );
199 static int tls_prf_sha256(
unsigned char *secret,
size_t slen,
char *label,
200 unsigned char *random,
size_t rlen,
201 unsigned char *dstbuf,
size_t dlen )
205 unsigned char tmp[128];
206 unsigned char h_i[32];
208 if(
sizeof( tmp ) < 32 + strlen( label ) + rlen )
211 nb = strlen( label );
212 memcpy( tmp + 32, label, nb );
213 memcpy( tmp + 32 + nb, random, rlen );
219 sha2_hmac( secret, slen, tmp + 32, nb, tmp, 0 );
221 for( i = 0; i < dlen; i += 32 )
223 sha2_hmac( secret, slen, tmp, 32 + nb, h_i, 0 );
224 sha2_hmac( secret, slen, tmp, 32, tmp, 0 );
226 k = ( i + 32 > dlen ) ? dlen % 32 : 32;
228 for( j = 0; j < k; j++ )
229 dstbuf[i + j] = h_i[j];
232 memset( tmp, 0,
sizeof( tmp ) );
233 memset( h_i, 0,
sizeof( h_i ) );
238 #if defined(POLARSSL_SHA4_C)
239 static int tls_prf_sha384(
unsigned char *secret,
size_t slen,
char *label,
240 unsigned char *random,
size_t rlen,
241 unsigned char *dstbuf,
size_t dlen )
245 unsigned char tmp[128];
246 unsigned char h_i[48];
248 if(
sizeof( tmp ) < 48 + strlen( label ) + rlen )
251 nb = strlen( label );
252 memcpy( tmp + 48, label, nb );
253 memcpy( tmp + 48 + nb, random, rlen );
259 sha4_hmac( secret, slen, tmp + 48, nb, tmp, 1 );
261 for( i = 0; i < dlen; i += 48 )
263 sha4_hmac( secret, slen, tmp, 48 + nb, h_i, 1 );
264 sha4_hmac( secret, slen, tmp, 48, tmp, 1 );
266 k = ( i + 48 > dlen ) ? dlen % 48 : 48;
268 for( j = 0; j < k; j++ )
269 dstbuf[i + j] = h_i[j];
272 memset( tmp, 0,
sizeof( tmp ) );
273 memset( h_i, 0,
sizeof( h_i ) );
279 static void ssl_update_checksum_start(
ssl_context *,
unsigned char *,
size_t);
280 static void ssl_update_checksum_md5sha1(
ssl_context *,
unsigned char *,
size_t);
281 static void ssl_update_checksum_sha256(
ssl_context *,
unsigned char *,
size_t);
283 static void ssl_calc_verify_ssl(
ssl_context *,
unsigned char *);
284 static void ssl_calc_verify_tls(
ssl_context *,
unsigned char *);
285 static void ssl_calc_verify_tls_sha256(
ssl_context *,
unsigned char *);
287 static void ssl_calc_finished_ssl(
ssl_context *,
unsigned char *,
int);
288 static void ssl_calc_finished_tls(
ssl_context *,
unsigned char *,
int);
289 static void ssl_calc_finished_tls_sha256(
ssl_context *,
unsigned char *,
int);
291 #if defined(POLARSSL_SHA4_C)
292 static void ssl_update_checksum_sha384(
ssl_context *,
unsigned char *,
size_t);
293 static void ssl_calc_verify_tls_sha384(
ssl_context *,
unsigned char *);
294 static void ssl_calc_finished_tls_sha384(
ssl_context *,
unsigned char *,
int);
299 unsigned char tmp[64];
300 unsigned char keyblk[256];
303 unsigned int iv_copy_len;
325 #if defined(POLARSSL_SHA4_C)
329 handshake->
tls_prf = tls_prf_sha384;
330 handshake->
calc_verify = ssl_calc_verify_tls_sha384;
336 handshake->
tls_prf = tls_prf_sha256;
337 handshake->
calc_verify = ssl_calc_verify_tls_sha256;
351 if( handshake->
resume == 0 )
369 memcpy( handshake->
randbytes, tmp + 32, 32 );
370 memcpy( handshake->
randbytes + 32, tmp, 32 );
371 memset( tmp, 0,
sizeof( tmp ) );
401 #if defined(POLARSSL_ARC4_C)
413 #if defined(POLARSSL_DES_C)
421 #if defined(POLARSSL_AES_C)
434 #if defined(POLARSSL_SHA2_C)
447 #if defined(POLARSSL_GCM_C)
464 #if defined(POLARSSL_CAMELLIA_C)
477 #if defined(POLARSSL_SHA2_C)
492 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
493 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
510 #if defined(POLARSSL_DES_C)
525 SSL_DEBUG_MSG( 3, (
"keylen: %d, minlen: %d, ivlen: %d, maclen: %d",
534 key1 = keyblk + transform->
maclen * 2;
535 key2 = keyblk + transform->
maclen * 2 + transform->
keylen;
546 memcpy( transform->
iv_enc, key2 + transform->
keylen, iv_copy_len );
547 memcpy( transform->
iv_dec, key2 + transform->
keylen + iv_copy_len,
552 key1 = keyblk + transform->
maclen * 2 + transform->
keylen;
553 key2 = keyblk + transform->
maclen * 2;
564 memcpy( transform->
iv_dec, key1 + transform->
keylen, iv_copy_len );
565 memcpy( transform->
iv_enc, key1 + transform->
keylen + iv_copy_len,
569 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
570 if( ssl_hw_record_init != NULL)
576 if( ( ret = ssl_hw_record_init( ssl, key1, key2, transform->
iv_enc,
588 #if defined(POLARSSL_ARC4_C)
598 #if defined(POLARSSL_DES_C)
606 #if defined(POLARSSL_AES_C)
623 #if defined(POLARSSL_GCM_C)
638 #if defined(POLARSSL_CAMELLIA_C)
656 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
657 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
664 #if defined(POLARSSL_DES_C)
677 memset( keyblk, 0,
sizeof( keyblk ) );
679 #if defined(POLARSSL_ZLIB_SUPPORT)
686 memset( &transform->ctx_deflate, 0,
sizeof( transform->ctx_deflate ) );
687 memset( &transform->ctx_inflate, 0,
sizeof( transform->ctx_inflate ) );
689 if( deflateInit( &transform->ctx_deflate, Z_DEFAULT_COMPRESSION ) != Z_OK ||
690 inflateInit( &transform->ctx_inflate ) != Z_OK )
703 void ssl_calc_verify_ssl(
ssl_context *ssl,
unsigned char hash[36] )
707 unsigned char pad_1[48];
708 unsigned char pad_2[48];
715 memset( pad_1, 0x36, 48 );
716 memset( pad_2, 0x5C, 48 );
744 void ssl_calc_verify_tls(
ssl_context *ssl,
unsigned char hash[36] )
763 void ssl_calc_verify_tls_sha256(
ssl_context *ssl,
unsigned char hash[32] )
778 #if defined(POLARSSL_SHA4_C)
779 void ssl_calc_verify_tls_sha384(
ssl_context *ssl,
unsigned char hash[48] )
798 static void ssl_mac_md5(
unsigned char *secret,
799 unsigned char *buf,
size_t len,
800 unsigned char *ctr,
int type )
802 unsigned char header[11];
803 unsigned char padding[48];
806 memcpy( header, ctr, 8 );
807 header[ 8] = (
unsigned char) type;
808 header[ 9] = (
unsigned char)( len >> 8 );
809 header[10] = (
unsigned char)( len );
811 memset( padding, 0x36, 48 );
819 memset( padding, 0x5C, 48 );
827 static void ssl_mac_sha1(
unsigned char *secret,
828 unsigned char *buf,
size_t len,
829 unsigned char *ctr,
int type )
831 unsigned char header[11];
832 unsigned char padding[40];
835 memcpy( header, ctr, 8 );
836 header[ 8] = (
unsigned char) type;
837 header[ 9] = (
unsigned char)( len >> 8 );
838 header[10] = (
unsigned char)( len );
840 memset( padding, 0x36, 40 );
848 memset( padding, 0x5C, 40 );
856 static void ssl_mac_sha2(
unsigned char *secret,
857 unsigned char *buf,
size_t len,
858 unsigned char *ctr,
int type )
860 unsigned char header[11];
861 unsigned char padding[32];
864 memcpy( header, ctr, 8 );
865 header[ 8] = (
unsigned char) type;
866 header[ 9] = (
unsigned char)( len >> 8 );
867 header[10] = (
unsigned char)( len );
869 memset( padding, 0x36, 32 );
877 memset( padding, 0x5C, 32 );
965 "including %d bytes of padding",
971 #if defined(POLARSSL_ARC4_C)
980 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
992 unsigned char *enc_msg;
993 unsigned char add_data[13];
999 memcpy( add_data, ssl->
out_ctr, 8 );
1003 add_data[11] = ( ssl->
out_msglen >> 8 ) & 0xFF;
1009 #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
1045 "including %d bytes of padding",
1061 16, enc_msg + enc_msglen );
1064 enc_msg + enc_msglen, 16 );
1072 unsigned char *enc_msg;
1080 for( i = 0; i <= padlen; i++ )
1119 "including %d bytes of IV and %d bytes of padding",
1127 #if defined(POLARSSL_DES_C)
1129 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
1146 #if defined(POLARSSL_AES_C)
1163 #if defined(POLARSSL_CAMELLIA_C)
1185 for( i = 8; i > 0; i-- )
1186 if( ++ssl->
out_ctr[i - 1] != 0 )
1197 #define POLARSSL_SSL_MAX_MAC_SIZE 32
1201 size_t i, padlen = 0, correct = 1;
1202 unsigned char tmp[POLARSSL_SSL_MAX_MAC_SIZE];
1215 #if defined(POLARSSL_ARC4_C)
1224 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
1235 unsigned char *dec_msg;
1236 unsigned char *dec_msg_result;
1238 unsigned char add_data[13];
1241 #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
1252 dec_msg_result = ssl->
in_msg;
1255 memcpy( add_data, ssl->
in_ctr, 8 );
1259 add_data[11] = ( ssl->
in_msglen >> 8 ) & 0xFF;
1282 dec_msg + dec_msglen, 16,
1283 dec_msg, dec_msg_result );
1287 SSL_DEBUG_MSG( 1, (
"AEAD decrypt failed on validation (ret = -0x%02x)",
1301 unsigned char *dec_msg;
1302 unsigned char *dec_msg_result;
1322 SSL_DEBUG_MSG( 1, (
"msglen (%d) < max( ivlen(%d), maclen (%d) + 1 ) ( + expl IV )",
1329 dec_msg_result = ssl->
in_msg;
1346 #if defined(POLARSSL_DES_C)
1348 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
1365 #if defined(POLARSSL_AES_C)
1382 #if defined(POLARSSL_CAMELLIA_C)
1407 #if defined(POLARSSL_SSL_DEBUG_ALL)
1408 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 size_t pad_count = 0, fake_pad_count = 0;
1434 size_t padding_idx = ssl->
in_msglen - padlen - 1;
1436 for( i = 1; i <= padlen; i++ )
1437 pad_count += ( ssl->
in_msg[padding_idx + i] == padlen - 1 );
1439 for( ; i <= 256; i++ )
1440 fake_pad_count += ( ssl->
in_msg[padding_idx + i] == padlen - 1 );
1442 correct &= ( pad_count == padlen );
1443 correct &= ( pad_count + fake_pad_count < 512 );
1445 #if defined(POLARSSL_SSL_DEBUG_ALL)
1446 if( padlen > 0 && correct == 0)
1449 padlen &= correct * 0x1FF;
1502 int j, extra_run = 0;
1503 extra_run = ( 13 + ssl->
in_msglen + padlen + 8 ) / 64 -
1506 extra_run &= correct * 0xFF;
1515 for( j = 0; j < extra_run; j++ )
1525 for( j = 0; j < extra_run; j++ )
1535 for( j = 0; j < extra_run; j++ )
1553 #if defined(POLARSSL_SSL_DEBUG_ALL)
1576 "messages, possible DoS attack" ) );
1583 for( i = 8; i > 0; i-- )
1584 if( ++ssl->
in_ctr[i - 1] != 0 )
1592 #if defined(POLARSSL_ZLIB_SUPPORT)
1599 unsigned char *msg_post = ssl->
out_msg;
1601 unsigned char *msg_pre;
1605 msg_pre = (
unsigned char*) malloc( len_pre );
1606 if( msg_pre == NULL )
1612 memcpy( msg_pre, ssl->
out_msg, len_pre );
1625 ret = deflate( &ssl->
transform_out->ctx_deflate, Z_SYNC_FLUSH );
1628 SSL_DEBUG_MSG( 1, (
"failed to perform compression (%d)", ret ) );
1650 unsigned char *msg_post = ssl->
in_msg;
1652 unsigned char *msg_pre;
1656 msg_pre = (
unsigned char*) malloc( len_pre );
1657 if( msg_pre == NULL )
1663 memcpy( msg_pre, ssl->
in_msg, len_pre );
1676 ret = inflate( &ssl->
transform_in->ctx_inflate, Z_SYNC_FLUSH );
1679 SSL_DEBUG_MSG( 1, (
"failed to perform decompression (%d)", ret ) );
1709 while( ssl->
in_left < nb_want )
1751 buf = ssl->
out_hdr + 5 - header_left;
1790 ssl->
out_msg[1] = (
unsigned char)( ( len - 4 ) >> 16 );
1791 ssl->
out_msg[2] = (
unsigned char)( ( len - 4 ) >> 8 );
1792 ssl->
out_msg[3] = (
unsigned char)( ( len - 4 ) );
1797 #if defined(POLARSSL_ZLIB_SUPPORT)
1801 if( ( ret = ssl_compress_buf( ssl ) ) != 0 )
1811 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
1812 if( ssl_hw_record_write != NULL)
1816 ret = ssl_hw_record_write( ssl );
1830 ssl->
out_hdr[3] = (
unsigned char)( len >> 8 );
1831 ssl->
out_hdr[4] = (
unsigned char)( len );
1835 if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 )
1842 ssl->
out_hdr[3] = (
unsigned char)( len >> 8 );
1843 ssl->
out_hdr[4] = (
unsigned char)( len );
1849 "version = [%d:%d], msglen = %d",
1891 " %d, type = %d, hslen = %d",
1926 "version = [%d:%d], msglen = %d",
1992 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
1993 if( ssl_hw_record_read != NULL)
1997 ret = ssl_hw_record_read( ssl );
2008 if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 )
2010 #if defined(POLARSSL_SSL_ALERT_MESSAGES)
2032 #if defined(POLARSSL_ZLIB_SUPPORT)
2036 if( ( ret = ssl_decompress_buf( ssl ) ) != 0 )
2070 " %d, type = %d, hslen = %d",
2141 unsigned char level,
2142 unsigned char message )
2223 while( crt != NULL )
2233 ssl->
out_msg[i ] = (
unsigned char)( n >> 16 );
2234 ssl->
out_msg[i + 1] = (
unsigned char)( n >> 8 );
2235 ssl->
out_msg[i + 2] = (
unsigned char)( n );
2237 i += 3; memcpy( ssl->
out_msg + i, crt->
raw.
p, n );
2238 i += n; crt = crt->
next;
2241 ssl->
out_msg[4] = (
unsigned char)( ( i - 7 ) >> 16 );
2242 ssl->
out_msg[5] = (
unsigned char)( ( i - 7 ) >> 8 );
2243 ssl->
out_msg[6] = (
unsigned char)( ( i - 7 ) );
2315 memcmp( ssl->
in_msg + 4,
"\0\0\0", 3 ) == 0 )
2369 while( i < ssl->in_hslen )
2371 if( ssl->
in_msg[i] != 0 )
2377 n = ( (
unsigned int) ssl->
in_msg[i + 1] << 8 )
2378 | (
unsigned int) ssl->
in_msg[i + 2];
2381 if( n < 128 || i + n > ssl->
in_hslen )
2481 #if !defined(POLARSSL_SHA4_C)
2482 ((void) ciphersuite);
2487 #if defined(POLARSSL_SHA4_C)
2498 static void ssl_update_checksum_start(
ssl_context *ssl,
unsigned char *buf,
2504 #if defined(POLARSSL_SHA4_C)
2509 static void ssl_update_checksum_md5sha1(
ssl_context *ssl,
unsigned char *buf,
2516 static void ssl_update_checksum_sha256(
ssl_context *ssl,
unsigned char *buf,
2522 #if defined(POLARSSL_SHA4_C)
2523 static void ssl_update_checksum_sha384(
ssl_context *ssl,
unsigned char *buf,
2530 static void ssl_calc_finished_ssl(
2537 unsigned char padbuf[48];
2538 unsigned char md5sum[16];
2539 unsigned char sha1sum[20];
2559 #if !defined(POLARSSL_MD5_ALT)
2564 #if !defined(POLARSSL_SHA1_ALT)
2572 memset( padbuf, 0x36, 48 );
2574 md5_update( &md5, (
const unsigned char *) sender, 4 );
2579 sha1_update( &sha1, (
const unsigned char *) sender, 4 );
2584 memset( padbuf, 0x5C, 48 );
2603 memset( padbuf, 0,
sizeof( padbuf ) );
2604 memset( md5sum, 0,
sizeof( md5sum ) );
2605 memset( sha1sum, 0,
sizeof( sha1sum ) );
2610 static void ssl_calc_finished_tls(
2617 unsigned char padbuf[36];
2634 #if !defined(POLARSSL_MD5_ALT)
2639 #if !defined(POLARSSL_SHA1_ALT)
2646 :
"server finished";
2652 padbuf, 36, buf, len );
2659 memset( padbuf, 0,
sizeof( padbuf ) );
2664 static void ssl_calc_finished_tls_sha256(
2670 unsigned char padbuf[32];
2686 #if !defined(POLARSSL_SHA2_ALT)
2693 :
"server finished";
2698 padbuf, 32, buf, len );
2704 memset( padbuf, 0,
sizeof( padbuf ) );
2709 #if defined(POLARSSL_SHA4_C)
2710 static void ssl_calc_finished_tls_sha384(
2716 unsigned char padbuf[48];
2732 #if !defined(POLARSSL_SHA4_ALT)
2739 :
"server finished";
2744 padbuf, 48, buf, len );
2750 memset( padbuf, 0,
sizeof( padbuf ) );
2833 SSL_DEBUG_MSG( 3, (
"switching to new transform spec for outbound data" ) );
2852 unsigned int hash_len;
2853 unsigned char buf[36];
2862 SSL_DEBUG_MSG( 3, (
"switching to new transform spec for inbound data" ) );
2865 memset( ssl->
in_ctr, 0, 8 );
2889 if( memcmp( ssl->
in_msg + 4, buf, hash_len ) != 0 )
2935 SSL_DEBUG_MSG( 1, (
"malloc() of ssl sub-contexts failed" ) );
2946 #if defined(POLARSSL_SHA4_C)
2979 #if defined(POLARSSL_DHM_C)
2993 ssl->
in_ctr = (
unsigned char *) malloc( len );
2997 if( ssl->
in_ctr == NULL )
3003 ssl->
out_ctr = (
unsigned char *) malloc( len );
3010 free( ssl-> in_ctr );
3020 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3061 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
3062 if( ssl_hw_record_reset != NULL)
3065 if( ssl_hw_record_reset( ssl ) != 0 )
3087 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3107 int (*f_vrfy)(
void *,
x509_cert *,
int,
int *),
3115 int (*f_rng)(
void *,
unsigned char *,
size_t),
3123 void (*f_dbg)(
void *,
int,
const char *),
3131 int (*f_recv)(
void *,
unsigned char *,
size_t),
void *p_recv,
3132 int (*f_send)(
void *,
const unsigned char *,
size_t),
void *p_send )
3141 int (*f_get_cache)(
void *,
ssl_session *),
void *p_get_cache,
3142 int (*f_set_cache)(
void *,
const ssl_session *),
void *p_set_cache )
3165 int major,
int minor )
3177 x509_crl *ca_crl,
const char *peer_cn )
3205 #if defined(POLARSSL_DHM_C)
3247 if( hostname == NULL )
3260 memcpy( ssl->
hostname, (
const unsigned char *) hostname,
3270 const unsigned char *,
size_t),
3314 switch( ciphersuite_id )
3316 #if defined(POLARSSL_ARC4_C)
3318 return(
"TLS-RSA-WITH-RC4-128-MD5" );
3321 return(
"TLS-RSA-WITH-RC4-128-SHA" );
3324 #if defined(POLARSSL_DES_C)
3326 return(
"TLS-RSA-WITH-3DES-EDE-CBC-SHA" );
3329 return(
"TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA" );
3332 #if defined(POLARSSL_AES_C)
3334 return(
"TLS-RSA-WITH-AES-128-CBC-SHA" );
3337 return(
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA" );
3340 return(
"TLS-RSA-WITH-AES-256-CBC-SHA" );
3343 return(
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA" );
3345 #if defined(POLARSSL_SHA2_C)
3347 return(
"TLS-RSA-WITH-AES-128-CBC-SHA256" );
3350 return(
"TLS-RSA-WITH-AES-256-CBC-SHA256" );
3353 return(
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA256" );
3356 return(
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" );
3359 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3361 return(
"TLS-RSA-WITH-AES-128-GCM-SHA256" );
3364 return(
"TLS-RSA-WITH-AES-256-GCM-SHA384" );
3367 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3369 return(
"TLS-DHE-RSA-WITH-AES-128-GCM-SHA256" );
3372 return(
"TLS-DHE-RSA-WITH-AES-256-GCM-SHA384" );
3376 #if defined(POLARSSL_CAMELLIA_C)
3378 return(
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA" );
3381 return(
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA" );
3384 return(
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA" );
3387 return(
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA" );
3389 #if defined(POLARSSL_SHA2_C)
3391 return(
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
3394 return(
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
3397 return(
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
3400 return(
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
3404 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
3405 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
3407 return(
"TLS-RSA-WITH-NULL-MD5" );
3409 return(
"TLS-RSA-WITH-NULL-SHA" );
3411 return(
"TLS-RSA-WITH-NULL-SHA256" );
3414 #if defined(POLARSSL_DES_C)
3416 return(
"TLS-RSA-WITH-DES-CBC-SHA" );
3418 return(
"TLS-DHE-RSA-WITH-DES-CBC-SHA" );
3426 return(
"unknown" );
3431 #if defined(POLARSSL_ARC4_C)
3432 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-RC4-128-MD5"))
3434 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-RC4-128-SHA"))
3438 #if defined(POLARSSL_DES_C)
3439 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-3DES-EDE-CBC-SHA"))
3441 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA"))
3445 #if defined(POLARSSL_AES_C)
3446 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-CBC-SHA"))
3448 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA"))
3450 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-CBC-SHA"))
3452 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA"))
3455 #if defined(POLARSSL_SHA2_C)
3456 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-CBC-SHA256"))
3458 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-CBC-SHA256"))
3460 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA256"))
3462 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256"))
3466 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3467 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-128-GCM-SHA256"))
3469 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-AES-256-GCM-SHA384"))
3473 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3474 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-128-GCM-SHA256"))
3476 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-AES-256-GCM-SHA384"))
3481 #if defined(POLARSSL_CAMELLIA_C)
3482 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA"))
3484 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA"))
3486 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA"))
3488 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA"))
3491 #if defined(POLARSSL_SHA2_C)
3492 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
3494 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
3496 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
3498 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
3503 #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
3504 #if defined(POLARSSL_CIPHER_NULL_CIPHER)
3505 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-MD5"))
3507 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-SHA"))
3509 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-NULL-SHA256"))
3513 #if defined(POLARSSL_DES_C)
3514 if (0 == strcasecmp(ciphersuite_name,
"TLS-RSA-WITH-DES-CBC-SHA"))
3516 if (0 == strcasecmp(ciphersuite_name,
"TLS-DHE-RSA-WITH-DES-CBC-SHA"))
3526 switch( ciphersuite_id )
3570 if( ssl == NULL || ssl->
session == NULL )
3581 return(
"SSLv3.0" );
3584 return(
"TLSv1.0" );
3587 return(
"TLSv1.1" );
3590 return(
"TLSv1.2" );
3595 return(
"unknown" );
3600 if( ssl == NULL || ssl->
session == NULL )
3608 #if defined(POLARSSL_DHM_C)
3609 #if defined(POLARSSL_AES_C)
3610 #if defined(POLARSSL_SHA2_C)
3613 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3617 #if defined(POLARSSL_SHA2_C)
3620 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3625 #if defined(POLARSSL_CAMELLIA_C)
3626 #if defined(POLARSSL_SHA2_C)
3630 #if defined(POLARSSL_SHA2_C)
3635 #if defined(POLARSSL_DES_C)
3640 #if defined(POLARSSL_AES_C)
3641 #if defined(POLARSSL_SHA2_C)
3644 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
3649 #if defined(POLARSSL_CAMELLIA_C)
3650 #if defined(POLARSSL_SHA2_C)
3655 #if defined(POLARSSL_AES_C)
3656 #if defined(POLARSSL_SHA2_C)
3659 #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
3664 #if defined(POLARSSL_CAMELLIA_C)
3665 #if defined(POLARSSL_SHA2_C)
3670 #if defined(POLARSSL_DES_C)
3673 #if defined(POLARSSL_ARC4_C)
3687 #if defined(POLARSSL_SSL_CLI_C)
3692 #if defined(POLARSSL_SSL_SRV_C)
3737 if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
3805 SSL_DEBUG_MSG( 1, (
"handshake received (not HelloRequest)" ) );
3813 SSL_DEBUG_MSG( 3, (
"ignoring renegotiation, sending alert" ) );
3856 memcpy( buf, ssl->
in_offt, n );
3905 memcpy( ssl->
out_msg, buf, n );
3951 #if defined(POLARSSL_ZLIB_SUPPORT)
3952 deflateEnd( &transform->ctx_deflate );
3953 inflateEnd( &transform->ctx_inflate );
3961 #if defined(POLARSSL_DHM_C)
3993 if( ssl->
in_ctr != NULL )
3999 #if defined(POLARSSL_DHM_C)
4034 #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
4035 if( ssl_hw_record_finish != NULL )
4038 ssl_hw_record_finish( ssl );