PageRenderTime 73ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/library/ssl_tls.c

https://github.com/leg0/polarssl
C | 3928 lines | 2932 code | 683 blank | 313 comment | 607 complexity | 504bfd6a3b35637d9b6b914116e0df85 MD5 | raw file
Possible License(s): GPL-2.0
  1. /*
  2. * SSLv3/TLSv1 shared functions
  3. *
  4. * Copyright (C) 2006-2012, Brainspark B.V.
  5. *
  6. * This file is part of PolarSSL (http://www.polarssl.org)
  7. * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
  8. *
  9. * All rights reserved.
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License as published by
  13. * the Free Software Foundation; either version 2 of the License, or
  14. * (at your option) any later version.
  15. *
  16. * This program is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU General Public License along
  22. * with this program; if not, write to the Free Software Foundation, Inc.,
  23. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  24. */
  25. /*
  26. * The SSL 3.0 specification was drafted by Netscape in 1996,
  27. * and became an IETF standard in 1999.
  28. *
  29. * http://wp.netscape.com/eng/ssl3/
  30. * http://www.ietf.org/rfc/rfc2246.txt
  31. * http://www.ietf.org/rfc/rfc4346.txt
  32. */
  33. #include "polarssl/config.h"
  34. #if defined(POLARSSL_SSL_TLS_C)
  35. #include "polarssl/aes.h"
  36. #include "polarssl/arc4.h"
  37. #include "polarssl/camellia.h"
  38. #include "polarssl/des.h"
  39. #include "polarssl/debug.h"
  40. #include "polarssl/ssl.h"
  41. #include "polarssl/sha2.h"
  42. #if defined(POLARSSL_GCM_C)
  43. #include "polarssl/gcm.h"
  44. #endif
  45. #include <stdlib.h>
  46. #include <time.h>
  47. #if defined _MSC_VER && !defined strcasecmp
  48. #define strcasecmp _stricmp
  49. #endif
  50. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  51. int (*ssl_hw_record_init)(ssl_context *ssl,
  52. const unsigned char *key_enc, const unsigned char *key_dec,
  53. const unsigned char *iv_enc, const unsigned char *iv_dec,
  54. const unsigned char *mac_enc, const unsigned char *mac_dec) = NULL;
  55. int (*ssl_hw_record_reset)(ssl_context *ssl) = NULL;
  56. int (*ssl_hw_record_write)(ssl_context *ssl) = NULL;
  57. int (*ssl_hw_record_read)(ssl_context *ssl) = NULL;
  58. int (*ssl_hw_record_finish)(ssl_context *ssl) = NULL;
  59. #endif
  60. static int ssl_rsa_decrypt( void *ctx, int mode, size_t *olen,
  61. const unsigned char *input, unsigned char *output,
  62. size_t output_max_len )
  63. {
  64. return rsa_pkcs1_decrypt( (rsa_context *) ctx, mode, olen, input, output,
  65. output_max_len );
  66. }
  67. static int ssl_rsa_sign( void *ctx,
  68. int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
  69. int mode, int hash_id, unsigned int hashlen,
  70. const unsigned char *hash, unsigned char *sig )
  71. {
  72. return rsa_pkcs1_sign( (rsa_context *) ctx, f_rng, p_rng, mode, hash_id,
  73. hashlen, hash, sig );
  74. }
  75. static size_t ssl_rsa_key_len( void *ctx )
  76. {
  77. return ( (rsa_context *) ctx )->len;
  78. }
  79. /*
  80. * Key material generation
  81. */
  82. static int ssl3_prf( unsigned char *secret, size_t slen, char *label,
  83. unsigned char *random, size_t rlen,
  84. unsigned char *dstbuf, size_t dlen )
  85. {
  86. size_t i;
  87. md5_context md5;
  88. sha1_context sha1;
  89. unsigned char padding[16];
  90. unsigned char sha1sum[20];
  91. ((void)label);
  92. /*
  93. * SSLv3:
  94. * block =
  95. * MD5( secret + SHA1( 'A' + secret + random ) ) +
  96. * MD5( secret + SHA1( 'BB' + secret + random ) ) +
  97. * MD5( secret + SHA1( 'CCC' + secret + random ) ) +
  98. * ...
  99. */
  100. for( i = 0; i < dlen / 16; i++ )
  101. {
  102. memset( padding, 'A' + i, 1 + i );
  103. sha1_starts( &sha1 );
  104. sha1_update( &sha1, padding, 1 + i );
  105. sha1_update( &sha1, secret, slen );
  106. sha1_update( &sha1, random, rlen );
  107. sha1_finish( &sha1, sha1sum );
  108. md5_starts( &md5 );
  109. md5_update( &md5, secret, slen );
  110. md5_update( &md5, sha1sum, 20 );
  111. md5_finish( &md5, dstbuf + i * 16 );
  112. }
  113. memset( &md5, 0, sizeof( md5 ) );
  114. memset( &sha1, 0, sizeof( sha1 ) );
  115. memset( padding, 0, sizeof( padding ) );
  116. memset( sha1sum, 0, sizeof( sha1sum ) );
  117. return( 0 );
  118. }
  119. static int tls1_prf( unsigned char *secret, size_t slen, char *label,
  120. unsigned char *random, size_t rlen,
  121. unsigned char *dstbuf, size_t dlen )
  122. {
  123. size_t nb, hs;
  124. size_t i, j, k;
  125. unsigned char *S1, *S2;
  126. unsigned char tmp[128];
  127. unsigned char h_i[20];
  128. if( sizeof( tmp ) < 20 + strlen( label ) + rlen )
  129. return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
  130. hs = ( slen + 1 ) / 2;
  131. S1 = secret;
  132. S2 = secret + slen - hs;
  133. nb = strlen( label );
  134. memcpy( tmp + 20, label, nb );
  135. memcpy( tmp + 20 + nb, random, rlen );
  136. nb += rlen;
  137. /*
  138. * First compute P_md5(secret,label+random)[0..dlen]
  139. */
  140. md5_hmac( S1, hs, tmp + 20, nb, 4 + tmp );
  141. for( i = 0; i < dlen; i += 16 )
  142. {
  143. md5_hmac( S1, hs, 4 + tmp, 16 + nb, h_i );
  144. md5_hmac( S1, hs, 4 + tmp, 16, 4 + tmp );
  145. k = ( i + 16 > dlen ) ? dlen % 16 : 16;
  146. for( j = 0; j < k; j++ )
  147. dstbuf[i + j] = h_i[j];
  148. }
  149. /*
  150. * XOR out with P_sha1(secret,label+random)[0..dlen]
  151. */
  152. sha1_hmac( S2, hs, tmp + 20, nb, tmp );
  153. for( i = 0; i < dlen; i += 20 )
  154. {
  155. sha1_hmac( S2, hs, tmp, 20 + nb, h_i );
  156. sha1_hmac( S2, hs, tmp, 20, tmp );
  157. k = ( i + 20 > dlen ) ? dlen % 20 : 20;
  158. for( j = 0; j < k; j++ )
  159. dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] );
  160. }
  161. memset( tmp, 0, sizeof( tmp ) );
  162. memset( h_i, 0, sizeof( h_i ) );
  163. return( 0 );
  164. }
  165. static int tls_prf_sha256( unsigned char *secret, size_t slen, char *label,
  166. unsigned char *random, size_t rlen,
  167. unsigned char *dstbuf, size_t dlen )
  168. {
  169. size_t nb;
  170. size_t i, j, k;
  171. unsigned char tmp[128];
  172. unsigned char h_i[32];
  173. if( sizeof( tmp ) < 32 + strlen( label ) + rlen )
  174. return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
  175. nb = strlen( label );
  176. memcpy( tmp + 32, label, nb );
  177. memcpy( tmp + 32 + nb, random, rlen );
  178. nb += rlen;
  179. /*
  180. * Compute P_<hash>(secret, label + random)[0..dlen]
  181. */
  182. sha2_hmac( secret, slen, tmp + 32, nb, tmp, 0 );
  183. for( i = 0; i < dlen; i += 32 )
  184. {
  185. sha2_hmac( secret, slen, tmp, 32 + nb, h_i, 0 );
  186. sha2_hmac( secret, slen, tmp, 32, tmp, 0 );
  187. k = ( i + 32 > dlen ) ? dlen % 32 : 32;
  188. for( j = 0; j < k; j++ )
  189. dstbuf[i + j] = h_i[j];
  190. }
  191. memset( tmp, 0, sizeof( tmp ) );
  192. memset( h_i, 0, sizeof( h_i ) );
  193. return( 0 );
  194. }
  195. #if defined(POLARSSL_SHA4_C)
  196. static int tls_prf_sha384( unsigned char *secret, size_t slen, char *label,
  197. unsigned char *random, size_t rlen,
  198. unsigned char *dstbuf, size_t dlen )
  199. {
  200. size_t nb;
  201. size_t i, j, k;
  202. unsigned char tmp[128];
  203. unsigned char h_i[48];
  204. if( sizeof( tmp ) < 48 + strlen( label ) + rlen )
  205. return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
  206. nb = strlen( label );
  207. memcpy( tmp + 48, label, nb );
  208. memcpy( tmp + 48 + nb, random, rlen );
  209. nb += rlen;
  210. /*
  211. * Compute P_<hash>(secret, label + random)[0..dlen]
  212. */
  213. sha4_hmac( secret, slen, tmp + 48, nb, tmp, 1 );
  214. for( i = 0; i < dlen; i += 48 )
  215. {
  216. sha4_hmac( secret, slen, tmp, 48 + nb, h_i, 1 );
  217. sha4_hmac( secret, slen, tmp, 48, tmp, 1 );
  218. k = ( i + 48 > dlen ) ? dlen % 48 : 48;
  219. for( j = 0; j < k; j++ )
  220. dstbuf[i + j] = h_i[j];
  221. }
  222. memset( tmp, 0, sizeof( tmp ) );
  223. memset( h_i, 0, sizeof( h_i ) );
  224. return( 0 );
  225. }
  226. #endif
  227. static void ssl_update_checksum_start(ssl_context *, unsigned char *, size_t);
  228. static void ssl_update_checksum_md5sha1(ssl_context *, unsigned char *, size_t);
  229. static void ssl_update_checksum_sha256(ssl_context *, unsigned char *, size_t);
  230. static void ssl_calc_verify_ssl(ssl_context *,unsigned char *);
  231. static void ssl_calc_verify_tls(ssl_context *,unsigned char *);
  232. static void ssl_calc_verify_tls_sha256(ssl_context *,unsigned char *);
  233. static void ssl_calc_finished_ssl(ssl_context *,unsigned char *,int);
  234. static void ssl_calc_finished_tls(ssl_context *,unsigned char *,int);
  235. static void ssl_calc_finished_tls_sha256(ssl_context *,unsigned char *,int);
  236. #if defined(POLARSSL_SHA4_C)
  237. static void ssl_update_checksum_sha384(ssl_context *, unsigned char *, size_t);
  238. static void ssl_calc_verify_tls_sha384(ssl_context *,unsigned char *);
  239. static void ssl_calc_finished_tls_sha384(ssl_context *,unsigned char *,int);
  240. #endif
  241. int ssl_derive_keys( ssl_context *ssl )
  242. {
  243. unsigned char tmp[64];
  244. unsigned char keyblk[256];
  245. unsigned char *key1;
  246. unsigned char *key2;
  247. unsigned int iv_copy_len;
  248. ssl_session *session = ssl->session_negotiate;
  249. ssl_transform *transform = ssl->transform_negotiate;
  250. ssl_handshake_params *handshake = ssl->handshake;
  251. SSL_DEBUG_MSG( 2, ( "=> derive keys" ) );
  252. /*
  253. * Set appropriate PRF function and other SSL / TLS / TLS1.2 functions
  254. */
  255. if( ssl->minor_ver == SSL_MINOR_VERSION_0 )
  256. {
  257. handshake->tls_prf = ssl3_prf;
  258. handshake->calc_verify = ssl_calc_verify_ssl;
  259. handshake->calc_finished = ssl_calc_finished_ssl;
  260. }
  261. else if( ssl->minor_ver < SSL_MINOR_VERSION_3 )
  262. {
  263. handshake->tls_prf = tls1_prf;
  264. handshake->calc_verify = ssl_calc_verify_tls;
  265. handshake->calc_finished = ssl_calc_finished_tls;
  266. }
  267. #if defined(POLARSSL_SHA4_C)
  268. else if( session->ciphersuite == TLS_RSA_WITH_AES_256_GCM_SHA384 ||
  269. session->ciphersuite == TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
  270. {
  271. handshake->tls_prf = tls_prf_sha384;
  272. handshake->calc_verify = ssl_calc_verify_tls_sha384;
  273. handshake->calc_finished = ssl_calc_finished_tls_sha384;
  274. }
  275. #endif
  276. else
  277. {
  278. handshake->tls_prf = tls_prf_sha256;
  279. handshake->calc_verify = ssl_calc_verify_tls_sha256;
  280. handshake->calc_finished = ssl_calc_finished_tls_sha256;
  281. }
  282. /*
  283. * SSLv3:
  284. * master =
  285. * MD5( premaster + SHA1( 'A' + premaster + randbytes ) ) +
  286. * MD5( premaster + SHA1( 'BB' + premaster + randbytes ) ) +
  287. * MD5( premaster + SHA1( 'CCC' + premaster + randbytes ) )
  288. *
  289. * TLSv1:
  290. * master = PRF( premaster, "master secret", randbytes )[0..47]
  291. */
  292. if( handshake->resume == 0 )
  293. {
  294. SSL_DEBUG_BUF( 3, "premaster secret", handshake->premaster,
  295. handshake->pmslen );
  296. handshake->tls_prf( handshake->premaster, handshake->pmslen,
  297. "master secret",
  298. handshake->randbytes, 64, session->master, 48 );
  299. memset( handshake->premaster, 0, sizeof( handshake->premaster ) );
  300. }
  301. else
  302. SSL_DEBUG_MSG( 3, ( "no premaster (session resumed)" ) );
  303. /*
  304. * Swap the client and server random values.
  305. */
  306. memcpy( tmp, handshake->randbytes, 64 );
  307. memcpy( handshake->randbytes, tmp + 32, 32 );
  308. memcpy( handshake->randbytes + 32, tmp, 32 );
  309. memset( tmp, 0, sizeof( tmp ) );
  310. /*
  311. * SSLv3:
  312. * key block =
  313. * MD5( master + SHA1( 'A' + master + randbytes ) ) +
  314. * MD5( master + SHA1( 'BB' + master + randbytes ) ) +
  315. * MD5( master + SHA1( 'CCC' + master + randbytes ) ) +
  316. * MD5( master + SHA1( 'DDDD' + master + randbytes ) ) +
  317. * ...
  318. *
  319. * TLSv1:
  320. * key block = PRF( master, "key expansion", randbytes )
  321. */
  322. handshake->tls_prf( session->master, 48, "key expansion",
  323. handshake->randbytes, 64, keyblk, 256 );
  324. SSL_DEBUG_MSG( 3, ( "ciphersuite = %s",
  325. ssl_get_ciphersuite_name( session->ciphersuite ) ) );
  326. SSL_DEBUG_BUF( 3, "master secret", session->master, 48 );
  327. SSL_DEBUG_BUF( 4, "random bytes", handshake->randbytes, 64 );
  328. SSL_DEBUG_BUF( 4, "key block", keyblk, 256 );
  329. memset( handshake->randbytes, 0, sizeof( handshake->randbytes ) );
  330. /*
  331. * Determine the appropriate key, IV and MAC length.
  332. */
  333. switch( session->ciphersuite )
  334. {
  335. #if defined(POLARSSL_ARC4_C)
  336. case TLS_RSA_WITH_RC4_128_MD5:
  337. transform->keylen = 16; transform->minlen = 16;
  338. transform->ivlen = 0; transform->maclen = 16;
  339. break;
  340. case TLS_RSA_WITH_RC4_128_SHA:
  341. transform->keylen = 16; transform->minlen = 20;
  342. transform->ivlen = 0; transform->maclen = 20;
  343. break;
  344. #endif
  345. #if defined(POLARSSL_DES_C)
  346. case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
  347. case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
  348. transform->keylen = 24; transform->minlen = 24;
  349. transform->ivlen = 8; transform->maclen = 20;
  350. break;
  351. #endif
  352. #if defined(POLARSSL_AES_C)
  353. case TLS_RSA_WITH_AES_128_CBC_SHA:
  354. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
  355. transform->keylen = 16; transform->minlen = 32;
  356. transform->ivlen = 16; transform->maclen = 20;
  357. break;
  358. case TLS_RSA_WITH_AES_256_CBC_SHA:
  359. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
  360. transform->keylen = 32; transform->minlen = 32;
  361. transform->ivlen = 16; transform->maclen = 20;
  362. break;
  363. #if defined(POLARSSL_SHA2_C)
  364. case TLS_RSA_WITH_AES_128_CBC_SHA256:
  365. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
  366. transform->keylen = 16; transform->minlen = 32;
  367. transform->ivlen = 16; transform->maclen = 32;
  368. break;
  369. case TLS_RSA_WITH_AES_256_CBC_SHA256:
  370. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
  371. transform->keylen = 32; transform->minlen = 32;
  372. transform->ivlen = 16; transform->maclen = 32;
  373. break;
  374. #endif
  375. #if defined(POLARSSL_GCM_C)
  376. case TLS_RSA_WITH_AES_128_GCM_SHA256:
  377. case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
  378. transform->keylen = 16; transform->minlen = 1;
  379. transform->ivlen = 12; transform->maclen = 0;
  380. transform->fixed_ivlen = 4;
  381. break;
  382. case TLS_RSA_WITH_AES_256_GCM_SHA384:
  383. case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
  384. transform->keylen = 32; transform->minlen = 1;
  385. transform->ivlen = 12; transform->maclen = 0;
  386. transform->fixed_ivlen = 4;
  387. break;
  388. #endif
  389. #endif
  390. #if defined(POLARSSL_CAMELLIA_C)
  391. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA:
  392. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:
  393. transform->keylen = 16; transform->minlen = 32;
  394. transform->ivlen = 16; transform->maclen = 20;
  395. break;
  396. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA:
  397. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:
  398. transform->keylen = 32; transform->minlen = 32;
  399. transform->ivlen = 16; transform->maclen = 20;
  400. break;
  401. #if defined(POLARSSL_SHA2_C)
  402. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  403. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  404. transform->keylen = 16; transform->minlen = 32;
  405. transform->ivlen = 16; transform->maclen = 32;
  406. break;
  407. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  408. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  409. transform->keylen = 32; transform->minlen = 32;
  410. transform->ivlen = 16; transform->maclen = 32;
  411. break;
  412. #endif
  413. #endif
  414. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  415. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  416. case TLS_RSA_WITH_NULL_MD5:
  417. transform->keylen = 0; transform->minlen = 0;
  418. transform->ivlen = 0; transform->maclen = 16;
  419. break;
  420. case TLS_RSA_WITH_NULL_SHA:
  421. transform->keylen = 0; transform->minlen = 0;
  422. transform->ivlen = 0; transform->maclen = 20;
  423. break;
  424. case TLS_RSA_WITH_NULL_SHA256:
  425. transform->keylen = 0; transform->minlen = 0;
  426. transform->ivlen = 0; transform->maclen = 32;
  427. break;
  428. #endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
  429. #if defined(POLARSSL_DES_C)
  430. case TLS_RSA_WITH_DES_CBC_SHA:
  431. case TLS_DHE_RSA_WITH_DES_CBC_SHA:
  432. transform->keylen = 8; transform->minlen = 8;
  433. transform->ivlen = 8; transform->maclen = 20;
  434. break;
  435. #endif
  436. #endif /* defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) */
  437. default:
  438. SSL_DEBUG_MSG( 1, ( "ciphersuite %s is not available",
  439. ssl_get_ciphersuite_name( session->ciphersuite ) ) );
  440. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  441. }
  442. SSL_DEBUG_MSG( 3, ( "keylen: %d, minlen: %d, ivlen: %d, maclen: %d",
  443. transform->keylen, transform->minlen, transform->ivlen,
  444. transform->maclen ) );
  445. /*
  446. * Finally setup the cipher contexts, IVs and MAC secrets.
  447. */
  448. if( ssl->endpoint == SSL_IS_CLIENT )
  449. {
  450. key1 = keyblk + transform->maclen * 2;
  451. key2 = keyblk + transform->maclen * 2 + transform->keylen;
  452. memcpy( transform->mac_enc, keyblk, transform->maclen );
  453. memcpy( transform->mac_dec, keyblk + transform->maclen,
  454. transform->maclen );
  455. /*
  456. * This is not used in TLS v1.1.
  457. */
  458. iv_copy_len = ( transform->fixed_ivlen ) ?
  459. transform->fixed_ivlen : transform->ivlen;
  460. memcpy( transform->iv_enc, key2 + transform->keylen, iv_copy_len );
  461. memcpy( transform->iv_dec, key2 + transform->keylen + iv_copy_len,
  462. iv_copy_len );
  463. }
  464. else
  465. {
  466. key1 = keyblk + transform->maclen * 2 + transform->keylen;
  467. key2 = keyblk + transform->maclen * 2;
  468. memcpy( transform->mac_dec, keyblk, transform->maclen );
  469. memcpy( transform->mac_enc, keyblk + transform->maclen,
  470. transform->maclen );
  471. /*
  472. * This is not used in TLS v1.1.
  473. */
  474. iv_copy_len = ( transform->fixed_ivlen ) ?
  475. transform->fixed_ivlen : transform->ivlen;
  476. memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len );
  477. memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len,
  478. iv_copy_len );
  479. }
  480. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  481. if( ssl_hw_record_init != NULL)
  482. {
  483. int ret = 0;
  484. SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_init()" ) );
  485. if( ( ret = ssl_hw_record_init( ssl, key1, key2, transform->iv_enc,
  486. transform->iv_dec, transform->mac_enc,
  487. transform->mac_dec ) ) != 0 )
  488. {
  489. SSL_DEBUG_RET( 1, "ssl_hw_record_init", ret );
  490. return POLARSSL_ERR_SSL_HW_ACCEL_FAILED;
  491. }
  492. }
  493. #endif
  494. switch( session->ciphersuite )
  495. {
  496. #if defined(POLARSSL_ARC4_C)
  497. case TLS_RSA_WITH_RC4_128_MD5:
  498. case TLS_RSA_WITH_RC4_128_SHA:
  499. arc4_setup( (arc4_context *) transform->ctx_enc, key1,
  500. transform->keylen );
  501. arc4_setup( (arc4_context *) transform->ctx_dec, key2,
  502. transform->keylen );
  503. break;
  504. #endif
  505. #if defined(POLARSSL_DES_C)
  506. case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
  507. case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
  508. des3_set3key_enc( (des3_context *) transform->ctx_enc, key1 );
  509. des3_set3key_dec( (des3_context *) transform->ctx_dec, key2 );
  510. break;
  511. #endif
  512. #if defined(POLARSSL_AES_C)
  513. case TLS_RSA_WITH_AES_128_CBC_SHA:
  514. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
  515. case TLS_RSA_WITH_AES_128_CBC_SHA256:
  516. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
  517. aes_setkey_enc( (aes_context *) transform->ctx_enc, key1, 128 );
  518. aes_setkey_dec( (aes_context *) transform->ctx_dec, key2, 128 );
  519. break;
  520. case TLS_RSA_WITH_AES_256_CBC_SHA:
  521. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
  522. case TLS_RSA_WITH_AES_256_CBC_SHA256:
  523. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
  524. aes_setkey_enc( (aes_context *) transform->ctx_enc, key1, 256 );
  525. aes_setkey_dec( (aes_context *) transform->ctx_dec, key2, 256 );
  526. break;
  527. #if defined(POLARSSL_GCM_C)
  528. case TLS_RSA_WITH_AES_128_GCM_SHA256:
  529. case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
  530. gcm_init( (gcm_context *) transform->ctx_enc, key1, 128 );
  531. gcm_init( (gcm_context *) transform->ctx_dec, key2, 128 );
  532. break;
  533. case TLS_RSA_WITH_AES_256_GCM_SHA384:
  534. case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
  535. gcm_init( (gcm_context *) transform->ctx_enc, key1, 256 );
  536. gcm_init( (gcm_context *) transform->ctx_dec, key2, 256 );
  537. break;
  538. #endif
  539. #endif
  540. #if defined(POLARSSL_CAMELLIA_C)
  541. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA:
  542. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:
  543. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  544. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  545. camellia_setkey_enc( (camellia_context *) transform->ctx_enc, key1, 128 );
  546. camellia_setkey_dec( (camellia_context *) transform->ctx_dec, key2, 128 );
  547. break;
  548. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA:
  549. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:
  550. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  551. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  552. camellia_setkey_enc( (camellia_context *) transform->ctx_enc, key1, 256 );
  553. camellia_setkey_dec( (camellia_context *) transform->ctx_dec, key2, 256 );
  554. break;
  555. #endif
  556. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  557. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  558. case TLS_RSA_WITH_NULL_MD5:
  559. case TLS_RSA_WITH_NULL_SHA:
  560. case TLS_RSA_WITH_NULL_SHA256:
  561. break;
  562. #endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
  563. #if defined(POLARSSL_DES_C)
  564. case TLS_RSA_WITH_DES_CBC_SHA:
  565. case TLS_DHE_RSA_WITH_DES_CBC_SHA:
  566. des_setkey_enc( (des_context *) transform->ctx_enc, key1 );
  567. des_setkey_dec( (des_context *) transform->ctx_dec, key2 );
  568. break;
  569. #endif
  570. #endif /* defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) */
  571. default:
  572. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  573. }
  574. memset( keyblk, 0, sizeof( keyblk ) );
  575. #if defined(POLARSSL_ZLIB_SUPPORT)
  576. // Initialize compression
  577. //
  578. if( session->compression == SSL_COMPRESS_DEFLATE )
  579. {
  580. SSL_DEBUG_MSG( 3, ( "Initializing zlib states" ) );
  581. memset( &transform->ctx_deflate, 0, sizeof( transform->ctx_deflate ) );
  582. memset( &transform->ctx_inflate, 0, sizeof( transform->ctx_inflate ) );
  583. if( deflateInit( &transform->ctx_deflate, Z_DEFAULT_COMPRESSION ) != Z_OK ||
  584. inflateInit( &transform->ctx_inflate ) != Z_OK )
  585. {
  586. SSL_DEBUG_MSG( 1, ( "Failed to initialize compression" ) );
  587. return( POLARSSL_ERR_SSL_COMPRESSION_FAILED );
  588. }
  589. }
  590. #endif /* POLARSSL_ZLIB_SUPPORT */
  591. SSL_DEBUG_MSG( 2, ( "<= derive keys" ) );
  592. return( 0 );
  593. }
  594. void ssl_calc_verify_ssl( ssl_context *ssl, unsigned char hash[36] )
  595. {
  596. md5_context md5;
  597. sha1_context sha1;
  598. unsigned char pad_1[48];
  599. unsigned char pad_2[48];
  600. SSL_DEBUG_MSG( 2, ( "=> calc verify ssl" ) );
  601. memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) );
  602. memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) );
  603. memset( pad_1, 0x36, 48 );
  604. memset( pad_2, 0x5C, 48 );
  605. md5_update( &md5, ssl->session_negotiate->master, 48 );
  606. md5_update( &md5, pad_1, 48 );
  607. md5_finish( &md5, hash );
  608. md5_starts( &md5 );
  609. md5_update( &md5, ssl->session_negotiate->master, 48 );
  610. md5_update( &md5, pad_2, 48 );
  611. md5_update( &md5, hash, 16 );
  612. md5_finish( &md5, hash );
  613. sha1_update( &sha1, ssl->session_negotiate->master, 48 );
  614. sha1_update( &sha1, pad_1, 40 );
  615. sha1_finish( &sha1, hash + 16 );
  616. sha1_starts( &sha1 );
  617. sha1_update( &sha1, ssl->session_negotiate->master, 48 );
  618. sha1_update( &sha1, pad_2, 40 );
  619. sha1_update( &sha1, hash + 16, 20 );
  620. sha1_finish( &sha1, hash + 16 );
  621. SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 );
  622. SSL_DEBUG_MSG( 2, ( "<= calc verify" ) );
  623. return;
  624. }
  625. void ssl_calc_verify_tls( ssl_context *ssl, unsigned char hash[36] )
  626. {
  627. md5_context md5;
  628. sha1_context sha1;
  629. SSL_DEBUG_MSG( 2, ( "=> calc verify tls" ) );
  630. memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) );
  631. memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) );
  632. md5_finish( &md5, hash );
  633. sha1_finish( &sha1, hash + 16 );
  634. SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 );
  635. SSL_DEBUG_MSG( 2, ( "<= calc verify" ) );
  636. return;
  637. }
  638. void ssl_calc_verify_tls_sha256( ssl_context *ssl, unsigned char hash[32] )
  639. {
  640. sha2_context sha2;
  641. SSL_DEBUG_MSG( 2, ( "=> calc verify sha256" ) );
  642. memcpy( &sha2, &ssl->handshake->fin_sha2, sizeof(sha2_context) );
  643. sha2_finish( &sha2, hash );
  644. SSL_DEBUG_BUF( 3, "calculated verify result", hash, 32 );
  645. SSL_DEBUG_MSG( 2, ( "<= calc verify" ) );
  646. return;
  647. }
  648. #if defined(POLARSSL_SHA4_C)
  649. void ssl_calc_verify_tls_sha384( ssl_context *ssl, unsigned char hash[48] )
  650. {
  651. sha4_context sha4;
  652. SSL_DEBUG_MSG( 2, ( "=> calc verify sha384" ) );
  653. memcpy( &sha4, &ssl->handshake->fin_sha4, sizeof(sha4_context) );
  654. sha4_finish( &sha4, hash );
  655. SSL_DEBUG_BUF( 3, "calculated verify result", hash, 48 );
  656. SSL_DEBUG_MSG( 2, ( "<= calc verify" ) );
  657. return;
  658. }
  659. #endif
  660. /*
  661. * SSLv3.0 MAC functions
  662. */
  663. static void ssl_mac_md5( unsigned char *secret,
  664. unsigned char *buf, size_t len,
  665. unsigned char *ctr, int type )
  666. {
  667. unsigned char header[11];
  668. unsigned char padding[48];
  669. md5_context md5;
  670. memcpy( header, ctr, 8 );
  671. header[ 8] = (unsigned char) type;
  672. header[ 9] = (unsigned char)( len >> 8 );
  673. header[10] = (unsigned char)( len );
  674. memset( padding, 0x36, 48 );
  675. md5_starts( &md5 );
  676. md5_update( &md5, secret, 16 );
  677. md5_update( &md5, padding, 48 );
  678. md5_update( &md5, header, 11 );
  679. md5_update( &md5, buf, len );
  680. md5_finish( &md5, buf + len );
  681. memset( padding, 0x5C, 48 );
  682. md5_starts( &md5 );
  683. md5_update( &md5, secret, 16 );
  684. md5_update( &md5, padding, 48 );
  685. md5_update( &md5, buf + len, 16 );
  686. md5_finish( &md5, buf + len );
  687. }
  688. static void ssl_mac_sha1( unsigned char *secret,
  689. unsigned char *buf, size_t len,
  690. unsigned char *ctr, int type )
  691. {
  692. unsigned char header[11];
  693. unsigned char padding[40];
  694. sha1_context sha1;
  695. memcpy( header, ctr, 8 );
  696. header[ 8] = (unsigned char) type;
  697. header[ 9] = (unsigned char)( len >> 8 );
  698. header[10] = (unsigned char)( len );
  699. memset( padding, 0x36, 40 );
  700. sha1_starts( &sha1 );
  701. sha1_update( &sha1, secret, 20 );
  702. sha1_update( &sha1, padding, 40 );
  703. sha1_update( &sha1, header, 11 );
  704. sha1_update( &sha1, buf, len );
  705. sha1_finish( &sha1, buf + len );
  706. memset( padding, 0x5C, 40 );
  707. sha1_starts( &sha1 );
  708. sha1_update( &sha1, secret, 20 );
  709. sha1_update( &sha1, padding, 40 );
  710. sha1_update( &sha1, buf + len, 20 );
  711. sha1_finish( &sha1, buf + len );
  712. }
  713. static void ssl_mac_sha2( unsigned char *secret,
  714. unsigned char *buf, size_t len,
  715. unsigned char *ctr, int type )
  716. {
  717. unsigned char header[11];
  718. unsigned char padding[32];
  719. sha2_context sha2;
  720. memcpy( header, ctr, 8 );
  721. header[ 8] = (unsigned char) type;
  722. header[ 9] = (unsigned char)( len >> 8 );
  723. header[10] = (unsigned char)( len );
  724. memset( padding, 0x36, 32 );
  725. sha2_starts( &sha2, 0 );
  726. sha2_update( &sha2, secret, 32 );
  727. sha2_update( &sha2, padding, 32 );
  728. sha2_update( &sha2, header, 11 );
  729. sha2_update( &sha2, buf, len );
  730. sha2_finish( &sha2, buf + len );
  731. memset( padding, 0x5C, 32 );
  732. sha2_starts( &sha2, 0 );
  733. sha2_update( &sha2, secret, 32 );
  734. sha2_update( &sha2, padding, 32 );
  735. sha2_update( &sha2, buf + len, 32 );
  736. sha2_finish( &sha2, buf + len );
  737. }
  738. /*
  739. * Encryption/decryption functions
  740. */
  741. static int ssl_encrypt_buf( ssl_context *ssl )
  742. {
  743. size_t i, padlen;
  744. SSL_DEBUG_MSG( 2, ( "=> encrypt buf" ) );
  745. /*
  746. * Add MAC then encrypt
  747. */
  748. if( ssl->minor_ver == SSL_MINOR_VERSION_0 )
  749. {
  750. if( ssl->transform_out->maclen == 16 )
  751. ssl_mac_md5( ssl->transform_out->mac_enc,
  752. ssl->out_msg, ssl->out_msglen,
  753. ssl->out_ctr, ssl->out_msgtype );
  754. else if( ssl->transform_out->maclen == 20 )
  755. ssl_mac_sha1( ssl->transform_out->mac_enc,
  756. ssl->out_msg, ssl->out_msglen,
  757. ssl->out_ctr, ssl->out_msgtype );
  758. else if( ssl->transform_out->maclen == 32 )
  759. ssl_mac_sha2( ssl->transform_out->mac_enc,
  760. ssl->out_msg, ssl->out_msglen,
  761. ssl->out_ctr, ssl->out_msgtype );
  762. else if( ssl->transform_out->maclen != 0 )
  763. {
  764. SSL_DEBUG_MSG( 1, ( "invalid MAC len: %d",
  765. ssl->transform_out->maclen ) );
  766. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  767. }
  768. }
  769. else
  770. {
  771. if( ssl->transform_out->maclen == 16 )
  772. {
  773. md5_context ctx;
  774. md5_hmac_starts( &ctx, ssl->transform_out->mac_enc, 16 );
  775. md5_hmac_update( &ctx, ssl->out_ctr, 13 );
  776. md5_hmac_update( &ctx, ssl->out_msg, ssl->out_msglen );
  777. md5_hmac_finish( &ctx, ssl->out_msg + ssl->out_msglen );
  778. memset( &ctx, 0, sizeof(md5_context));
  779. }
  780. else if( ssl->transform_out->maclen == 20 )
  781. {
  782. sha1_context ctx;
  783. sha1_hmac_starts( &ctx, ssl->transform_out->mac_enc, 20 );
  784. sha1_hmac_update( &ctx, ssl->out_ctr, 13 );
  785. sha1_hmac_update( &ctx, ssl->out_msg, ssl->out_msglen );
  786. sha1_hmac_finish( &ctx, ssl->out_msg + ssl->out_msglen );
  787. memset( &ctx, 0, sizeof(sha1_context));
  788. }
  789. else if( ssl->transform_out->maclen == 32 )
  790. {
  791. sha2_context ctx;
  792. sha2_hmac_starts( &ctx, ssl->transform_out->mac_enc, 32, 0 );
  793. sha2_hmac_update( &ctx, ssl->out_ctr, 13 );
  794. sha2_hmac_update( &ctx, ssl->out_msg, ssl->out_msglen );
  795. sha2_hmac_finish( &ctx, ssl->out_msg + ssl->out_msglen );
  796. memset( &ctx, 0, sizeof(sha2_context));
  797. }
  798. else if( ssl->transform_out->maclen != 0 )
  799. {
  800. SSL_DEBUG_MSG( 1, ( "invalid MAC len: %d",
  801. ssl->transform_out->maclen ) );
  802. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  803. }
  804. }
  805. SSL_DEBUG_BUF( 4, "computed mac",
  806. ssl->out_msg + ssl->out_msglen, ssl->transform_out->maclen );
  807. ssl->out_msglen += ssl->transform_out->maclen;
  808. if( ssl->transform_out->ivlen == 0 )
  809. {
  810. padlen = 0;
  811. SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, "
  812. "including %d bytes of padding",
  813. ssl->out_msglen, 0 ) );
  814. SSL_DEBUG_BUF( 4, "before encrypt: output payload",
  815. ssl->out_msg, ssl->out_msglen );
  816. #if defined(POLARSSL_ARC4_C)
  817. if( ssl->session_out->ciphersuite == TLS_RSA_WITH_RC4_128_MD5 ||
  818. ssl->session_out->ciphersuite == TLS_RSA_WITH_RC4_128_SHA )
  819. {
  820. arc4_crypt( (arc4_context *) ssl->transform_out->ctx_enc,
  821. ssl->out_msglen, ssl->out_msg,
  822. ssl->out_msg );
  823. } else
  824. #endif
  825. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  826. if( ssl->session_out->ciphersuite == TLS_RSA_WITH_NULL_MD5 ||
  827. ssl->session_out->ciphersuite == TLS_RSA_WITH_NULL_SHA ||
  828. ssl->session_out->ciphersuite == TLS_RSA_WITH_NULL_SHA256 )
  829. {
  830. } else
  831. #endif
  832. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  833. }
  834. else if( ssl->transform_out->ivlen == 12 )
  835. {
  836. size_t enc_msglen;
  837. unsigned char *enc_msg;
  838. unsigned char add_data[13];
  839. int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE;
  840. padlen = 0;
  841. enc_msglen = ssl->out_msglen;
  842. memcpy( add_data, ssl->out_ctr, 8 );
  843. add_data[8] = ssl->out_msgtype;
  844. add_data[9] = ssl->major_ver;
  845. add_data[10] = ssl->minor_ver;
  846. add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF;
  847. add_data[12] = ssl->out_msglen & 0xFF;
  848. SSL_DEBUG_BUF( 4, "additional data used for AEAD",
  849. add_data, 13 );
  850. #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
  851. if( ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_128_GCM_SHA256 ||
  852. ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_256_GCM_SHA384 ||
  853. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ||
  854. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
  855. {
  856. /*
  857. * Generate IV
  858. */
  859. ret = ssl->f_rng( ssl->p_rng,
  860. ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen,
  861. ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen );
  862. if( ret != 0 )
  863. return( ret );
  864. /*
  865. * Shift message for ivlen bytes and prepend IV
  866. */
  867. memmove( ssl->out_msg + ssl->transform_out->ivlen -
  868. ssl->transform_out->fixed_ivlen,
  869. ssl->out_msg, ssl->out_msglen );
  870. memcpy( ssl->out_msg,
  871. ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen,
  872. ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen );
  873. /*
  874. * Fix pointer positions and message length with added IV
  875. */
  876. enc_msg = ssl->out_msg + ssl->transform_out->ivlen -
  877. ssl->transform_out->fixed_ivlen;
  878. enc_msglen = ssl->out_msglen;
  879. ssl->out_msglen += ssl->transform_out->ivlen -
  880. ssl->transform_out->fixed_ivlen;
  881. SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, "
  882. "including %d bytes of padding",
  883. ssl->out_msglen, 0 ) );
  884. SSL_DEBUG_BUF( 4, "before encrypt: output payload",
  885. ssl->out_msg, ssl->out_msglen );
  886. /*
  887. * Adjust for tag
  888. */
  889. ssl->out_msglen += 16;
  890. gcm_crypt_and_tag( (gcm_context *) ssl->transform_out->ctx_enc,
  891. GCM_ENCRYPT, enc_msglen,
  892. ssl->transform_out->iv_enc, ssl->transform_out->ivlen,
  893. add_data, 13,
  894. enc_msg, enc_msg,
  895. 16, enc_msg + enc_msglen );
  896. SSL_DEBUG_BUF( 4, "after encrypt: tag",
  897. enc_msg + enc_msglen, 16 );
  898. } else
  899. #endif
  900. return( ret );
  901. }
  902. else
  903. {
  904. unsigned char *enc_msg;
  905. size_t enc_msglen;
  906. padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) %
  907. ssl->transform_out->ivlen;
  908. if( padlen == ssl->transform_out->ivlen )
  909. padlen = 0;
  910. for( i = 0; i <= padlen; i++ )
  911. ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen;
  912. ssl->out_msglen += padlen + 1;
  913. enc_msglen = ssl->out_msglen;
  914. enc_msg = ssl->out_msg;
  915. /*
  916. * Prepend per-record IV for block cipher in TLS v1.1 and up as per
  917. * Method 1 (6.2.3.2. in RFC4346 and RFC5246)
  918. */
  919. if( ssl->minor_ver >= SSL_MINOR_VERSION_2 )
  920. {
  921. /*
  922. * Generate IV
  923. */
  924. int ret = ssl->f_rng( ssl->p_rng, ssl->transform_out->iv_enc,
  925. ssl->transform_out->ivlen );
  926. if( ret != 0 )
  927. return( ret );
  928. /*
  929. * Shift message for ivlen bytes and prepend IV
  930. */
  931. memmove( ssl->out_msg + ssl->transform_out->ivlen, ssl->out_msg,
  932. ssl->out_msglen );
  933. memcpy( ssl->out_msg, ssl->transform_out->iv_enc,
  934. ssl->transform_out->ivlen );
  935. /*
  936. * Fix pointer positions and message length with added IV
  937. */
  938. enc_msg = ssl->out_msg + ssl->transform_out->ivlen;
  939. enc_msglen = ssl->out_msglen;
  940. ssl->out_msglen += ssl->transform_out->ivlen;
  941. }
  942. SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, "
  943. "including %d bytes of IV and %d bytes of padding",
  944. ssl->out_msglen, ssl->transform_out->ivlen, padlen + 1 ) );
  945. SSL_DEBUG_BUF( 4, "before encrypt: output payload",
  946. ssl->out_msg, ssl->out_msglen );
  947. switch( ssl->transform_out->ivlen )
  948. {
  949. #if defined(POLARSSL_DES_C)
  950. case 8:
  951. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  952. if( ssl->session_out->ciphersuite == TLS_RSA_WITH_DES_CBC_SHA ||
  953. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_DES_CBC_SHA )
  954. {
  955. des_crypt_cbc( (des_context *) ssl->transform_out->ctx_enc,
  956. DES_ENCRYPT, enc_msglen,
  957. ssl->transform_out->iv_enc, enc_msg, enc_msg );
  958. }
  959. else
  960. #endif
  961. des3_crypt_cbc( (des3_context *) ssl->transform_out->ctx_enc,
  962. DES_ENCRYPT, enc_msglen,
  963. ssl->transform_out->iv_enc, enc_msg, enc_msg );
  964. break;
  965. #endif
  966. case 16:
  967. #if defined(POLARSSL_AES_C)
  968. if ( ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_128_CBC_SHA ||
  969. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_128_CBC_SHA ||
  970. ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_256_CBC_SHA ||
  971. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_256_CBC_SHA ||
  972. ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_128_CBC_SHA256 ||
  973. ssl->session_out->ciphersuite == TLS_RSA_WITH_AES_256_CBC_SHA256 ||
  974. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 ||
  975. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 )
  976. {
  977. aes_crypt_cbc( (aes_context *) ssl->transform_out->ctx_enc,
  978. AES_ENCRYPT, enc_msglen,
  979. ssl->transform_out->iv_enc, enc_msg, enc_msg);
  980. break;
  981. }
  982. #endif
  983. #if defined(POLARSSL_CAMELLIA_C)
  984. if ( ssl->session_out->ciphersuite == TLS_RSA_WITH_CAMELLIA_128_CBC_SHA ||
  985. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA ||
  986. ssl->session_out->ciphersuite == TLS_RSA_WITH_CAMELLIA_256_CBC_SHA ||
  987. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA ||
  988. ssl->session_out->ciphersuite == TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 ||
  989. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 ||
  990. ssl->session_out->ciphersuite == TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 ||
  991. ssl->session_out->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 )
  992. {
  993. camellia_crypt_cbc( (camellia_context *) ssl->transform_out->ctx_enc,
  994. CAMELLIA_ENCRYPT, enc_msglen,
  995. ssl->transform_out->iv_enc, enc_msg, enc_msg );
  996. break;
  997. }
  998. #endif
  999. default:
  1000. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  1001. }
  1002. }
  1003. for( i = 8; i > 0; i-- )
  1004. if( ++ssl->out_ctr[i - 1] != 0 )
  1005. break;
  1006. SSL_DEBUG_MSG( 2, ( "<= encrypt buf" ) );
  1007. return( 0 );
  1008. }
  1009. /*
  1010. * TODO: Use digest version when integrated!
  1011. */
  1012. #define POLARSSL_SSL_MAX_MAC_SIZE 32
  1013. static int ssl_decrypt_buf( ssl_context *ssl )
  1014. {
  1015. size_t i, padlen = 0, correct = 1;
  1016. unsigned char tmp[POLARSSL_SSL_MAX_MAC_SIZE];
  1017. SSL_DEBUG_MSG( 2, ( "=> decrypt buf" ) );
  1018. if( ssl->in_msglen < ssl->transform_in->minlen )
  1019. {
  1020. SSL_DEBUG_MSG( 1, ( "in_msglen (%d) < minlen (%d)",
  1021. ssl->in_msglen, ssl->transform_in->minlen ) );
  1022. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1023. }
  1024. if( ssl->transform_in->ivlen == 0 )
  1025. {
  1026. #if defined(POLARSSL_ARC4_C)
  1027. if( ssl->session_in->ciphersuite == TLS_RSA_WITH_RC4_128_MD5 ||
  1028. ssl->session_in->ciphersuite == TLS_RSA_WITH_RC4_128_SHA )
  1029. {
  1030. arc4_crypt( (arc4_context *) ssl->transform_in->ctx_dec,
  1031. ssl->in_msglen, ssl->in_msg,
  1032. ssl->in_msg );
  1033. } else
  1034. #endif
  1035. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  1036. if( ssl->session_in->ciphersuite == TLS_RSA_WITH_NULL_MD5 ||
  1037. ssl->session_in->ciphersuite == TLS_RSA_WITH_NULL_SHA ||
  1038. ssl->session_in->ciphersuite == TLS_RSA_WITH_NULL_SHA256 )
  1039. {
  1040. } else
  1041. #endif
  1042. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  1043. }
  1044. else if( ssl->transform_in->ivlen == 12 )
  1045. {
  1046. unsigned char *dec_msg;
  1047. unsigned char *dec_msg_result;
  1048. size_t dec_msglen;
  1049. unsigned char add_data[13];
  1050. int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE;
  1051. #if defined(POLARSSL_AES_C) && defined(POLARSSL_GCM_C)
  1052. if( ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_128_GCM_SHA256 ||
  1053. ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_256_GCM_SHA384 ||
  1054. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ||
  1055. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
  1056. {
  1057. dec_msglen = ssl->in_msglen - ( ssl->transform_in->ivlen -
  1058. ssl->transform_in->fixed_ivlen );
  1059. dec_msglen -= 16;
  1060. dec_msg = ssl->in_msg + ( ssl->transform_in->ivlen -
  1061. ssl->transform_in->fixed_ivlen );
  1062. dec_msg_result = ssl->in_msg;
  1063. ssl->in_msglen = dec_msglen;
  1064. memcpy( add_data, ssl->in_ctr, 8 );
  1065. add_data[8] = ssl->in_msgtype;
  1066. add_data[9] = ssl->major_ver;
  1067. add_data[10] = ssl->minor_ver;
  1068. add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF;
  1069. add_data[12] = ssl->in_msglen & 0xFF;
  1070. SSL_DEBUG_BUF( 4, "additional data used for AEAD",
  1071. add_data, 13 );
  1072. memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen,
  1073. ssl->in_msg,
  1074. ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen );
  1075. SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec,
  1076. ssl->transform_in->ivlen );
  1077. SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, 16 );
  1078. memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen,
  1079. ssl->in_msg,
  1080. ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen );
  1081. ret = gcm_auth_decrypt( (gcm_context *) ssl->transform_in->ctx_dec,
  1082. dec_msglen,
  1083. ssl->transform_in->iv_dec,
  1084. ssl->transform_in->ivlen,
  1085. add_data, 13,
  1086. dec_msg + dec_msglen, 16,
  1087. dec_msg, dec_msg_result );
  1088. if( ret != 0 )
  1089. {
  1090. SSL_DEBUG_MSG( 1, ( "AEAD decrypt failed on validation (ret = -0x%02x)",
  1091. -ret ) );
  1092. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1093. }
  1094. } else
  1095. #endif
  1096. return( ret );
  1097. }
  1098. else
  1099. {
  1100. /*
  1101. * Decrypt and check the padding
  1102. */
  1103. unsigned char *dec_msg;
  1104. unsigned char *dec_msg_result;
  1105. size_t dec_msglen;
  1106. size_t minlen = 0, fake_padlen;
  1107. /*
  1108. * Check immediate ciphertext sanity
  1109. */
  1110. if( ssl->in_msglen % ssl->transform_in->ivlen != 0 )
  1111. {
  1112. SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0",
  1113. ssl->in_msglen, ssl->transform_in->ivlen ) );
  1114. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1115. }
  1116. if( ssl->minor_ver >= SSL_MINOR_VERSION_2 )
  1117. minlen += ssl->transform_in->ivlen;
  1118. if( ssl->in_msglen < minlen + ssl->transform_in->ivlen ||
  1119. ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 )
  1120. {
  1121. SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) + 1 ) ( + expl IV )",
  1122. ssl->in_msglen, ssl->transform_in->ivlen, ssl->transform_in->maclen ) );
  1123. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1124. }
  1125. dec_msglen = ssl->in_msglen;
  1126. dec_msg = ssl->in_msg;
  1127. dec_msg_result = ssl->in_msg;
  1128. /*
  1129. * Initialize for prepended IV for block cipher in TLS v1.1 and up
  1130. */
  1131. if( ssl->minor_ver >= SSL_MINOR_VERSION_2 )
  1132. {
  1133. dec_msg += ssl->transform_in->ivlen;
  1134. dec_msglen -= ssl->transform_in->ivlen;
  1135. ssl->in_msglen -= ssl->transform_in->ivlen;
  1136. for( i = 0; i < ssl->transform_in->ivlen; i++ )
  1137. ssl->transform_in->iv_dec[i] = ssl->in_msg[i];
  1138. }
  1139. switch( ssl->transform_in->ivlen )
  1140. {
  1141. #if defined(POLARSSL_DES_C)
  1142. case 8:
  1143. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  1144. if( ssl->session_in->ciphersuite == TLS_RSA_WITH_DES_CBC_SHA ||
  1145. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_DES_CBC_SHA )
  1146. {
  1147. des_crypt_cbc( (des_context *) ssl->transform_in->ctx_dec,
  1148. DES_DECRYPT, dec_msglen,
  1149. ssl->transform_in->iv_dec, dec_msg, dec_msg_result );
  1150. }
  1151. else
  1152. #endif
  1153. des3_crypt_cbc( (des3_context *) ssl->transform_in->ctx_dec,
  1154. DES_DECRYPT, dec_msglen,
  1155. ssl->transform_in->iv_dec, dec_msg, dec_msg_result );
  1156. break;
  1157. #endif
  1158. case 16:
  1159. #if defined(POLARSSL_AES_C)
  1160. if ( ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_128_CBC_SHA ||
  1161. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_128_CBC_SHA ||
  1162. ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_256_CBC_SHA ||
  1163. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_256_CBC_SHA ||
  1164. ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_128_CBC_SHA256 ||
  1165. ssl->session_in->ciphersuite == TLS_RSA_WITH_AES_256_CBC_SHA256 ||
  1166. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 ||
  1167. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 )
  1168. {
  1169. aes_crypt_cbc( (aes_context *) ssl->transform_in->ctx_dec,
  1170. AES_DECRYPT, dec_msglen,
  1171. ssl->transform_in->iv_dec, dec_msg, dec_msg_result );
  1172. break;
  1173. }
  1174. #endif
  1175. #if defined(POLARSSL_CAMELLIA_C)
  1176. if ( ssl->session_in->ciphersuite == TLS_RSA_WITH_CAMELLIA_128_CBC_SHA ||
  1177. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA ||
  1178. ssl->session_in->ciphersuite == TLS_RSA_WITH_CAMELLIA_256_CBC_SHA ||
  1179. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA ||
  1180. ssl->session_in->ciphersuite == TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 ||
  1181. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 ||
  1182. ssl->session_in->ciphersuite == TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 ||
  1183. ssl->session_in->ciphersuite == TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 )
  1184. {
  1185. camellia_crypt_cbc( (camellia_context *) ssl->transform_in->ctx_dec,
  1186. CAMELLIA_DECRYPT, dec_msglen,
  1187. ssl->transform_in->iv_dec, dec_msg, dec_msg_result );
  1188. break;
  1189. }
  1190. #endif
  1191. default:
  1192. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  1193. }
  1194. padlen = 1 + ssl->in_msg[ssl->in_msglen - 1];
  1195. fake_padlen = 256 - padlen;
  1196. if( ssl->in_msglen < ssl->transform_in->maclen + padlen )
  1197. {
  1198. #if defined(POLARSSL_SSL_DEBUG_ALL)
  1199. SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)",
  1200. ssl->in_msglen, ssl->transform_in->maclen, padlen ) );
  1201. #endif
  1202. padlen = 0;
  1203. fake_padlen = 256;
  1204. correct = 0;
  1205. }
  1206. if( ssl->minor_ver == SSL_MINOR_VERSION_0 )
  1207. {
  1208. if( padlen > ssl->transform_in->ivlen )
  1209. {
  1210. #if defined(POLARSSL_SSL_DEBUG_ALL)
  1211. SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, "
  1212. "should be no more than %d",
  1213. padlen, ssl->transform_in->ivlen ) );
  1214. #endif
  1215. correct = 0;
  1216. }
  1217. }
  1218. else
  1219. {
  1220. /*
  1221. * TLSv1+: always check the padding up to the first failure
  1222. * and fake check up to 256 bytes of padding
  1223. */
  1224. for( i = 1; i <= padlen; i++ )
  1225. {
  1226. if( ssl->in_msg[ssl->in_msglen - i] != padlen - 1 )
  1227. {
  1228. correct = 0;
  1229. fake_padlen = 256 - i;
  1230. padlen = 0;
  1231. }
  1232. }
  1233. for( i = 1; i <= fake_padlen; i++ )
  1234. {
  1235. if( ssl->in_msg[i + 1] != fake_padlen - 1 )
  1236. minlen = 0;
  1237. else
  1238. minlen = 1;
  1239. }
  1240. #if defined(POLARSSL_SSL_DEBUG_ALL)
  1241. if( padlen > 0 && correct == 0)
  1242. SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) );
  1243. #endif
  1244. }
  1245. }
  1246. SSL_DEBUG_BUF( 4, "raw buffer after decryption",
  1247. ssl->in_msg, ssl->in_msglen );
  1248. /*
  1249. * Always compute the MAC (RFC4346, CBCTIME).
  1250. */
  1251. ssl->in_msglen -= ( ssl->transform_in->maclen + padlen );
  1252. ssl->in_hdr[3] = (unsigned char)( ssl->in_msglen >> 8 );
  1253. ssl->in_hdr[4] = (unsigned char)( ssl->in_msglen );
  1254. memcpy( tmp, ssl->in_msg + ssl->in_msglen, ssl->transform_in->maclen );
  1255. if( ssl->minor_ver == SSL_MINOR_VERSION_0 )
  1256. {
  1257. if( ssl->transform_in->maclen == 16 )
  1258. ssl_mac_md5( ssl->transform_in->mac_dec,
  1259. ssl->in_msg, ssl->in_msglen,
  1260. ssl->in_ctr, ssl->in_msgtype );
  1261. else if( ssl->transform_in->maclen == 20 )
  1262. ssl_mac_sha1( ssl->transform_in->mac_dec,
  1263. ssl->in_msg, ssl->in_msglen,
  1264. ssl->in_ctr, ssl->in_msgtype );
  1265. else if( ssl->transform_in->maclen == 32 )
  1266. ssl_mac_sha2( ssl->transform_in->mac_dec,
  1267. ssl->in_msg, ssl->in_msglen,
  1268. ssl->in_ctr, ssl->in_msgtype );
  1269. else if( ssl->transform_in->maclen != 0 )
  1270. {
  1271. SSL_DEBUG_MSG( 1, ( "invalid MAC len: %d",
  1272. ssl->transform_in->maclen ) );
  1273. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  1274. }
  1275. }
  1276. else
  1277. {
  1278. /*
  1279. * Process MAC and always update for padlen afterwards to make
  1280. * total time independent of padlen
  1281. */
  1282. if( ssl->transform_in->maclen == 16 )
  1283. md5_hmac( ssl->transform_in->mac_dec, 16,
  1284. ssl->in_ctr, ssl->in_msglen + 13,
  1285. ssl->in_msg + ssl->in_msglen );
  1286. else if( ssl->transform_in->maclen == 20 )
  1287. sha1_hmac( ssl->transform_in->mac_dec, 20,
  1288. ssl->in_ctr, ssl->in_msglen + 13,
  1289. ssl->in_msg + ssl->in_msglen );
  1290. else if( ssl->transform_in->maclen == 32 )
  1291. sha2_hmac( ssl->transform_in->mac_dec, 32,
  1292. ssl->in_ctr, ssl->in_msglen + 13,
  1293. ssl->in_msg + ssl->in_msglen, 0 );
  1294. else if( ssl->transform_in->maclen != 0 )
  1295. {
  1296. SSL_DEBUG_MSG( 1, ( "invalid MAC len: %d",
  1297. ssl->transform_in->maclen ) );
  1298. return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
  1299. }
  1300. }
  1301. SSL_DEBUG_BUF( 4, "message mac", tmp, ssl->transform_in->maclen );
  1302. SSL_DEBUG_BUF( 4, "computed mac", ssl->in_msg + ssl->in_msglen,
  1303. ssl->transform_in->maclen );
  1304. if( memcmp( tmp, ssl->in_msg + ssl->in_msglen,
  1305. ssl->transform_in->maclen ) != 0 )
  1306. {
  1307. SSL_DEBUG_MSG( 1, ( "message mac does not match" ) );
  1308. correct = 0;
  1309. }
  1310. /*
  1311. * Finally check the correct flag
  1312. */
  1313. if( correct == 0 )
  1314. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1315. if( ssl->in_msglen == 0 )
  1316. {
  1317. ssl->nb_zero++;
  1318. /*
  1319. * Three or more empty messages may be a DoS attack
  1320. * (excessive CPU consumption).
  1321. */
  1322. if( ssl->nb_zero > 3 )
  1323. {
  1324. SSL_DEBUG_MSG( 1, ( "received four consecutive empty "
  1325. "messages, possible DoS attack" ) );
  1326. return( POLARSSL_ERR_SSL_INVALID_MAC );
  1327. }
  1328. }
  1329. else
  1330. ssl->nb_zero = 0;
  1331. for( i = 8; i > 0; i-- )
  1332. if( ++ssl->in_ctr[i - 1] != 0 )
  1333. break;
  1334. SSL_DEBUG_MSG( 2, ( "<= decrypt buf" ) );
  1335. return( 0 );
  1336. }
  1337. #if defined(POLARSSL_ZLIB_SUPPORT)
  1338. /*
  1339. * Compression/decompression functions
  1340. */
  1341. static int ssl_compress_buf( ssl_context *ssl )
  1342. {
  1343. int ret;
  1344. unsigned char *msg_post = ssl->out_msg;
  1345. size_t len_pre = ssl->out_msglen;
  1346. unsigned char *msg_pre;
  1347. SSL_DEBUG_MSG( 2, ( "=> compress buf" ) );
  1348. msg_pre = (unsigned char*) malloc( len_pre );
  1349. if( msg_pre == NULL )
  1350. {
  1351. SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len_pre ) );
  1352. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  1353. }
  1354. memcpy( msg_pre, ssl->out_msg, len_pre );
  1355. SSL_DEBUG_MSG( 3, ( "before compression: msglen = %d, ",
  1356. ssl->out_msglen ) );
  1357. SSL_DEBUG_BUF( 4, "before compression: output payload",
  1358. ssl->out_msg, ssl->out_msglen );
  1359. ssl->transform_out->ctx_deflate.next_in = msg_pre;
  1360. ssl->transform_out->ctx_deflate.avail_in = len_pre;
  1361. ssl->transform_out->ctx_deflate.next_out = msg_post;
  1362. ssl->transform_out->ctx_deflate.avail_out = SSL_BUFFER_LEN;
  1363. ret = deflate( &ssl->transform_out->ctx_deflate, Z_SYNC_FLUSH );
  1364. if( ret != Z_OK )
  1365. {
  1366. SSL_DEBUG_MSG( 1, ( "failed to perform compression (%d)", ret ) );
  1367. return( POLARSSL_ERR_SSL_COMPRESSION_FAILED );
  1368. }
  1369. ssl->out_msglen = SSL_BUFFER_LEN - ssl->transform_out->ctx_deflate.avail_out;
  1370. free( msg_pre );
  1371. SSL_DEBUG_MSG( 3, ( "after compression: msglen = %d, ",
  1372. ssl->out_msglen ) );
  1373. SSL_DEBUG_BUF( 4, "after compression: output payload",
  1374. ssl->out_msg, ssl->out_msglen );
  1375. SSL_DEBUG_MSG( 2, ( "<= compress buf" ) );
  1376. return( 0 );
  1377. }
  1378. static int ssl_decompress_buf( ssl_context *ssl )
  1379. {
  1380. int ret;
  1381. unsigned char *msg_post = ssl->in_msg;
  1382. size_t len_pre = ssl->in_msglen;
  1383. unsigned char *msg_pre;
  1384. SSL_DEBUG_MSG( 2, ( "=> decompress buf" ) );
  1385. msg_pre = (unsigned char*) malloc( len_pre );
  1386. if( msg_pre == NULL )
  1387. {
  1388. SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len_pre ) );
  1389. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  1390. }
  1391. memcpy( msg_pre, ssl->in_msg, len_pre );
  1392. SSL_DEBUG_MSG( 3, ( "before decompression: msglen = %d, ",
  1393. ssl->in_msglen ) );
  1394. SSL_DEBUG_BUF( 4, "before decompression: input payload",
  1395. ssl->in_msg, ssl->in_msglen );
  1396. ssl->transform_in->ctx_inflate.next_in = msg_pre;
  1397. ssl->transform_in->ctx_inflate.avail_in = len_pre;
  1398. ssl->transform_in->ctx_inflate.next_out = msg_post;
  1399. ssl->transform_in->ctx_inflate.avail_out = SSL_MAX_CONTENT_LEN;
  1400. ret = inflate( &ssl->transform_in->ctx_inflate, Z_SYNC_FLUSH );
  1401. if( ret != Z_OK )
  1402. {
  1403. SSL_DEBUG_MSG( 1, ( "failed to perform decompression (%d)", ret ) );
  1404. return( POLARSSL_ERR_SSL_COMPRESSION_FAILED );
  1405. }
  1406. ssl->in_msglen = SSL_MAX_CONTENT_LEN - ssl->transform_in->ctx_inflate.avail_out;
  1407. free( msg_pre );
  1408. SSL_DEBUG_MSG( 3, ( "after decompression: msglen = %d, ",
  1409. ssl->in_msglen ) );
  1410. SSL_DEBUG_BUF( 4, "after decompression: input payload",
  1411. ssl->in_msg, ssl->in_msglen );
  1412. SSL_DEBUG_MSG( 2, ( "<= decompress buf" ) );
  1413. return( 0 );
  1414. }
  1415. #endif /* POLARSSL_ZLIB_SUPPORT */
  1416. /*
  1417. * Fill the input message buffer
  1418. */
  1419. int ssl_fetch_input( ssl_context *ssl, size_t nb_want )
  1420. {
  1421. int ret;
  1422. size_t len;
  1423. SSL_DEBUG_MSG( 2, ( "=> fetch input" ) );
  1424. while( ssl->in_left < nb_want )
  1425. {
  1426. len = nb_want - ssl->in_left;
  1427. ret = ssl->f_recv( ssl->p_recv, ssl->in_hdr + ssl->in_left, len );
  1428. SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d",
  1429. ssl->in_left, nb_want ) );
  1430. SSL_DEBUG_RET( 2, "ssl->f_recv", ret );
  1431. if( ret == 0 )
  1432. return( POLARSSL_ERR_SSL_CONN_EOF );
  1433. if( ret < 0 )
  1434. return( ret );
  1435. ssl->in_left += ret;
  1436. }
  1437. SSL_DEBUG_MSG( 2, ( "<= fetch input" ) );
  1438. return( 0 );
  1439. }
  1440. /*
  1441. * Flush any data not yet written
  1442. */
  1443. int ssl_flush_output( ssl_context *ssl )
  1444. {
  1445. int ret;
  1446. unsigned char *buf;
  1447. SSL_DEBUG_MSG( 2, ( "=> flush output" ) );
  1448. while( ssl->out_left > 0 )
  1449. {
  1450. SSL_DEBUG_MSG( 2, ( "message length: %d, out_left: %d",
  1451. 5 + ssl->out_msglen, ssl->out_left ) );
  1452. if( ssl->out_msglen < ssl->out_left )
  1453. {
  1454. size_t header_left = ssl->out_left - ssl->out_msglen;
  1455. buf = ssl->out_hdr + 5 - header_left;
  1456. ret = ssl->f_send( ssl->p_send, buf, header_left );
  1457. SSL_DEBUG_RET( 2, "ssl->f_send (header)", ret );
  1458. if( ret <= 0 )
  1459. return( ret );
  1460. ssl->out_left -= ret;
  1461. }
  1462. buf = ssl->out_msg + ssl->out_msglen - ssl->out_left;
  1463. ret = ssl->f_send( ssl->p_send, buf, ssl->out_left );
  1464. SSL_DEBUG_RET( 2, "ssl->f_send", ret );
  1465. if( ret <= 0 )
  1466. return( ret );
  1467. ssl->out_left -= ret;
  1468. }
  1469. SSL_DEBUG_MSG( 2, ( "<= flush output" ) );
  1470. return( 0 );
  1471. }
  1472. /*
  1473. * Record layer functions
  1474. */
  1475. int ssl_write_record( ssl_context *ssl )
  1476. {
  1477. int ret, done = 0;
  1478. size_t len = ssl->out_msglen;
  1479. SSL_DEBUG_MSG( 2, ( "=> write record" ) );
  1480. if( ssl->out_msgtype == SSL_MSG_HANDSHAKE )
  1481. {
  1482. ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 );
  1483. ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 );
  1484. ssl->out_msg[3] = (unsigned char)( ( len - 4 ) );
  1485. ssl->handshake->update_checksum( ssl, ssl->out_msg, len );
  1486. }
  1487. #if defined(POLARSSL_ZLIB_SUPPORT)
  1488. if( ssl->transform_out != NULL &&
  1489. ssl->session_out->compression == SSL_COMPRESS_DEFLATE )
  1490. {
  1491. if( ( ret = ssl_compress_buf( ssl ) ) != 0 )
  1492. {
  1493. SSL_DEBUG_RET( 1, "ssl_compress_buf", ret );
  1494. return( ret );
  1495. }
  1496. len = ssl->out_msglen;
  1497. }
  1498. #endif /*POLARSSL_ZLIB_SUPPORT */
  1499. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  1500. if( ssl_hw_record_write != NULL)
  1501. {
  1502. SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_write()" ) );
  1503. ret = ssl_hw_record_write( ssl );
  1504. if( ret != 0 && ret != POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH )
  1505. {
  1506. SSL_DEBUG_RET( 1, "ssl_hw_record_write", ret );
  1507. return POLARSSL_ERR_SSL_HW_ACCEL_FAILED;
  1508. }
  1509. done = 1;
  1510. }
  1511. #endif
  1512. if( !done )
  1513. {
  1514. ssl->out_hdr[0] = (unsigned char) ssl->out_msgtype;
  1515. ssl->out_hdr[1] = (unsigned char) ssl->major_ver;
  1516. ssl->out_hdr[2] = (unsigned char) ssl->minor_ver;
  1517. ssl->out_hdr[3] = (unsigned char)( len >> 8 );
  1518. ssl->out_hdr[4] = (unsigned char)( len );
  1519. if( ssl->transform_out != NULL )
  1520. {
  1521. if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 )
  1522. {
  1523. SSL_DEBUG_RET( 1, "ssl_encrypt_buf", ret );
  1524. return( ret );
  1525. }
  1526. len = ssl->out_msglen;
  1527. ssl->out_hdr[3] = (unsigned char)( len >> 8 );
  1528. ssl->out_hdr[4] = (unsigned char)( len );
  1529. }
  1530. ssl->out_left = 5 + ssl->out_msglen;
  1531. SSL_DEBUG_MSG( 3, ( "output record: msgtype = %d, "
  1532. "version = [%d:%d], msglen = %d",
  1533. ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2],
  1534. ( ssl->out_hdr[3] << 8 ) | ssl->out_hdr[4] ) );
  1535. SSL_DEBUG_BUF( 4, "output record header sent to network",
  1536. ssl->out_hdr, 5 );
  1537. SSL_DEBUG_BUF( 4, "output record sent to network",
  1538. ssl->out_hdr + 32, ssl->out_msglen );
  1539. }
  1540. if( ( ret = ssl_flush_output( ssl ) ) != 0 )
  1541. {
  1542. SSL_DEBUG_RET( 1, "ssl_flush_output", ret );
  1543. return( ret );
  1544. }
  1545. SSL_DEBUG_MSG( 2, ( "<= write record" ) );
  1546. return( 0 );
  1547. }
  1548. int ssl_read_record( ssl_context *ssl )
  1549. {
  1550. int ret, done = 0;
  1551. SSL_DEBUG_MSG( 2, ( "=> read record" ) );
  1552. if( ssl->in_hslen != 0 &&
  1553. ssl->in_hslen < ssl->in_msglen )
  1554. {
  1555. /*
  1556. * Get next Handshake message in the current record
  1557. */
  1558. ssl->in_msglen -= ssl->in_hslen;
  1559. memmove( ssl->in_msg, ssl->in_msg + ssl->in_hslen,
  1560. ssl->in_msglen );
  1561. ssl->in_hslen = 4;
  1562. ssl->in_hslen += ( ssl->in_msg[2] << 8 ) | ssl->in_msg[3];
  1563. SSL_DEBUG_MSG( 3, ( "handshake message: msglen ="
  1564. " %d, type = %d, hslen = %d",
  1565. ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) );
  1566. if( ssl->in_msglen < 4 || ssl->in_msg[1] != 0 )
  1567. {
  1568. SSL_DEBUG_MSG( 1, ( "bad handshake length" ) );
  1569. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1570. }
  1571. if( ssl->in_msglen < ssl->in_hslen )
  1572. {
  1573. SSL_DEBUG_MSG( 1, ( "bad handshake length" ) );
  1574. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1575. }
  1576. ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen );
  1577. return( 0 );
  1578. }
  1579. ssl->in_hslen = 0;
  1580. /*
  1581. * Read the record header and validate it
  1582. */
  1583. if( ( ret = ssl_fetch_input( ssl, 5 ) ) != 0 )
  1584. {
  1585. SSL_DEBUG_RET( 1, "ssl_fetch_input", ret );
  1586. return( ret );
  1587. }
  1588. ssl->in_msgtype = ssl->in_hdr[0];
  1589. ssl->in_msglen = ( ssl->in_hdr[3] << 8 ) | ssl->in_hdr[4];
  1590. SSL_DEBUG_MSG( 3, ( "input record: msgtype = %d, "
  1591. "version = [%d:%d], msglen = %d",
  1592. ssl->in_hdr[0], ssl->in_hdr[1], ssl->in_hdr[2],
  1593. ( ssl->in_hdr[3] << 8 ) | ssl->in_hdr[4] ) );
  1594. if( ssl->in_hdr[1] != ssl->major_ver )
  1595. {
  1596. SSL_DEBUG_MSG( 1, ( "major version mismatch" ) );
  1597. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1598. }
  1599. if( ssl->in_hdr[2] > ssl->max_minor_ver )
  1600. {
  1601. SSL_DEBUG_MSG( 1, ( "minor version mismatch" ) );
  1602. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1603. }
  1604. /*
  1605. * Make sure the message length is acceptable
  1606. */
  1607. if( ssl->transform_in == NULL )
  1608. {
  1609. if( ssl->in_msglen < 1 ||
  1610. ssl->in_msglen > SSL_MAX_CONTENT_LEN )
  1611. {
  1612. SSL_DEBUG_MSG( 1, ( "bad message length" ) );
  1613. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1614. }
  1615. }
  1616. else
  1617. {
  1618. if( ssl->in_msglen < ssl->transform_in->minlen )
  1619. {
  1620. SSL_DEBUG_MSG( 1, ( "bad message length" ) );
  1621. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1622. }
  1623. if( ssl->minor_ver == SSL_MINOR_VERSION_0 &&
  1624. ssl->in_msglen > ssl->transform_in->minlen + SSL_MAX_CONTENT_LEN )
  1625. {
  1626. SSL_DEBUG_MSG( 1, ( "bad message length" ) );
  1627. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1628. }
  1629. /*
  1630. * TLS encrypted messages can have up to 256 bytes of padding
  1631. */
  1632. if( ssl->minor_ver >= SSL_MINOR_VERSION_1 &&
  1633. ssl->in_msglen > ssl->transform_in->minlen + SSL_MAX_CONTENT_LEN + 256 )
  1634. {
  1635. SSL_DEBUG_MSG( 1, ( "bad message length" ) );
  1636. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1637. }
  1638. }
  1639. /*
  1640. * Read and optionally decrypt the message contents
  1641. */
  1642. if( ( ret = ssl_fetch_input( ssl, 5 + ssl->in_msglen ) ) != 0 )
  1643. {
  1644. SSL_DEBUG_RET( 1, "ssl_fetch_input", ret );
  1645. return( ret );
  1646. }
  1647. SSL_DEBUG_BUF( 4, "input record from network",
  1648. ssl->in_hdr, 5 + ssl->in_msglen );
  1649. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  1650. if( ssl_hw_record_read != NULL)
  1651. {
  1652. SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_read()" ) );
  1653. ret = ssl_hw_record_read( ssl );
  1654. if( ret != 0 && ret != POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH )
  1655. {
  1656. SSL_DEBUG_RET( 1, "ssl_hw_record_read", ret );
  1657. return POLARSSL_ERR_SSL_HW_ACCEL_FAILED;
  1658. }
  1659. done = 1;
  1660. }
  1661. #endif
  1662. if( !done && ssl->transform_in != NULL )
  1663. {
  1664. if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 )
  1665. {
  1666. #if defined(POLARSSL_SSL_ALERT_MESSAGES)
  1667. if( ret == POLARSSL_ERR_SSL_INVALID_MAC )
  1668. {
  1669. ssl_send_alert_message( ssl,
  1670. SSL_ALERT_LEVEL_FATAL,
  1671. SSL_ALERT_MSG_BAD_RECORD_MAC );
  1672. }
  1673. #endif
  1674. SSL_DEBUG_RET( 1, "ssl_decrypt_buf", ret );
  1675. return( ret );
  1676. }
  1677. SSL_DEBUG_BUF( 4, "input payload after decrypt",
  1678. ssl->in_msg, ssl->in_msglen );
  1679. if( ssl->in_msglen > SSL_MAX_CONTENT_LEN )
  1680. {
  1681. SSL_DEBUG_MSG( 1, ( "bad message length" ) );
  1682. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1683. }
  1684. }
  1685. #if defined(POLARSSL_ZLIB_SUPPORT)
  1686. if( ssl->transform_in != NULL &&
  1687. ssl->session_in->compression == SSL_COMPRESS_DEFLATE )
  1688. {
  1689. if( ( ret = ssl_decompress_buf( ssl ) ) != 0 )
  1690. {
  1691. SSL_DEBUG_RET( 1, "ssl_decompress_buf", ret );
  1692. return( ret );
  1693. }
  1694. ssl->in_hdr[3] = (unsigned char)( ssl->in_msglen >> 8 );
  1695. ssl->in_hdr[4] = (unsigned char)( ssl->in_msglen );
  1696. }
  1697. #endif /* POLARSSL_ZLIB_SUPPORT */
  1698. if( ssl->in_msgtype != SSL_MSG_HANDSHAKE &&
  1699. ssl->in_msgtype != SSL_MSG_ALERT &&
  1700. ssl->in_msgtype != SSL_MSG_CHANGE_CIPHER_SPEC &&
  1701. ssl->in_msgtype != SSL_MSG_APPLICATION_DATA )
  1702. {
  1703. SSL_DEBUG_MSG( 1, ( "unknown record type" ) );
  1704. if( ( ret = ssl_send_alert_message( ssl,
  1705. SSL_ALERT_LEVEL_FATAL,
  1706. SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 )
  1707. {
  1708. return( ret );
  1709. }
  1710. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1711. }
  1712. if( ssl->in_msgtype == SSL_MSG_HANDSHAKE )
  1713. {
  1714. ssl->in_hslen = 4;
  1715. ssl->in_hslen += ( ssl->in_msg[2] << 8 ) | ssl->in_msg[3];
  1716. SSL_DEBUG_MSG( 3, ( "handshake message: msglen ="
  1717. " %d, type = %d, hslen = %d",
  1718. ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) );
  1719. /*
  1720. * Additional checks to validate the handshake header
  1721. */
  1722. if( ssl->in_msglen < 4 || ssl->in_msg[1] != 0 )
  1723. {
  1724. SSL_DEBUG_MSG( 1, ( "bad handshake length" ) );
  1725. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1726. }
  1727. if( ssl->in_msglen < ssl->in_hslen )
  1728. {
  1729. SSL_DEBUG_MSG( 1, ( "bad handshake length" ) );
  1730. return( POLARSSL_ERR_SSL_INVALID_RECORD );
  1731. }
  1732. if( ssl->state != SSL_HANDSHAKE_OVER )
  1733. ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen );
  1734. }
  1735. if( ssl->in_msgtype == SSL_MSG_ALERT )
  1736. {
  1737. SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%d:%d]",
  1738. ssl->in_msg[0], ssl->in_msg[1] ) );
  1739. /*
  1740. * Ignore non-fatal alerts, except close_notify
  1741. */
  1742. if( ssl->in_msg[0] == SSL_ALERT_LEVEL_FATAL )
  1743. {
  1744. SSL_DEBUG_MSG( 1, ( "is a fatal alert message (msg %d)",
  1745. ssl->in_msg[1] ) );
  1746. /**
  1747. * Subtract from error code as ssl->in_msg[1] is 7-bit positive
  1748. * error identifier.
  1749. */
  1750. return( POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE );
  1751. }
  1752. if( ssl->in_msg[0] == SSL_ALERT_LEVEL_WARNING &&
  1753. ssl->in_msg[1] == SSL_ALERT_MSG_CLOSE_NOTIFY )
  1754. {
  1755. SSL_DEBUG_MSG( 2, ( "is a close notify message" ) );
  1756. return( POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY );
  1757. }
  1758. }
  1759. ssl->in_left = 0;
  1760. SSL_DEBUG_MSG( 2, ( "<= read record" ) );
  1761. return( 0 );
  1762. }
  1763. int ssl_send_fatal_handshake_failure( ssl_context *ssl )
  1764. {
  1765. int ret;
  1766. if( ( ret = ssl_send_alert_message( ssl,
  1767. SSL_ALERT_LEVEL_FATAL,
  1768. SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 )
  1769. {
  1770. return( ret );
  1771. }
  1772. return( 0 );
  1773. }
  1774. int ssl_send_alert_message( ssl_context *ssl,
  1775. unsigned char level,
  1776. unsigned char message )
  1777. {
  1778. int ret;
  1779. SSL_DEBUG_MSG( 2, ( "=> send alert message" ) );
  1780. ssl->out_msgtype = SSL_MSG_ALERT;
  1781. ssl->out_msglen = 2;
  1782. ssl->out_msg[0] = level;
  1783. ssl->out_msg[1] = message;
  1784. if( ( ret = ssl_write_record( ssl ) ) != 0 )
  1785. {
  1786. SSL_DEBUG_RET( 1, "ssl_write_record", ret );
  1787. return( ret );
  1788. }
  1789. SSL_DEBUG_MSG( 2, ( "<= send alert message" ) );
  1790. return( 0 );
  1791. }
  1792. /*
  1793. * Handshake functions
  1794. */
  1795. int ssl_write_certificate( ssl_context *ssl )
  1796. {
  1797. int ret;
  1798. size_t i, n;
  1799. const x509_cert *crt;
  1800. SSL_DEBUG_MSG( 2, ( "=> write certificate" ) );
  1801. if( ssl->endpoint == SSL_IS_CLIENT )
  1802. {
  1803. if( ssl->client_auth == 0 )
  1804. {
  1805. SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) );
  1806. ssl->state++;
  1807. return( 0 );
  1808. }
  1809. /*
  1810. * If using SSLv3 and got no cert, send an Alert message
  1811. * (otherwise an empty Certificate message will be sent).
  1812. */
  1813. if( ssl->own_cert == NULL &&
  1814. ssl->minor_ver == SSL_MINOR_VERSION_0 )
  1815. {
  1816. ssl->out_msglen = 2;
  1817. ssl->out_msgtype = SSL_MSG_ALERT;
  1818. ssl->out_msg[0] = SSL_ALERT_LEVEL_WARNING;
  1819. ssl->out_msg[1] = SSL_ALERT_MSG_NO_CERT;
  1820. SSL_DEBUG_MSG( 2, ( "got no certificate to send" ) );
  1821. goto write_msg;
  1822. }
  1823. }
  1824. else /* SSL_IS_SERVER */
  1825. {
  1826. if( ssl->own_cert == NULL )
  1827. {
  1828. SSL_DEBUG_MSG( 1, ( "got no certificate to send" ) );
  1829. return( POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED );
  1830. }
  1831. }
  1832. SSL_DEBUG_CRT( 3, "own certificate", ssl->own_cert );
  1833. /*
  1834. * 0 . 0 handshake type
  1835. * 1 . 3 handshake length
  1836. * 4 . 6 length of all certs
  1837. * 7 . 9 length of cert. 1
  1838. * 10 . n-1 peer certificate
  1839. * n . n+2 length of cert. 2
  1840. * n+3 . ... upper level cert, etc.
  1841. */
  1842. i = 7;
  1843. crt = ssl->own_cert;
  1844. while( crt != NULL )
  1845. {
  1846. n = crt->raw.len;
  1847. if( i + 3 + n > SSL_MAX_CONTENT_LEN )
  1848. {
  1849. SSL_DEBUG_MSG( 1, ( "certificate too large, %d > %d",
  1850. i + 3 + n, SSL_MAX_CONTENT_LEN ) );
  1851. return( POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE );
  1852. }
  1853. ssl->out_msg[i ] = (unsigned char)( n >> 16 );
  1854. ssl->out_msg[i + 1] = (unsigned char)( n >> 8 );
  1855. ssl->out_msg[i + 2] = (unsigned char)( n );
  1856. i += 3; memcpy( ssl->out_msg + i, crt->raw.p, n );
  1857. i += n; crt = crt->next;
  1858. }
  1859. ssl->out_msg[4] = (unsigned char)( ( i - 7 ) >> 16 );
  1860. ssl->out_msg[5] = (unsigned char)( ( i - 7 ) >> 8 );
  1861. ssl->out_msg[6] = (unsigned char)( ( i - 7 ) );
  1862. ssl->out_msglen = i;
  1863. ssl->out_msgtype = SSL_MSG_HANDSHAKE;
  1864. ssl->out_msg[0] = SSL_HS_CERTIFICATE;
  1865. write_msg:
  1866. ssl->state++;
  1867. if( ( ret = ssl_write_record( ssl ) ) != 0 )
  1868. {
  1869. SSL_DEBUG_RET( 1, "ssl_write_record", ret );
  1870. return( ret );
  1871. }
  1872. SSL_DEBUG_MSG( 2, ( "<= write certificate" ) );
  1873. return( 0 );
  1874. }
  1875. int ssl_parse_certificate( ssl_context *ssl )
  1876. {
  1877. int ret;
  1878. size_t i, n;
  1879. SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) );
  1880. if( ssl->endpoint == SSL_IS_SERVER &&
  1881. ssl->authmode == SSL_VERIFY_NONE )
  1882. {
  1883. ssl->verify_result = BADCERT_SKIP_VERIFY;
  1884. SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) );
  1885. ssl->state++;
  1886. return( 0 );
  1887. }
  1888. if( ( ret = ssl_read_record( ssl ) ) != 0 )
  1889. {
  1890. SSL_DEBUG_RET( 1, "ssl_read_record", ret );
  1891. return( ret );
  1892. }
  1893. ssl->state++;
  1894. /*
  1895. * Check if the client sent an empty certificate
  1896. */
  1897. if( ssl->endpoint == SSL_IS_SERVER &&
  1898. ssl->minor_ver == SSL_MINOR_VERSION_0 )
  1899. {
  1900. if( ssl->in_msglen == 2 &&
  1901. ssl->in_msgtype == SSL_MSG_ALERT &&
  1902. ssl->in_msg[0] == SSL_ALERT_LEVEL_WARNING &&
  1903. ssl->in_msg[1] == SSL_ALERT_MSG_NO_CERT )
  1904. {
  1905. SSL_DEBUG_MSG( 1, ( "SSLv3 client has no certificate" ) );
  1906. ssl->verify_result = BADCERT_MISSING;
  1907. if( ssl->authmode == SSL_VERIFY_OPTIONAL )
  1908. return( 0 );
  1909. else
  1910. return( POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE );
  1911. }
  1912. }
  1913. if( ssl->endpoint == SSL_IS_SERVER &&
  1914. ssl->minor_ver != SSL_MINOR_VERSION_0 )
  1915. {
  1916. if( ssl->in_hslen == 7 &&
  1917. ssl->in_msgtype == SSL_MSG_HANDSHAKE &&
  1918. ssl->in_msg[0] == SSL_HS_CERTIFICATE &&
  1919. memcmp( ssl->in_msg + 4, "\0\0\0", 3 ) == 0 )
  1920. {
  1921. SSL_DEBUG_MSG( 1, ( "TLSv1 client has no certificate" ) );
  1922. ssl->verify_result = BADCERT_MISSING;
  1923. if( ssl->authmode == SSL_VERIFY_REQUIRED )
  1924. return( POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE );
  1925. else
  1926. return( 0 );
  1927. }
  1928. }
  1929. if( ssl->in_msgtype != SSL_MSG_HANDSHAKE )
  1930. {
  1931. SSL_DEBUG_MSG( 1, ( "bad certificate message" ) );
  1932. return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
  1933. }
  1934. if( ssl->in_msg[0] != SSL_HS_CERTIFICATE || ssl->in_hslen < 10 )
  1935. {
  1936. SSL_DEBUG_MSG( 1, ( "bad certificate message" ) );
  1937. return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
  1938. }
  1939. /*
  1940. * Same message structure as in ssl_write_certificate()
  1941. */
  1942. n = ( ssl->in_msg[5] << 8 ) | ssl->in_msg[6];
  1943. if( ssl->in_msg[4] != 0 || ssl->in_hslen != 7 + n )
  1944. {
  1945. SSL_DEBUG_MSG( 1, ( "bad certificate message" ) );
  1946. return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
  1947. }
  1948. if( ( ssl->session_negotiate->peer_cert = (x509_cert *) malloc(
  1949. sizeof( x509_cert ) ) ) == NULL )
  1950. {
  1951. SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed",
  1952. sizeof( x509_cert ) ) );
  1953. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  1954. }
  1955. memset( ssl->session_negotiate->peer_cert, 0, sizeof( x509_cert ) );
  1956. i = 7;
  1957. while( i < ssl->in_hslen )
  1958. {
  1959. if( ssl->in_msg[i] != 0 )
  1960. {
  1961. SSL_DEBUG_MSG( 1, ( "bad certificate message" ) );
  1962. return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
  1963. }
  1964. n = ( (unsigned int) ssl->in_msg[i + 1] << 8 )
  1965. | (unsigned int) ssl->in_msg[i + 2];
  1966. i += 3;
  1967. if( n < 128 || i + n > ssl->in_hslen )
  1968. {
  1969. SSL_DEBUG_MSG( 1, ( "bad certificate message" ) );
  1970. return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
  1971. }
  1972. ret = x509parse_crt( ssl->session_negotiate->peer_cert, ssl->in_msg + i,
  1973. n );
  1974. if( ret != 0 )
  1975. {
  1976. SSL_DEBUG_RET( 1, " x509parse_crt", ret );
  1977. return( ret );
  1978. }
  1979. i += n;
  1980. }
  1981. SSL_DEBUG_CRT( 3, "peer certificate", ssl->session_negotiate->peer_cert );
  1982. if( ssl->authmode != SSL_VERIFY_NONE )
  1983. {
  1984. if( ssl->ca_chain == NULL )
  1985. {
  1986. SSL_DEBUG_MSG( 1, ( "got no CA chain" ) );
  1987. return( POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED );
  1988. }
  1989. ret = x509parse_verify( ssl->session_negotiate->peer_cert,
  1990. ssl->ca_chain, ssl->ca_crl,
  1991. ssl->peer_cn, &ssl->verify_result,
  1992. ssl->f_vrfy, ssl->p_vrfy );
  1993. if( ret != 0 )
  1994. SSL_DEBUG_RET( 1, "x509_verify_cert", ret );
  1995. if( ssl->authmode != SSL_VERIFY_REQUIRED )
  1996. ret = 0;
  1997. }
  1998. SSL_DEBUG_MSG( 2, ( "<= parse certificate" ) );
  1999. return( ret );
  2000. }
  2001. int ssl_write_change_cipher_spec( ssl_context *ssl )
  2002. {
  2003. int ret;
  2004. SSL_DEBUG_MSG( 2, ( "=> write change cipher spec" ) );
  2005. ssl->out_msgtype = SSL_MSG_CHANGE_CIPHER_SPEC;
  2006. ssl->out_msglen = 1;
  2007. ssl->out_msg[0] = 1;
  2008. ssl->state++;
  2009. if( ( ret = ssl_write_record( ssl ) ) != 0 )
  2010. {
  2011. SSL_DEBUG_RET( 1, "ssl_write_record", ret );
  2012. return( ret );
  2013. }
  2014. SSL_DEBUG_MSG( 2, ( "<= write change cipher spec" ) );
  2015. return( 0 );
  2016. }
  2017. int ssl_parse_change_cipher_spec( ssl_context *ssl )
  2018. {
  2019. int ret;
  2020. SSL_DEBUG_MSG( 2, ( "=> parse change cipher spec" ) );
  2021. if( ( ret = ssl_read_record( ssl ) ) != 0 )
  2022. {
  2023. SSL_DEBUG_RET( 1, "ssl_read_record", ret );
  2024. return( ret );
  2025. }
  2026. if( ssl->in_msgtype != SSL_MSG_CHANGE_CIPHER_SPEC )
  2027. {
  2028. SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) );
  2029. return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
  2030. }
  2031. if( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 )
  2032. {
  2033. SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) );
  2034. return( POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC );
  2035. }
  2036. ssl->state++;
  2037. SSL_DEBUG_MSG( 2, ( "<= parse change cipher spec" ) );
  2038. return( 0 );
  2039. }
  2040. void ssl_optimize_checksum( ssl_context *ssl, int ciphersuite )
  2041. {
  2042. #if !defined(POLARSSL_SHA4_C)
  2043. ((void) ciphersuite);
  2044. #endif
  2045. if( ssl->minor_ver < SSL_MINOR_VERSION_3 )
  2046. ssl->handshake->update_checksum = ssl_update_checksum_md5sha1;
  2047. #if defined(POLARSSL_SHA4_C)
  2048. else if ( ciphersuite == TLS_RSA_WITH_AES_256_GCM_SHA384 ||
  2049. ciphersuite == TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
  2050. {
  2051. ssl->handshake->update_checksum = ssl_update_checksum_sha384;
  2052. }
  2053. #endif
  2054. else
  2055. ssl->handshake->update_checksum = ssl_update_checksum_sha256;
  2056. }
  2057. static void ssl_update_checksum_start( ssl_context *ssl, unsigned char *buf,
  2058. size_t len )
  2059. {
  2060. md5_update( &ssl->handshake->fin_md5 , buf, len );
  2061. sha1_update( &ssl->handshake->fin_sha1, buf, len );
  2062. sha2_update( &ssl->handshake->fin_sha2, buf, len );
  2063. #if defined(POLARSSL_SHA4_C)
  2064. sha4_update( &ssl->handshake->fin_sha4, buf, len );
  2065. #endif
  2066. }
  2067. static void ssl_update_checksum_md5sha1( ssl_context *ssl, unsigned char *buf,
  2068. size_t len )
  2069. {
  2070. md5_update( &ssl->handshake->fin_md5 , buf, len );
  2071. sha1_update( &ssl->handshake->fin_sha1, buf, len );
  2072. }
  2073. static void ssl_update_checksum_sha256( ssl_context *ssl, unsigned char *buf,
  2074. size_t len )
  2075. {
  2076. sha2_update( &ssl->handshake->fin_sha2, buf, len );
  2077. }
  2078. #if defined(POLARSSL_SHA4_C)
  2079. static void ssl_update_checksum_sha384( ssl_context *ssl, unsigned char *buf,
  2080. size_t len )
  2081. {
  2082. sha4_update( &ssl->handshake->fin_sha4, buf, len );
  2083. }
  2084. #endif
  2085. static void ssl_calc_finished_ssl(
  2086. ssl_context *ssl, unsigned char *buf, int from )
  2087. {
  2088. char *sender;
  2089. md5_context md5;
  2090. sha1_context sha1;
  2091. unsigned char padbuf[48];
  2092. unsigned char md5sum[16];
  2093. unsigned char sha1sum[20];
  2094. ssl_session *session = ssl->session_negotiate;
  2095. if( !session )
  2096. session = ssl->session;
  2097. SSL_DEBUG_MSG( 2, ( "=> calc finished ssl" ) );
  2098. memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) );
  2099. memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) );
  2100. /*
  2101. * SSLv3:
  2102. * hash =
  2103. * MD5( master + pad2 +
  2104. * MD5( handshake + sender + master + pad1 ) )
  2105. * + SHA1( master + pad2 +
  2106. * SHA1( handshake + sender + master + pad1 ) )
  2107. */
  2108. SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *)
  2109. md5.state, sizeof( md5.state ) );
  2110. SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *)
  2111. sha1.state, sizeof( sha1.state ) );
  2112. sender = ( from == SSL_IS_CLIENT ) ? (char *) "CLNT"
  2113. : (char *) "SRVR";
  2114. memset( padbuf, 0x36, 48 );
  2115. md5_update( &md5, (unsigned char *) sender, 4 );
  2116. md5_update( &md5, session->master, 48 );
  2117. md5_update( &md5, padbuf, 48 );
  2118. md5_finish( &md5, md5sum );
  2119. sha1_update( &sha1, (unsigned char *) sender, 4 );
  2120. sha1_update( &sha1, session->master, 48 );
  2121. sha1_update( &sha1, padbuf, 40 );
  2122. sha1_finish( &sha1, sha1sum );
  2123. memset( padbuf, 0x5C, 48 );
  2124. md5_starts( &md5 );
  2125. md5_update( &md5, session->master, 48 );
  2126. md5_update( &md5, padbuf, 48 );
  2127. md5_update( &md5, md5sum, 16 );
  2128. md5_finish( &md5, buf );
  2129. sha1_starts( &sha1 );
  2130. sha1_update( &sha1, session->master, 48 );
  2131. sha1_update( &sha1, padbuf , 40 );
  2132. sha1_update( &sha1, sha1sum, 20 );
  2133. sha1_finish( &sha1, buf + 16 );
  2134. SSL_DEBUG_BUF( 3, "calc finished result", buf, 36 );
  2135. memset( &md5, 0, sizeof( md5_context ) );
  2136. memset( &sha1, 0, sizeof( sha1_context ) );
  2137. memset( padbuf, 0, sizeof( padbuf ) );
  2138. memset( md5sum, 0, sizeof( md5sum ) );
  2139. memset( sha1sum, 0, sizeof( sha1sum ) );
  2140. SSL_DEBUG_MSG( 2, ( "<= calc finished" ) );
  2141. }
  2142. static void ssl_calc_finished_tls(
  2143. ssl_context *ssl, unsigned char *buf, int from )
  2144. {
  2145. int len = 12;
  2146. char *sender;
  2147. md5_context md5;
  2148. sha1_context sha1;
  2149. unsigned char padbuf[36];
  2150. ssl_session *session = ssl->session_negotiate;
  2151. if( !session )
  2152. session = ssl->session;
  2153. SSL_DEBUG_MSG( 2, ( "=> calc finished tls" ) );
  2154. memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) );
  2155. memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) );
  2156. /*
  2157. * TLSv1:
  2158. * hash = PRF( master, finished_label,
  2159. * MD5( handshake ) + SHA1( handshake ) )[0..11]
  2160. */
  2161. SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *)
  2162. md5.state, sizeof( md5.state ) );
  2163. SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *)
  2164. sha1.state, sizeof( sha1.state ) );
  2165. sender = ( from == SSL_IS_CLIENT )
  2166. ? (char *) "client finished"
  2167. : (char *) "server finished";
  2168. md5_finish( &md5, padbuf );
  2169. sha1_finish( &sha1, padbuf + 16 );
  2170. ssl->handshake->tls_prf( session->master, 48, sender,
  2171. padbuf, 36, buf, len );
  2172. SSL_DEBUG_BUF( 3, "calc finished result", buf, len );
  2173. memset( &md5, 0, sizeof( md5_context ) );
  2174. memset( &sha1, 0, sizeof( sha1_context ) );
  2175. memset( padbuf, 0, sizeof( padbuf ) );
  2176. SSL_DEBUG_MSG( 2, ( "<= calc finished" ) );
  2177. }
  2178. static void ssl_calc_finished_tls_sha256(
  2179. ssl_context *ssl, unsigned char *buf, int from )
  2180. {
  2181. int len = 12;
  2182. char *sender;
  2183. sha2_context sha2;
  2184. unsigned char padbuf[32];
  2185. ssl_session *session = ssl->session_negotiate;
  2186. if( !session )
  2187. session = ssl->session;
  2188. SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha256" ) );
  2189. memcpy( &sha2, &ssl->handshake->fin_sha2, sizeof(sha2_context) );
  2190. /*
  2191. * TLSv1.2:
  2192. * hash = PRF( master, finished_label,
  2193. * Hash( handshake ) )[0.11]
  2194. */
  2195. SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *)
  2196. sha2.state, sizeof( sha2.state ) );
  2197. sender = ( from == SSL_IS_CLIENT )
  2198. ? (char *) "client finished"
  2199. : (char *) "server finished";
  2200. sha2_finish( &sha2, padbuf );
  2201. ssl->handshake->tls_prf( session->master, 48, sender,
  2202. padbuf, 32, buf, len );
  2203. SSL_DEBUG_BUF( 3, "calc finished result", buf, len );
  2204. memset( &sha2, 0, sizeof( sha2_context ) );
  2205. memset( padbuf, 0, sizeof( padbuf ) );
  2206. SSL_DEBUG_MSG( 2, ( "<= calc finished" ) );
  2207. }
  2208. #if defined(POLARSSL_SHA4_C)
  2209. static void ssl_calc_finished_tls_sha384(
  2210. ssl_context *ssl, unsigned char *buf, int from )
  2211. {
  2212. int len = 12;
  2213. char *sender;
  2214. sha4_context sha4;
  2215. unsigned char padbuf[48];
  2216. ssl_session *session = ssl->session_negotiate;
  2217. if( !session )
  2218. session = ssl->session;
  2219. SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha384" ) );
  2220. memcpy( &sha4, &ssl->handshake->fin_sha4, sizeof(sha4_context) );
  2221. /*
  2222. * TLSv1.2:
  2223. * hash = PRF( master, finished_label,
  2224. * Hash( handshake ) )[0.11]
  2225. */
  2226. SSL_DEBUG_BUF( 4, "finished sha4 state", (unsigned char *)
  2227. sha4.state, sizeof( sha4.state ) );
  2228. sender = ( from == SSL_IS_CLIENT )
  2229. ? (char *) "client finished"
  2230. : (char *) "server finished";
  2231. sha4_finish( &sha4, padbuf );
  2232. ssl->handshake->tls_prf( session->master, 48, sender,
  2233. padbuf, 48, buf, len );
  2234. SSL_DEBUG_BUF( 3, "calc finished result", buf, len );
  2235. memset( &sha4, 0, sizeof( sha4_context ) );
  2236. memset( padbuf, 0, sizeof( padbuf ) );
  2237. SSL_DEBUG_MSG( 2, ( "<= calc finished" ) );
  2238. }
  2239. #endif
  2240. void ssl_handshake_wrapup( ssl_context *ssl )
  2241. {
  2242. SSL_DEBUG_MSG( 3, ( "=> handshake wrapup" ) );
  2243. /*
  2244. * Free our handshake params
  2245. */
  2246. ssl_handshake_free( ssl->handshake );
  2247. free( ssl->handshake );
  2248. ssl->handshake = NULL;
  2249. /*
  2250. * Switch in our now active transform context
  2251. */
  2252. if( ssl->transform )
  2253. {
  2254. ssl_transform_free( ssl->transform );
  2255. free( ssl->transform );
  2256. }
  2257. ssl->transform = ssl->transform_negotiate;
  2258. ssl->transform_negotiate = NULL;
  2259. if( ssl->session )
  2260. {
  2261. ssl_session_free( ssl->session );
  2262. free( ssl->session );
  2263. }
  2264. ssl->session = ssl->session_negotiate;
  2265. ssl->session_negotiate = NULL;
  2266. /*
  2267. * Add cache entry
  2268. */
  2269. if( ssl->f_set_cache != NULL )
  2270. if( ssl->f_set_cache( ssl->p_set_cache, ssl->session ) != 0 )
  2271. SSL_DEBUG_MSG( 1, ( "cache did not store session" ) );
  2272. ssl->state++;
  2273. SSL_DEBUG_MSG( 3, ( "<= handshake wrapup" ) );
  2274. }
  2275. int ssl_write_finished( ssl_context *ssl )
  2276. {
  2277. int ret, hash_len;
  2278. SSL_DEBUG_MSG( 2, ( "=> write finished" ) );
  2279. ssl->handshake->calc_finished( ssl, ssl->out_msg + 4, ssl->endpoint );
  2280. // TODO TLS/1.2 Hash length is determined by cipher suite (Page 63)
  2281. hash_len = ( ssl->minor_ver == SSL_MINOR_VERSION_0 ) ? 36 : 12;
  2282. ssl->verify_data_len = hash_len;
  2283. memcpy( ssl->own_verify_data, ssl->out_msg + 4, hash_len );
  2284. ssl->out_msglen = 4 + hash_len;
  2285. ssl->out_msgtype = SSL_MSG_HANDSHAKE;
  2286. ssl->out_msg[0] = SSL_HS_FINISHED;
  2287. /*
  2288. * In case of session resuming, invert the client and server
  2289. * ChangeCipherSpec messages order.
  2290. */
  2291. if( ssl->handshake->resume != 0 )
  2292. {
  2293. if( ssl->endpoint == SSL_IS_CLIENT )
  2294. ssl->state = SSL_HANDSHAKE_WRAPUP;
  2295. else
  2296. ssl->state = SSL_CLIENT_CHANGE_CIPHER_SPEC;
  2297. }
  2298. else
  2299. ssl->state++;
  2300. /*
  2301. * Switch to our negotiated transform and session parameters for outbound data.
  2302. */
  2303. SSL_DEBUG_MSG( 3, ( "switching to new transform spec for outbound data" ) );
  2304. ssl->transform_out = ssl->transform_negotiate;
  2305. ssl->session_out = ssl->session_negotiate;
  2306. memset( ssl->out_ctr, 0, 8 );
  2307. if( ( ret = ssl_write_record( ssl ) ) != 0 )
  2308. {
  2309. SSL_DEBUG_RET( 1, "ssl_write_record", ret );
  2310. return( ret );
  2311. }
  2312. SSL_DEBUG_MSG( 2, ( "<= write finished" ) );
  2313. return( 0 );
  2314. }
  2315. int ssl_parse_finished( ssl_context *ssl )
  2316. {
  2317. int ret;
  2318. unsigned int hash_len;
  2319. unsigned char buf[36];
  2320. SSL_DEBUG_MSG( 2, ( "=> parse finished" ) );
  2321. ssl->handshake->calc_finished( ssl, buf, ssl->endpoint ^ 1 );
  2322. /*
  2323. * Switch to our negotiated transform and session parameters for inbound data.
  2324. */
  2325. SSL_DEBUG_MSG( 3, ( "switching to new transform spec for inbound data" ) );
  2326. ssl->transform_in = ssl->transform_negotiate;
  2327. ssl->session_in = ssl->session_negotiate;
  2328. memset( ssl->in_ctr, 0, 8 );
  2329. if( ( ret = ssl_read_record( ssl ) ) != 0 )
  2330. {
  2331. SSL_DEBUG_RET( 1, "ssl_read_record", ret );
  2332. return( ret );
  2333. }
  2334. if( ssl->in_msgtype != SSL_MSG_HANDSHAKE )
  2335. {
  2336. SSL_DEBUG_MSG( 1, ( "bad finished message" ) );
  2337. return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
  2338. }
  2339. // TODO TLS/1.2 Hash length is determined by cipher suite (Page 63)
  2340. hash_len = ( ssl->minor_ver == SSL_MINOR_VERSION_0 ) ? 36 : 12;
  2341. if( ssl->in_msg[0] != SSL_HS_FINISHED ||
  2342. ssl->in_hslen != 4 + hash_len )
  2343. {
  2344. SSL_DEBUG_MSG( 1, ( "bad finished message" ) );
  2345. return( POLARSSL_ERR_SSL_BAD_HS_FINISHED );
  2346. }
  2347. if( memcmp( ssl->in_msg + 4, buf, hash_len ) != 0 )
  2348. {
  2349. SSL_DEBUG_MSG( 1, ( "bad finished message" ) );
  2350. return( POLARSSL_ERR_SSL_BAD_HS_FINISHED );
  2351. }
  2352. ssl->verify_data_len = hash_len;
  2353. memcpy( ssl->peer_verify_data, buf, hash_len );
  2354. if( ssl->handshake->resume != 0 )
  2355. {
  2356. if( ssl->endpoint == SSL_IS_CLIENT )
  2357. ssl->state = SSL_CLIENT_CHANGE_CIPHER_SPEC;
  2358. if( ssl->endpoint == SSL_IS_SERVER )
  2359. ssl->state = SSL_HANDSHAKE_WRAPUP;
  2360. }
  2361. else
  2362. ssl->state++;
  2363. SSL_DEBUG_MSG( 2, ( "<= parse finished" ) );
  2364. return( 0 );
  2365. }
  2366. int ssl_handshake_init( ssl_context *ssl )
  2367. {
  2368. if( ssl->transform_negotiate )
  2369. ssl_transform_free( ssl->transform_negotiate );
  2370. else
  2371. ssl->transform_negotiate = malloc( sizeof(ssl_transform) );
  2372. if( ssl->session_negotiate )
  2373. ssl_session_free( ssl->session_negotiate );
  2374. else
  2375. ssl->session_negotiate = malloc( sizeof(ssl_session) );
  2376. if( ssl->handshake )
  2377. ssl_handshake_free( ssl->handshake );
  2378. else
  2379. ssl->handshake = malloc( sizeof(ssl_handshake_params) );
  2380. if( ssl->handshake == NULL ||
  2381. ssl->transform_negotiate == NULL ||
  2382. ssl->session_negotiate == NULL )
  2383. {
  2384. SSL_DEBUG_MSG( 1, ( "malloc() of ssl sub-contexts failed" ) );
  2385. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  2386. }
  2387. memset( ssl->handshake, 0, sizeof(ssl_handshake_params) );
  2388. memset( ssl->transform_negotiate, 0, sizeof(ssl_transform) );
  2389. memset( ssl->session_negotiate, 0, sizeof(ssl_session) );
  2390. md5_starts( &ssl->handshake->fin_md5 );
  2391. sha1_starts( &ssl->handshake->fin_sha1 );
  2392. sha2_starts( &ssl->handshake->fin_sha2, 0 );
  2393. #if defined(POLARSSL_SHA4_C)
  2394. sha4_starts( &ssl->handshake->fin_sha4, 1 );
  2395. #endif
  2396. ssl->handshake->update_checksum = ssl_update_checksum_start;
  2397. ssl->handshake->sig_alg = SSL_HASH_SHA1;
  2398. return( 0 );
  2399. }
  2400. /*
  2401. * Initialize an SSL context
  2402. */
  2403. int ssl_init( ssl_context *ssl )
  2404. {
  2405. int ret;
  2406. int len = SSL_BUFFER_LEN;
  2407. memset( ssl, 0, sizeof( ssl_context ) );
  2408. /*
  2409. * Sane defaults
  2410. */
  2411. ssl->rsa_decrypt = ssl_rsa_decrypt;
  2412. ssl->rsa_sign = ssl_rsa_sign;
  2413. ssl->rsa_key_len = ssl_rsa_key_len;
  2414. ssl->min_major_ver = SSL_MAJOR_VERSION_3;
  2415. ssl->min_minor_ver = SSL_MINOR_VERSION_0;
  2416. ssl->ciphersuites = ssl_default_ciphersuites;
  2417. #if defined(POLARSSL_DHM_C)
  2418. if( ( ret = mpi_read_string( &ssl->dhm_P, 16,
  2419. POLARSSL_DHM_RFC5114_MODP_1024_P) ) != 0 ||
  2420. ( ret = mpi_read_string( &ssl->dhm_G, 16,
  2421. POLARSSL_DHM_RFC5114_MODP_1024_G) ) != 0 )
  2422. {
  2423. SSL_DEBUG_RET( 1, "mpi_read_string", ret );
  2424. return( ret );
  2425. }
  2426. #endif
  2427. /*
  2428. * Prepare base structures
  2429. */
  2430. ssl->in_ctr = (unsigned char *) malloc( len );
  2431. ssl->in_hdr = ssl->in_ctr + 8;
  2432. ssl->in_msg = ssl->in_ctr + 13;
  2433. if( ssl->in_ctr == NULL )
  2434. {
  2435. SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len ) );
  2436. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  2437. }
  2438. ssl->out_ctr = (unsigned char *) malloc( len );
  2439. ssl->out_hdr = ssl->out_ctr + 8;
  2440. ssl->out_msg = ssl->out_ctr + 40;
  2441. if( ssl->out_ctr == NULL )
  2442. {
  2443. SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len ) );
  2444. free( ssl-> in_ctr );
  2445. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  2446. }
  2447. memset( ssl-> in_ctr, 0, SSL_BUFFER_LEN );
  2448. memset( ssl->out_ctr, 0, SSL_BUFFER_LEN );
  2449. ssl->hostname = NULL;
  2450. ssl->hostname_len = 0;
  2451. if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
  2452. return( ret );
  2453. return( 0 );
  2454. }
  2455. /*
  2456. * Reset an initialized and used SSL context for re-use while retaining
  2457. * all application-set variables, function pointers and data.
  2458. */
  2459. int ssl_session_reset( ssl_context *ssl )
  2460. {
  2461. int ret;
  2462. ssl->state = SSL_HELLO_REQUEST;
  2463. ssl->renegotiation = SSL_INITIAL_HANDSHAKE;
  2464. ssl->secure_renegotiation = SSL_LEGACY_RENEGOTIATION;
  2465. ssl->verify_data_len = 0;
  2466. memset( ssl->own_verify_data, 0, 36 );
  2467. memset( ssl->peer_verify_data, 0, 36 );
  2468. ssl->in_offt = NULL;
  2469. ssl->in_msgtype = 0;
  2470. ssl->in_msglen = 0;
  2471. ssl->in_left = 0;
  2472. ssl->in_hslen = 0;
  2473. ssl->nb_zero = 0;
  2474. ssl->out_msgtype = 0;
  2475. ssl->out_msglen = 0;
  2476. ssl->out_left = 0;
  2477. ssl->transform_in = NULL;
  2478. ssl->transform_out = NULL;
  2479. memset( ssl->out_ctr, 0, SSL_BUFFER_LEN );
  2480. memset( ssl->in_ctr, 0, SSL_BUFFER_LEN );
  2481. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  2482. if( ssl_hw_record_reset != NULL)
  2483. {
  2484. SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_reset()" ) );
  2485. if( ssl_hw_record_reset( ssl ) != 0 )
  2486. {
  2487. SSL_DEBUG_RET( 1, "ssl_hw_record_reset", ret );
  2488. return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED );
  2489. }
  2490. }
  2491. #endif
  2492. if( ssl->transform )
  2493. {
  2494. ssl_transform_free( ssl->transform );
  2495. free( ssl->transform );
  2496. ssl->transform = NULL;
  2497. }
  2498. if( ssl->session )
  2499. {
  2500. ssl_session_free( ssl->session );
  2501. free( ssl->session );
  2502. ssl->session = NULL;
  2503. }
  2504. if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
  2505. return( ret );
  2506. return( 0 );
  2507. }
  2508. /*
  2509. * SSL set accessors
  2510. */
  2511. void ssl_set_endpoint( ssl_context *ssl, int endpoint )
  2512. {
  2513. ssl->endpoint = endpoint;
  2514. }
  2515. void ssl_set_authmode( ssl_context *ssl, int authmode )
  2516. {
  2517. ssl->authmode = authmode;
  2518. }
  2519. void ssl_set_verify( ssl_context *ssl,
  2520. int (*f_vrfy)(void *, x509_cert *, int, int *),
  2521. void *p_vrfy )
  2522. {
  2523. ssl->f_vrfy = f_vrfy;
  2524. ssl->p_vrfy = p_vrfy;
  2525. }
  2526. void ssl_set_rng( ssl_context *ssl,
  2527. int (*f_rng)(void *, unsigned char *, size_t),
  2528. void *p_rng )
  2529. {
  2530. ssl->f_rng = f_rng;
  2531. ssl->p_rng = p_rng;
  2532. }
  2533. void ssl_set_dbg( ssl_context *ssl,
  2534. void (*f_dbg)(void *, int, const char *),
  2535. void *p_dbg )
  2536. {
  2537. ssl->f_dbg = f_dbg;
  2538. ssl->p_dbg = p_dbg;
  2539. }
  2540. void ssl_set_bio( ssl_context *ssl,
  2541. int (*f_recv)(void *, unsigned char *, size_t), void *p_recv,
  2542. int (*f_send)(void *, const unsigned char *, size_t), void *p_send )
  2543. {
  2544. ssl->f_recv = f_recv;
  2545. ssl->f_send = f_send;
  2546. ssl->p_recv = p_recv;
  2547. ssl->p_send = p_send;
  2548. }
  2549. void ssl_set_session_cache( ssl_context *ssl,
  2550. int (*f_get_cache)(void *, ssl_session *), void *p_get_cache,
  2551. int (*f_set_cache)(void *, const ssl_session *), void *p_set_cache )
  2552. {
  2553. ssl->f_get_cache = f_get_cache;
  2554. ssl->p_get_cache = p_get_cache;
  2555. ssl->f_set_cache = f_set_cache;
  2556. ssl->p_set_cache = p_set_cache;
  2557. }
  2558. void ssl_set_session( ssl_context *ssl, const ssl_session *session )
  2559. {
  2560. memcpy( ssl->session_negotiate, session, sizeof(ssl_session) );
  2561. ssl->handshake->resume = 1;
  2562. }
  2563. void ssl_set_ciphersuites( ssl_context *ssl, const int *ciphersuites )
  2564. {
  2565. ssl->ciphersuites = ciphersuites;
  2566. }
  2567. void ssl_set_ca_chain( ssl_context *ssl, x509_cert *ca_chain,
  2568. x509_crl *ca_crl, const char *peer_cn )
  2569. {
  2570. ssl->ca_chain = ca_chain;
  2571. ssl->ca_crl = ca_crl;
  2572. ssl->peer_cn = peer_cn;
  2573. }
  2574. void ssl_set_own_cert( ssl_context *ssl, x509_cert *own_cert,
  2575. rsa_context *rsa_key )
  2576. {
  2577. ssl->own_cert = own_cert;
  2578. ssl->rsa_key = rsa_key;
  2579. }
  2580. void ssl_set_own_cert_alt( ssl_context *ssl, x509_cert *own_cert,
  2581. void *rsa_key,
  2582. rsa_decrypt_func rsa_decrypt,
  2583. rsa_sign_func rsa_sign,
  2584. rsa_key_len_func rsa_key_len )
  2585. {
  2586. ssl->own_cert = own_cert;
  2587. ssl->rsa_key = rsa_key;
  2588. ssl->rsa_decrypt = rsa_decrypt;
  2589. ssl->rsa_sign = rsa_sign;
  2590. ssl->rsa_key_len = rsa_key_len;
  2591. }
  2592. #if defined(POLARSSL_DHM_C)
  2593. int ssl_set_dh_param( ssl_context *ssl, const char *dhm_P, const char *dhm_G )
  2594. {
  2595. int ret;
  2596. if( ( ret = mpi_read_string( &ssl->dhm_P, 16, dhm_P ) ) != 0 )
  2597. {
  2598. SSL_DEBUG_RET( 1, "mpi_read_string", ret );
  2599. return( ret );
  2600. }
  2601. if( ( ret = mpi_read_string( &ssl->dhm_G, 16, dhm_G ) ) != 0 )
  2602. {
  2603. SSL_DEBUG_RET( 1, "mpi_read_string", ret );
  2604. return( ret );
  2605. }
  2606. return( 0 );
  2607. }
  2608. int ssl_set_dh_param_ctx( ssl_context *ssl, dhm_context *dhm_ctx )
  2609. {
  2610. int ret;
  2611. if( ( ret = mpi_copy(&ssl->dhm_P, &dhm_ctx->P) ) != 0 )
  2612. {
  2613. SSL_DEBUG_RET( 1, "mpi_copy", ret );
  2614. return( ret );
  2615. }
  2616. if( ( ret = mpi_copy(&ssl->dhm_G, &dhm_ctx->G) ) != 0 )
  2617. {
  2618. SSL_DEBUG_RET( 1, "mpi_copy", ret );
  2619. return( ret );
  2620. }
  2621. return( 0 );
  2622. }
  2623. #endif /* POLARSSL_DHM_C */
  2624. int ssl_set_hostname( ssl_context *ssl, const char *hostname )
  2625. {
  2626. if( hostname == NULL )
  2627. return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
  2628. ssl->hostname_len = strlen( hostname );
  2629. ssl->hostname = (unsigned char *) malloc( ssl->hostname_len + 1 );
  2630. if( ssl->hostname == NULL )
  2631. return( POLARSSL_ERR_SSL_MALLOC_FAILED );
  2632. memcpy( ssl->hostname, (unsigned char *) hostname,
  2633. ssl->hostname_len );
  2634. ssl->hostname[ssl->hostname_len] = '\0';
  2635. return( 0 );
  2636. }
  2637. void ssl_set_sni( ssl_context *ssl,
  2638. int (*f_sni)(void *, ssl_context *,
  2639. const unsigned char *, size_t),
  2640. void *p_sni )
  2641. {
  2642. ssl->f_sni = f_sni;
  2643. ssl->p_sni = p_sni;
  2644. }
  2645. void ssl_set_max_version( ssl_context *ssl, int major, int minor )
  2646. {
  2647. ssl->max_major_ver = major;
  2648. ssl->max_minor_ver = minor;
  2649. }
  2650. void ssl_set_min_version( ssl_context *ssl, int major, int minor )
  2651. {
  2652. ssl->min_major_ver = major;
  2653. ssl->min_minor_ver = minor;
  2654. }
  2655. void ssl_set_renegotiation( ssl_context *ssl, int renegotiation )
  2656. {
  2657. ssl->disable_renegotiation = renegotiation;
  2658. }
  2659. void ssl_legacy_renegotiation( ssl_context *ssl, int allow_legacy )
  2660. {
  2661. ssl->allow_legacy_renegotiation = allow_legacy;
  2662. }
  2663. /*
  2664. * SSL get accessors
  2665. */
  2666. size_t ssl_get_bytes_avail( const ssl_context *ssl )
  2667. {
  2668. return( ssl->in_offt == NULL ? 0 : ssl->in_msglen );
  2669. }
  2670. int ssl_get_verify_result( const ssl_context *ssl )
  2671. {
  2672. return( ssl->verify_result );
  2673. }
  2674. const char *ssl_get_ciphersuite_name( const int ciphersuite_id )
  2675. {
  2676. switch( ciphersuite_id )
  2677. {
  2678. #if defined(POLARSSL_ARC4_C)
  2679. case TLS_RSA_WITH_RC4_128_MD5:
  2680. return( "TLS-RSA-WITH-RC4-128-MD5" );
  2681. case TLS_RSA_WITH_RC4_128_SHA:
  2682. return( "TLS-RSA-WITH-RC4-128-SHA" );
  2683. #endif
  2684. #if defined(POLARSSL_DES_C)
  2685. case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
  2686. return( "TLS-RSA-WITH-3DES-EDE-CBC-SHA" );
  2687. case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
  2688. return( "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA" );
  2689. #endif
  2690. #if defined(POLARSSL_AES_C)
  2691. case TLS_RSA_WITH_AES_128_CBC_SHA:
  2692. return( "TLS-RSA-WITH-AES-128-CBC-SHA" );
  2693. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
  2694. return( "TLS-DHE-RSA-WITH-AES-128-CBC-SHA" );
  2695. case TLS_RSA_WITH_AES_256_CBC_SHA:
  2696. return( "TLS-RSA-WITH-AES-256-CBC-SHA" );
  2697. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
  2698. return( "TLS-DHE-RSA-WITH-AES-256-CBC-SHA" );
  2699. #if defined(POLARSSL_SHA2_C)
  2700. case TLS_RSA_WITH_AES_128_CBC_SHA256:
  2701. return( "TLS-RSA-WITH-AES-128-CBC-SHA256" );
  2702. case TLS_RSA_WITH_AES_256_CBC_SHA256:
  2703. return( "TLS-RSA-WITH-AES-256-CBC-SHA256" );
  2704. case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
  2705. return( "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256" );
  2706. case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
  2707. return( "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" );
  2708. #endif
  2709. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
  2710. case TLS_RSA_WITH_AES_128_GCM_SHA256:
  2711. return( "TLS-RSA-WITH-AES-128-GCM-SHA256" );
  2712. case TLS_RSA_WITH_AES_256_GCM_SHA384:
  2713. return( "TLS-RSA-WITH-AES-256-GCM-SHA384" );
  2714. #endif
  2715. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
  2716. case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
  2717. return( "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256" );
  2718. case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
  2719. return( "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384" );
  2720. #endif
  2721. #endif /* POLARSSL_AES_C */
  2722. #if defined(POLARSSL_CAMELLIA_C)
  2723. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA:
  2724. return( "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA" );
  2725. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:
  2726. return( "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA" );
  2727. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA:
  2728. return( "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA" );
  2729. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:
  2730. return( "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA" );
  2731. #if defined(POLARSSL_SHA2_C)
  2732. case TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  2733. return( "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
  2734. case TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:
  2735. return( "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256" );
  2736. case TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  2737. return( "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
  2738. case TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256:
  2739. return( "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256" );
  2740. #endif
  2741. #endif
  2742. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  2743. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  2744. case TLS_RSA_WITH_NULL_MD5:
  2745. return( "TLS-RSA-WITH-NULL-MD5" );
  2746. case TLS_RSA_WITH_NULL_SHA:
  2747. return( "TLS-RSA-WITH-NULL-SHA" );
  2748. case TLS_RSA_WITH_NULL_SHA256:
  2749. return( "TLS-RSA-WITH-NULL-SHA256" );
  2750. #endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
  2751. #if defined(POLARSSL_DES_C)
  2752. case TLS_RSA_WITH_DES_CBC_SHA:
  2753. return( "TLS-RSA-WITH-DES-CBC-SHA" );
  2754. case TLS_DHE_RSA_WITH_DES_CBC_SHA:
  2755. return( "TLS-DHE-RSA-WITH-DES-CBC-SHA" );
  2756. #endif
  2757. #endif /* defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) */
  2758. default:
  2759. break;
  2760. }
  2761. return( "unknown" );
  2762. }
  2763. int ssl_get_ciphersuite_id( const char *ciphersuite_name )
  2764. {
  2765. #if defined(POLARSSL_ARC4_C)
  2766. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-RC4-128-MD5"))
  2767. return( TLS_RSA_WITH_RC4_128_MD5 );
  2768. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-RC4-128-SHA"))
  2769. return( TLS_RSA_WITH_RC4_128_SHA );
  2770. #endif
  2771. #if defined(POLARSSL_DES_C)
  2772. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-3DES-EDE-CBC-SHA"))
  2773. return( TLS_RSA_WITH_3DES_EDE_CBC_SHA );
  2774. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA"))
  2775. return( TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA );
  2776. #endif
  2777. #if defined(POLARSSL_AES_C)
  2778. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-128-CBC-SHA"))
  2779. return( TLS_RSA_WITH_AES_128_CBC_SHA );
  2780. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA"))
  2781. return( TLS_DHE_RSA_WITH_AES_128_CBC_SHA );
  2782. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-256-CBC-SHA"))
  2783. return( TLS_RSA_WITH_AES_256_CBC_SHA );
  2784. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA"))
  2785. return( TLS_DHE_RSA_WITH_AES_256_CBC_SHA );
  2786. #if defined(POLARSSL_SHA2_C)
  2787. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-128-CBC-SHA256"))
  2788. return( TLS_RSA_WITH_AES_128_CBC_SHA256 );
  2789. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-256-CBC-SHA256"))
  2790. return( TLS_RSA_WITH_AES_256_CBC_SHA256 );
  2791. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256"))
  2792. return( TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 );
  2793. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256"))
  2794. return( TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 );
  2795. #endif
  2796. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
  2797. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-128-GCM-SHA256"))
  2798. return( TLS_RSA_WITH_AES_128_GCM_SHA256 );
  2799. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-AES-256-GCM-SHA384"))
  2800. return( TLS_RSA_WITH_AES_256_GCM_SHA384 );
  2801. #endif
  2802. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
  2803. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256"))
  2804. return( TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 );
  2805. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384"))
  2806. return( TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 );
  2807. #endif
  2808. #endif
  2809. #if defined(POLARSSL_CAMELLIA_C)
  2810. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA"))
  2811. return( TLS_RSA_WITH_CAMELLIA_128_CBC_SHA );
  2812. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA"))
  2813. return( TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA );
  2814. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA"))
  2815. return( TLS_RSA_WITH_CAMELLIA_256_CBC_SHA );
  2816. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA"))
  2817. return( TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA );
  2818. #if defined(POLARSSL_SHA2_C)
  2819. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
  2820. return( TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 );
  2821. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256"))
  2822. return( TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 );
  2823. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
  2824. return( TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 );
  2825. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256"))
  2826. return( TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 );
  2827. #endif
  2828. #endif
  2829. #if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
  2830. #if defined(POLARSSL_CIPHER_NULL_CIPHER)
  2831. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-NULL-MD5"))
  2832. return( TLS_RSA_WITH_NULL_MD5 );
  2833. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-NULL-SHA"))
  2834. return( TLS_RSA_WITH_NULL_SHA );
  2835. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-NULL-SHA256"))
  2836. return( TLS_RSA_WITH_NULL_SHA256 );
  2837. #endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
  2838. #if defined(POLARSSL_DES_C)
  2839. if (0 == strcasecmp(ciphersuite_name, "TLS-RSA-WITH-DES-CBC-SHA"))
  2840. return( TLS_RSA_WITH_DES_CBC_SHA );
  2841. if (0 == strcasecmp(ciphersuite_name, "TLS-DHE-RSA-WITH-DES-CBC-SHA"))
  2842. return( TLS_DHE_RSA_WITH_DES_CBC_SHA );
  2843. #endif
  2844. #endif /* defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) */
  2845. return( 0 );
  2846. }
  2847. const char *ssl_get_ciphersuite( const ssl_context *ssl )
  2848. {
  2849. return ssl_get_ciphersuite_name( ssl->session->ciphersuite );
  2850. }
  2851. const char *ssl_get_version( const ssl_context *ssl )
  2852. {
  2853. switch( ssl->minor_ver )
  2854. {
  2855. case SSL_MINOR_VERSION_0:
  2856. return( "SSLv3.0" );
  2857. case SSL_MINOR_VERSION_1:
  2858. return( "TLSv1.0" );
  2859. case SSL_MINOR_VERSION_2:
  2860. return( "TLSv1.1" );
  2861. case SSL_MINOR_VERSION_3:
  2862. return( "TLSv1.2" );
  2863. default:
  2864. break;
  2865. }
  2866. return( "unknown" );
  2867. }
  2868. const x509_cert *ssl_get_peer_cert( const ssl_context *ssl )
  2869. {
  2870. if( ssl == NULL || ssl->session == NULL )
  2871. return NULL;
  2872. return ssl->session->peer_cert;
  2873. }
  2874. const int ssl_default_ciphersuites[] =
  2875. {
  2876. #if defined(POLARSSL_DHM_C)
  2877. #if defined(POLARSSL_AES_C)
  2878. #if defined(POLARSSL_SHA2_C)
  2879. TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
  2880. #endif /* POLARSSL_SHA2_C */
  2881. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
  2882. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
  2883. #endif
  2884. TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
  2885. #if defined(POLARSSL_SHA2_C)
  2886. TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
  2887. #endif
  2888. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
  2889. TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
  2890. #endif
  2891. TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
  2892. #endif
  2893. #if defined(POLARSSL_CAMELLIA_C)
  2894. #if defined(POLARSSL_SHA2_C)
  2895. TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
  2896. #endif /* POLARSSL_SHA2_C */
  2897. TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
  2898. #if defined(POLARSSL_SHA2_C)
  2899. TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
  2900. #endif /* POLARSSL_SHA2_C */
  2901. TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
  2902. #endif
  2903. #if defined(POLARSSL_DES_C)
  2904. TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
  2905. #endif
  2906. #endif
  2907. #if defined(POLARSSL_AES_C)
  2908. #if defined(POLARSSL_SHA2_C)
  2909. TLS_RSA_WITH_AES_256_CBC_SHA256,
  2910. #endif /* POLARSSL_SHA2_C */
  2911. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA4_C)
  2912. TLS_RSA_WITH_AES_256_GCM_SHA384,
  2913. #endif /* POLARSSL_SHA2_C */
  2914. TLS_RSA_WITH_AES_256_CBC_SHA,
  2915. #endif
  2916. #if defined(POLARSSL_CAMELLIA_C)
  2917. #if defined(POLARSSL_SHA2_C)
  2918. TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256,
  2919. #endif /* POLARSSL_SHA2_C */
  2920. TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,
  2921. #endif
  2922. #if defined(POLARSSL_AES_C)
  2923. #if defined(POLARSSL_SHA2_C)
  2924. TLS_RSA_WITH_AES_128_CBC_SHA256,
  2925. #endif /* POLARSSL_SHA2_C */
  2926. #if defined(POLARSSL_GCM_C) && defined(POLARSSL_SHA2_C)
  2927. TLS_RSA_WITH_AES_128_GCM_SHA256,
  2928. #endif /* POLARSSL_SHA2_C */
  2929. TLS_RSA_WITH_AES_128_CBC_SHA,
  2930. #endif
  2931. #if defined(POLARSSL_CAMELLIA_C)
  2932. #if defined(POLARSSL_SHA2_C)
  2933. TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256,
  2934. #endif /* POLARSSL_SHA2_C */
  2935. TLS_RSA_WITH_CAMELLIA_128_CBC_SHA,
  2936. #endif
  2937. #if defined(POLARSSL_DES_C)
  2938. TLS_RSA_WITH_3DES_EDE_CBC_SHA,
  2939. #endif
  2940. #if defined(POLARSSL_ARC4_C)
  2941. TLS_RSA_WITH_RC4_128_SHA,
  2942. TLS_RSA_WITH_RC4_128_MD5,
  2943. #endif
  2944. 0
  2945. };
  2946. /*
  2947. * Perform a single step of the SSL handshake
  2948. */
  2949. int ssl_handshake_step( ssl_context *ssl )
  2950. {
  2951. int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE;
  2952. #if defined(POLARSSL_SSL_CLI_C)
  2953. if( ssl->endpoint == SSL_IS_CLIENT )
  2954. ret = ssl_handshake_client_step( ssl );
  2955. #endif
  2956. #if defined(POLARSSL_SSL_SRV_C)
  2957. if( ssl->endpoint == SSL_IS_SERVER )
  2958. ret = ssl_handshake_server_step( ssl );
  2959. #endif
  2960. return( ret );
  2961. }
  2962. /*
  2963. * Perform the SSL handshake
  2964. */
  2965. int ssl_handshake( ssl_context *ssl )
  2966. {
  2967. int ret = 0;
  2968. SSL_DEBUG_MSG( 2, ( "=> handshake" ) );
  2969. while( ssl->state != SSL_HANDSHAKE_OVER )
  2970. {
  2971. ret = ssl_handshake_step( ssl );
  2972. if( ret != 0 )
  2973. break;
  2974. }
  2975. SSL_DEBUG_MSG( 2, ( "<= handshake" ) );
  2976. return( ret );
  2977. }
  2978. /*
  2979. * Renegotiate current connection
  2980. */
  2981. int ssl_renegotiate( ssl_context *ssl )
  2982. {
  2983. int ret;
  2984. SSL_DEBUG_MSG( 2, ( "=> renegotiate" ) );
  2985. if( ssl->state != SSL_HANDSHAKE_OVER )
  2986. return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
  2987. ssl->state = SSL_HELLO_REQUEST;
  2988. ssl->renegotiation = SSL_RENEGOTIATION;
  2989. if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
  2990. return( ret );
  2991. if( ( ret = ssl_handshake( ssl ) ) != 0 )
  2992. {
  2993. SSL_DEBUG_RET( 1, "ssl_handshake", ret );
  2994. return( ret );
  2995. }
  2996. SSL_DEBUG_MSG( 2, ( "<= renegotiate" ) );
  2997. return( 0 );
  2998. }
  2999. /*
  3000. * Receive application data decrypted from the SSL layer
  3001. */
  3002. int ssl_read( ssl_context *ssl, unsigned char *buf, size_t len )
  3003. {
  3004. int ret;
  3005. size_t n;
  3006. SSL_DEBUG_MSG( 2, ( "=> read" ) );
  3007. if( ssl->state != SSL_HANDSHAKE_OVER )
  3008. {
  3009. if( ( ret = ssl_handshake( ssl ) ) != 0 )
  3010. {
  3011. SSL_DEBUG_RET( 1, "ssl_handshake", ret );
  3012. return( ret );
  3013. }
  3014. }
  3015. if( ssl->in_offt == NULL )
  3016. {
  3017. if( ( ret = ssl_read_record( ssl ) ) != 0 )
  3018. {
  3019. if( ret == POLARSSL_ERR_SSL_CONN_EOF )
  3020. return( 0 );
  3021. SSL_DEBUG_RET( 1, "ssl_read_record", ret );
  3022. return( ret );
  3023. }
  3024. if( ssl->in_msglen == 0 &&
  3025. ssl->in_msgtype == SSL_MSG_APPLICATION_DATA )
  3026. {
  3027. /*
  3028. * OpenSSL sends empty messages to randomize the IV
  3029. */
  3030. if( ( ret = ssl_read_record( ssl ) ) != 0 )
  3031. {
  3032. if( ret == POLARSSL_ERR_SSL_CONN_EOF )
  3033. return( 0 );
  3034. SSL_DEBUG_RET( 1, "ssl_read_record", ret );
  3035. return( ret );
  3036. }
  3037. }
  3038. if( ssl->in_msgtype == SSL_MSG_HANDSHAKE )
  3039. {
  3040. SSL_DEBUG_MSG( 1, ( "received handshake message" ) );
  3041. if( ssl->endpoint == SSL_IS_CLIENT &&
  3042. ( ssl->in_msg[0] != SSL_HS_HELLO_REQUEST ||
  3043. ssl->in_hslen != 4 ) )
  3044. {
  3045. SSL_DEBUG_MSG( 1, ( "handshake received (not HelloRequest)" ) );
  3046. return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
  3047. }
  3048. if( ssl->disable_renegotiation == SSL_RENEGOTIATION_DISABLED ||
  3049. ( ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION &&
  3050. ssl->allow_legacy_renegotiation == SSL_LEGACY_NO_RENEGOTIATION ) )
  3051. {
  3052. SSL_DEBUG_MSG( 3, ( "ignoring renegotiation, sending alert" ) );
  3053. if( ssl->minor_ver == SSL_MINOR_VERSION_0 )
  3054. {
  3055. /*
  3056. * SSLv3 does not have a "no_renegotiation" alert
  3057. */
  3058. if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 )
  3059. return( ret );
  3060. }
  3061. else
  3062. {
  3063. if( ( ret = ssl_send_alert_message( ssl,
  3064. SSL_ALERT_LEVEL_WARNING,
  3065. SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 )
  3066. {
  3067. return( ret );
  3068. }
  3069. }
  3070. }
  3071. else
  3072. {
  3073. if( ( ret = ssl_renegotiate( ssl ) ) != 0 )
  3074. {
  3075. SSL_DEBUG_RET( 1, "ssl_renegotiate", ret );
  3076. return( ret );
  3077. }
  3078. return( POLARSSL_ERR_NET_WANT_READ );
  3079. }
  3080. }
  3081. else if( ssl->in_msgtype != SSL_MSG_APPLICATION_DATA )
  3082. {
  3083. SSL_DEBUG_MSG( 1, ( "bad application data message" ) );
  3084. return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
  3085. }
  3086. ssl->in_offt = ssl->in_msg;
  3087. }
  3088. n = ( len < ssl->in_msglen )
  3089. ? len : ssl->in_msglen;
  3090. memcpy( buf, ssl->in_offt, n );
  3091. ssl->in_msglen -= n;
  3092. if( ssl->in_msglen == 0 )
  3093. /* all bytes consumed */
  3094. ssl->in_offt = NULL;
  3095. else
  3096. /* more data available */
  3097. ssl->in_offt += n;
  3098. SSL_DEBUG_MSG( 2, ( "<= read" ) );
  3099. return( (int) n );
  3100. }
  3101. /*
  3102. * Send application data to be encrypted by the SSL layer
  3103. */
  3104. int ssl_write( ssl_context *ssl, const unsigned char *buf, size_t len )
  3105. {
  3106. int ret;
  3107. size_t n;
  3108. SSL_DEBUG_MSG( 2, ( "=> write" ) );
  3109. if( ssl->state != SSL_HANDSHAKE_OVER )
  3110. {
  3111. if( ( ret = ssl_handshake( ssl ) ) != 0 )
  3112. {
  3113. SSL_DEBUG_RET( 1, "ssl_handshake", ret );
  3114. return( ret );
  3115. }
  3116. }
  3117. n = ( len < SSL_MAX_CONTENT_LEN )
  3118. ? len : SSL_MAX_CONTENT_LEN;
  3119. if( ssl->out_left != 0 )
  3120. {
  3121. if( ( ret = ssl_flush_output( ssl ) ) != 0 )
  3122. {
  3123. SSL_DEBUG_RET( 1, "ssl_flush_output", ret );
  3124. return( ret );
  3125. }
  3126. }
  3127. else
  3128. {
  3129. ssl->out_msglen = n;
  3130. ssl->out_msgtype = SSL_MSG_APPLICATION_DATA;
  3131. memcpy( ssl->out_msg, buf, n );
  3132. if( ( ret = ssl_write_record( ssl ) ) != 0 )
  3133. {
  3134. SSL_DEBUG_RET( 1, "ssl_write_record", ret );
  3135. return( ret );
  3136. }
  3137. }
  3138. SSL_DEBUG_MSG( 2, ( "<= write" ) );
  3139. return( (int) n );
  3140. }
  3141. /*
  3142. * Notify the peer that the connection is being closed
  3143. */
  3144. int ssl_close_notify( ssl_context *ssl )
  3145. {
  3146. int ret;
  3147. SSL_DEBUG_MSG( 2, ( "=> write close notify" ) );
  3148. if( ( ret = ssl_flush_output( ssl ) ) != 0 )
  3149. {
  3150. SSL_DEBUG_RET( 1, "ssl_flush_output", ret );
  3151. return( ret );
  3152. }
  3153. if( ssl->state == SSL_HANDSHAKE_OVER )
  3154. {
  3155. if( ( ret = ssl_send_alert_message( ssl,
  3156. SSL_ALERT_LEVEL_WARNING,
  3157. SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 )
  3158. {
  3159. return( ret );
  3160. }
  3161. }
  3162. SSL_DEBUG_MSG( 2, ( "<= write close notify" ) );
  3163. return( ret );
  3164. }
  3165. void ssl_transform_free( ssl_transform *transform )
  3166. {
  3167. #if defined(POLARSSL_ZLIB_SUPPORT)
  3168. deflateEnd( &transform->ctx_deflate );
  3169. inflateEnd( &transform->ctx_inflate );
  3170. #endif
  3171. memset( transform, 0, sizeof( ssl_transform ) );
  3172. }
  3173. void ssl_handshake_free( ssl_handshake_params *handshake )
  3174. {
  3175. #if defined(POLARSSL_DHM_C)
  3176. dhm_free( &handshake->dhm_ctx );
  3177. #endif
  3178. memset( handshake, 0, sizeof( ssl_handshake_params ) );
  3179. }
  3180. void ssl_session_free( ssl_session *session )
  3181. {
  3182. if( session->peer_cert != NULL )
  3183. {
  3184. x509_free( session->peer_cert );
  3185. free( session->peer_cert );
  3186. }
  3187. memset( session, 0, sizeof( ssl_session ) );
  3188. }
  3189. /*
  3190. * Free an SSL context
  3191. */
  3192. void ssl_free( ssl_context *ssl )
  3193. {
  3194. SSL_DEBUG_MSG( 2, ( "=> free" ) );
  3195. if( ssl->out_ctr != NULL )
  3196. {
  3197. memset( ssl->out_ctr, 0, SSL_BUFFER_LEN );
  3198. free( ssl->out_ctr );
  3199. }
  3200. if( ssl->in_ctr != NULL )
  3201. {
  3202. memset( ssl->in_ctr, 0, SSL_BUFFER_LEN );
  3203. free( ssl->in_ctr );
  3204. }
  3205. #if defined(POLARSSL_DHM_C)
  3206. mpi_free( &ssl->dhm_P );
  3207. mpi_free( &ssl->dhm_G );
  3208. #endif
  3209. if( ssl->transform )
  3210. {
  3211. ssl_transform_free( ssl->transform );
  3212. free( ssl->transform );
  3213. }
  3214. if( ssl->handshake )
  3215. {
  3216. ssl_handshake_free( ssl->handshake );
  3217. ssl_transform_free( ssl->transform_negotiate );
  3218. ssl_session_free( ssl->session_negotiate );
  3219. free( ssl->handshake );
  3220. free( ssl->transform_negotiate );
  3221. free( ssl->session_negotiate );
  3222. }
  3223. if( ssl->session )
  3224. {
  3225. ssl_session_free( ssl->session );
  3226. free( ssl->session );
  3227. }
  3228. if ( ssl->hostname != NULL)
  3229. {
  3230. memset( ssl->hostname, 0, ssl->hostname_len );
  3231. free( ssl->hostname );
  3232. ssl->hostname_len = 0;
  3233. }
  3234. #if defined(POLARSSL_SSL_HW_RECORD_ACCEL)
  3235. if( ssl_hw_record_finish != NULL )
  3236. {
  3237. SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_finish()" ) );
  3238. ssl_hw_record_finish( ssl );
  3239. }
  3240. #endif
  3241. SSL_DEBUG_MSG( 2, ( "<= free" ) );
  3242. /* Actually clear after last debug message */
  3243. memset( ssl, 0, sizeof( ssl_context ) );
  3244. }
  3245. #endif