s3_cbc.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. /* ssl/s3_cbc.c */
  2. /* ====================================================================
  3. * Copyright (c) 2012 The OpenSSL Project. All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. *
  9. * 1. Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. *
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in
  14. * the documentation and/or other materials provided with the
  15. * distribution.
  16. *
  17. * 3. All advertising materials mentioning features or use of this
  18. * software must display the following acknowledgment:
  19. * "This product includes software developed by the OpenSSL Project
  20. * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  21. *
  22. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  23. * endorse or promote products derived from this software without
  24. * prior written permission. For written permission, please contact
  25. * [email protected].
  26. *
  27. * 5. Products derived from this software may not be called "OpenSSL"
  28. * nor may "OpenSSL" appear in their names without prior written
  29. * permission of the OpenSSL Project.
  30. *
  31. * 6. Redistributions of any form whatsoever must retain the following
  32. * acknowledgment:
  33. * "This product includes software developed by the OpenSSL Project
  34. * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  35. *
  36. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  37. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  38. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  39. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  40. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  42. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  43. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  44. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  45. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  46. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  47. * OF THE POSSIBILITY OF SUCH DAMAGE.
  48. * ====================================================================
  49. *
  50. * This product includes cryptographic software written by Eric Young
  51. * ([email protected]). This product includes software written by Tim
  52. * Hudson ([email protected]).
  53. *
  54. */
  55. #include "ssl_locl.h"
  56. #include <openssl/md5.h>
  57. #include <openssl/sha.h>
  58. /* MAX_HASH_BIT_COUNT_BYTES is the maximum number of bytes in the hash's length
  59. * field. (SHA-384/512 have 128-bit length.) */
  60. #define MAX_HASH_BIT_COUNT_BYTES 16
  61. /* MAX_HASH_BLOCK_SIZE is the maximum hash block size that we'll support.
  62. * Currently SHA-384/512 has a 128-byte block size and that's the largest
  63. * supported by TLS.) */
  64. #define MAX_HASH_BLOCK_SIZE 128
  65. /* Some utility functions are needed:
  66. *
  67. * These macros return the given value with the MSB copied to all the other
  68. * bits. They use the fact that arithmetic shift shifts-in the sign bit.
  69. * However, this is not ensured by the C standard so you may need to replace
  70. * them with something else on odd CPUs. */
  71. #define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) )
  72. #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x)))
  73. /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */
  74. static unsigned constant_time_lt(unsigned a, unsigned b)
  75. {
  76. a -= b;
  77. return DUPLICATE_MSB_TO_ALL(a);
  78. }
  79. /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */
  80. static unsigned constant_time_ge(unsigned a, unsigned b)
  81. {
  82. a -= b;
  83. return DUPLICATE_MSB_TO_ALL(~a);
  84. }
  85. /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */
  86. static unsigned char constant_time_eq_8(unsigned a, unsigned b)
  87. {
  88. unsigned c = a ^ b;
  89. c--;
  90. return DUPLICATE_MSB_TO_ALL_8(c);
  91. }
  92. /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC
  93. * record in |rec| by updating |rec->length| in constant time.
  94. *
  95. * block_size: the block size of the cipher used to encrypt the record.
  96. * returns:
  97. * 0: (in non-constant time) if the record is publicly invalid.
  98. * 1: if the padding was valid
  99. * -1: otherwise. */
  100. int ssl3_cbc_remove_padding(const SSL* s,
  101. SSL3_RECORD *rec,
  102. unsigned block_size,
  103. unsigned mac_size)
  104. {
  105. unsigned padding_length, good;
  106. const unsigned overhead = 1 /* padding length byte */ + mac_size;
  107. /* These lengths are all public so we can test them in non-constant
  108. * time. */
  109. if (overhead > rec->length)
  110. return 0;
  111. padding_length = rec->data[rec->length-1];
  112. good = constant_time_ge(rec->length, padding_length+overhead);
  113. /* SSLv3 requires that the padding is minimal. */
  114. good &= constant_time_ge(block_size, padding_length+1);
  115. padding_length = good & (padding_length+1);
  116. rec->length -= padding_length;
  117. rec->type |= padding_length<<8; /* kludge: pass padding length */
  118. return (int)((good & 1) | (~good & -1));
  119. }
  120. /* tls1_cbc_remove_padding removes the CBC padding from the decrypted, TLS, CBC
  121. * record in |rec| in constant time and returns 1 if the padding is valid and
  122. * -1 otherwise. It also removes any explicit IV from the start of the record
  123. * without leaking any timing about whether there was enough space after the
  124. * padding was removed.
  125. *
  126. * block_size: the block size of the cipher used to encrypt the record.
  127. * returns:
  128. * 0: (in non-constant time) if the record is publicly invalid.
  129. * 1: if the padding was valid
  130. * -1: otherwise. */
  131. int tls1_cbc_remove_padding(const SSL* s,
  132. SSL3_RECORD *rec,
  133. unsigned block_size,
  134. unsigned mac_size)
  135. {
  136. unsigned padding_length, good, to_check, i;
  137. const unsigned overhead = 1 /* padding length byte */ + mac_size;
  138. /* Check if version requires explicit IV */
  139. if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER)
  140. {
  141. /* These lengths are all public so we can test them in
  142. * non-constant time.
  143. */
  144. if (overhead + block_size > rec->length)
  145. return 0;
  146. /* We can now safely skip explicit IV */
  147. rec->data += block_size;
  148. rec->input += block_size;
  149. rec->length -= block_size;
  150. }
  151. else if (overhead > rec->length)
  152. return 0;
  153. padding_length = rec->data[rec->length-1];
  154. /* NB: if compression is in operation the first packet may not be of
  155. * even length so the padding bug check cannot be performed. This bug
  156. * workaround has been around since SSLeay so hopefully it is either
  157. * fixed now or no buggy implementation supports compression [steve]
  158. */
  159. if ( (s->options&SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand)
  160. {
  161. /* First packet is even in size, so check */
  162. if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0",8) == 0) &&
  163. !(padding_length & 1))
  164. {
  165. s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG;
  166. }
  167. if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) &&
  168. padding_length > 0)
  169. {
  170. padding_length--;
  171. }
  172. }
  173. if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER)
  174. {
  175. /* padding is already verified */
  176. rec->length -= padding_length + 1;
  177. return 1;
  178. }
  179. good = constant_time_ge(rec->length, overhead+padding_length);
  180. /* The padding consists of a length byte at the end of the record and
  181. * then that many bytes of padding, all with the same value as the
  182. * length byte. Thus, with the length byte included, there are i+1
  183. * bytes of padding.
  184. *
  185. * We can't check just |padding_length+1| bytes because that leaks
  186. * decrypted information. Therefore we always have to check the maximum
  187. * amount of padding possible. (Again, the length of the record is
  188. * public information so we can use it.) */
  189. to_check = 255; /* maximum amount of padding. */
  190. if (to_check > rec->length-1)
  191. to_check = rec->length-1;
  192. for (i = 0; i < to_check; i++)
  193. {
  194. unsigned char mask = constant_time_ge(padding_length, i);
  195. unsigned char b = rec->data[rec->length-1-i];
  196. /* The final |padding_length+1| bytes should all have the value
  197. * |padding_length|. Therefore the XOR should be zero. */
  198. good &= ~(mask&(padding_length ^ b));
  199. }
  200. /* If any of the final |padding_length+1| bytes had the wrong value,
  201. * one or more of the lower eight bits of |good| will be cleared. We
  202. * AND the bottom 8 bits together and duplicate the result to all the
  203. * bits. */
  204. good &= good >> 4;
  205. good &= good >> 2;
  206. good &= good >> 1;
  207. good <<= sizeof(good)*8-1;
  208. good = DUPLICATE_MSB_TO_ALL(good);
  209. padding_length = good & (padding_length+1);
  210. rec->length -= padding_length;
  211. rec->type |= padding_length<<8; /* kludge: pass padding length */
  212. return (int)((good & 1) | (~good & -1));
  213. }
  214. /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in
  215. * constant time (independent of the concrete value of rec->length, which may
  216. * vary within a 256-byte window).
  217. *
  218. * ssl3_cbc_remove_padding or tls1_cbc_remove_padding must be called prior to
  219. * this function.
  220. *
  221. * On entry:
  222. * rec->orig_len >= md_size
  223. * md_size <= EVP_MAX_MD_SIZE
  224. *
  225. * If CBC_MAC_ROTATE_IN_PLACE is defined then the rotation is performed with
  226. * variable accesses in a 64-byte-aligned buffer. Assuming that this fits into
  227. * a single or pair of cache-lines, then the variable memory accesses don't
  228. * actually affect the timing. CPUs with smaller cache-lines [if any] are
  229. * not multi-core and are not considered vulnerable to cache-timing attacks.
  230. */
  231. #define CBC_MAC_ROTATE_IN_PLACE
  232. void ssl3_cbc_copy_mac(unsigned char* out,
  233. const SSL3_RECORD *rec,
  234. unsigned md_size,unsigned orig_len)
  235. {
  236. #if defined(CBC_MAC_ROTATE_IN_PLACE)
  237. unsigned char rotated_mac_buf[64+EVP_MAX_MD_SIZE];
  238. unsigned char *rotated_mac;
  239. #else
  240. unsigned char rotated_mac[EVP_MAX_MD_SIZE];
  241. #endif
  242. /* mac_end is the index of |rec->data| just after the end of the MAC. */
  243. unsigned mac_end = rec->length;
  244. unsigned mac_start = mac_end - md_size;
  245. /* scan_start contains the number of bytes that we can ignore because
  246. * the MAC's position can only vary by 255 bytes. */
  247. unsigned scan_start = 0;
  248. unsigned i, j;
  249. unsigned div_spoiler;
  250. unsigned rotate_offset;
  251. OPENSSL_assert(orig_len >= md_size);
  252. OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE);
  253. #if defined(CBC_MAC_ROTATE_IN_PLACE)
  254. rotated_mac = rotated_mac_buf + ((0-(size_t)rotated_mac_buf)&63);
  255. #endif
  256. /* This information is public so it's safe to branch based on it. */
  257. if (orig_len > md_size + 255 + 1)
  258. scan_start = orig_len - (md_size + 255 + 1);
  259. /* div_spoiler contains a multiple of md_size that is used to cause the
  260. * modulo operation to be constant time. Without this, the time varies
  261. * based on the amount of padding when running on Intel chips at least.
  262. *
  263. * The aim of right-shifting md_size is so that the compiler doesn't
  264. * figure out that it can remove div_spoiler as that would require it
  265. * to prove that md_size is always even, which I hope is beyond it. */
  266. div_spoiler = md_size >> 1;
  267. div_spoiler <<= (sizeof(div_spoiler)-1)*8;
  268. rotate_offset = (div_spoiler + mac_start - scan_start) % md_size;
  269. memset(rotated_mac, 0, md_size);
  270. for (i = scan_start, j = 0; i < orig_len; i++)
  271. {
  272. unsigned char mac_started = constant_time_ge(i, mac_start);
  273. unsigned char mac_ended = constant_time_ge(i, mac_end);
  274. unsigned char b = rec->data[i];
  275. rotated_mac[j++] |= b & mac_started & ~mac_ended;
  276. j &= constant_time_lt(j,md_size);
  277. }
  278. /* Now rotate the MAC */
  279. #if defined(CBC_MAC_ROTATE_IN_PLACE)
  280. j = 0;
  281. for (i = 0; i < md_size; i++)
  282. {
  283. /* in case cache-line is 32 bytes, touch second line */
  284. ((volatile unsigned char *)rotated_mac)[rotate_offset^32];
  285. out[j++] = rotated_mac[rotate_offset++];
  286. rotate_offset &= constant_time_lt(rotate_offset,md_size);
  287. }
  288. #else
  289. memset(out, 0, md_size);
  290. rotate_offset = md_size - rotate_offset;
  291. rotate_offset &= constant_time_lt(rotate_offset,md_size);
  292. for (i = 0; i < md_size; i++)
  293. {
  294. for (j = 0; j < md_size; j++)
  295. out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset);
  296. rotate_offset++;
  297. rotate_offset &= constant_time_lt(rotate_offset,md_size);
  298. }
  299. #endif
  300. }
  301. /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in
  302. * little-endian order. The value of p is advanced by four. */
  303. #define u32toLE(n, p) \
  304. (*((p)++)=(unsigned char)(n), \
  305. *((p)++)=(unsigned char)(n>>8), \
  306. *((p)++)=(unsigned char)(n>>16), \
  307. *((p)++)=(unsigned char)(n>>24))
  308. /* These functions serialize the state of a hash and thus perform the standard
  309. * "final" operation without adding the padding and length that such a function
  310. * typically does. */
  311. static void tls1_md5_final_raw(void* ctx, unsigned char *md_out)
  312. {
  313. MD5_CTX *md5 = ctx;
  314. u32toLE(md5->A, md_out);
  315. u32toLE(md5->B, md_out);
  316. u32toLE(md5->C, md_out);
  317. u32toLE(md5->D, md_out);
  318. }
  319. static void tls1_sha1_final_raw(void* ctx, unsigned char *md_out)
  320. {
  321. SHA_CTX *sha1 = ctx;
  322. l2n(sha1->h0, md_out);
  323. l2n(sha1->h1, md_out);
  324. l2n(sha1->h2, md_out);
  325. l2n(sha1->h3, md_out);
  326. l2n(sha1->h4, md_out);
  327. }
  328. #define LARGEST_DIGEST_CTX SHA_CTX
  329. #ifndef OPENSSL_NO_SHA256
  330. static void tls1_sha256_final_raw(void* ctx, unsigned char *md_out)
  331. {
  332. SHA256_CTX *sha256 = ctx;
  333. unsigned i;
  334. for (i = 0; i < 8; i++)
  335. {
  336. l2n(sha256->h[i], md_out);
  337. }
  338. }
  339. #undef LARGEST_DIGEST_CTX
  340. #define LARGEST_DIGEST_CTX SHA256_CTX
  341. #endif
  342. #ifndef OPENSSL_NO_SHA512
  343. static void tls1_sha512_final_raw(void* ctx, unsigned char *md_out)
  344. {
  345. SHA512_CTX *sha512 = ctx;
  346. unsigned i;
  347. for (i = 0; i < 8; i++)
  348. {
  349. l2n8(sha512->h[i], md_out);
  350. }
  351. }
  352. #undef LARGEST_DIGEST_CTX
  353. #define LARGEST_DIGEST_CTX SHA512_CTX
  354. #endif
  355. /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function
  356. * which ssl3_cbc_digest_record supports. */
  357. char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx)
  358. {
  359. #ifdef OPENSSL_FIPS
  360. if (FIPS_mode())
  361. return 0;
  362. #endif
  363. switch (EVP_MD_CTX_type(ctx))
  364. {
  365. case NID_md5:
  366. case NID_sha1:
  367. #ifndef OPENSSL_NO_SHA256
  368. case NID_sha224:
  369. case NID_sha256:
  370. #endif
  371. #ifndef OPENSSL_NO_SHA512
  372. case NID_sha384:
  373. case NID_sha512:
  374. #endif
  375. return 1;
  376. default:
  377. return 0;
  378. }
  379. }
  380. /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS
  381. * record.
  382. *
  383. * ctx: the EVP_MD_CTX from which we take the hash function.
  384. * ssl3_cbc_record_digest_supported must return true for this EVP_MD_CTX.
  385. * md_out: the digest output. At most EVP_MAX_MD_SIZE bytes will be written.
  386. * md_out_size: if non-NULL, the number of output bytes is written here.
  387. * header: the 13-byte, TLS record header.
  388. * data: the record data itself, less any preceeding explicit IV.
  389. * data_plus_mac_size: the secret, reported length of the data and MAC
  390. * once the padding has been removed.
  391. * data_plus_mac_plus_padding_size: the public length of the whole
  392. * record, including padding.
  393. * is_sslv3: non-zero if we are to use SSLv3. Otherwise, TLS.
  394. *
  395. * On entry: by virtue of having been through one of the remove_padding
  396. * functions, above, we know that data_plus_mac_size is large enough to contain
  397. * a padding byte and MAC. (If the padding was invalid, it might contain the
  398. * padding too. ) */
  399. void ssl3_cbc_digest_record(
  400. const EVP_MD_CTX *ctx,
  401. unsigned char* md_out,
  402. size_t* md_out_size,
  403. const unsigned char header[13],
  404. const unsigned char *data,
  405. size_t data_plus_mac_size,
  406. size_t data_plus_mac_plus_padding_size,
  407. const unsigned char *mac_secret,
  408. unsigned mac_secret_length,
  409. char is_sslv3)
  410. {
  411. union { double align;
  412. unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; } md_state;
  413. void (*md_final_raw)(void *ctx, unsigned char *md_out);
  414. void (*md_transform)(void *ctx, const unsigned char *block);
  415. unsigned md_size, md_block_size = 64;
  416. unsigned sslv3_pad_length = 40, header_length, variance_blocks,
  417. len, max_mac_bytes, num_blocks,
  418. num_starting_blocks, k, mac_end_offset, c, index_a, index_b;
  419. unsigned int bits; /* at most 18 bits */
  420. unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES];
  421. /* hmac_pad is the masked HMAC key. */
  422. unsigned char hmac_pad[MAX_HASH_BLOCK_SIZE];
  423. unsigned char first_block[MAX_HASH_BLOCK_SIZE];
  424. unsigned char mac_out[EVP_MAX_MD_SIZE];
  425. unsigned i, j, md_out_size_u;
  426. EVP_MD_CTX md_ctx;
  427. /* mdLengthSize is the number of bytes in the length field that terminates
  428. * the hash. */
  429. unsigned md_length_size = 8;
  430. char length_is_big_endian = 1;
  431. /* This is a, hopefully redundant, check that allows us to forget about
  432. * many possible overflows later in this function. */
  433. OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024);
  434. switch (EVP_MD_CTX_type(ctx))
  435. {
  436. case NID_md5:
  437. MD5_Init((MD5_CTX*)md_state.c);
  438. md_final_raw = tls1_md5_final_raw;
  439. md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform;
  440. md_size = 16;
  441. sslv3_pad_length = 48;
  442. length_is_big_endian = 0;
  443. break;
  444. case NID_sha1:
  445. SHA1_Init((SHA_CTX*)md_state.c);
  446. md_final_raw = tls1_sha1_final_raw;
  447. md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform;
  448. md_size = 20;
  449. break;
  450. #ifndef OPENSSL_NO_SHA256
  451. case NID_sha224:
  452. SHA224_Init((SHA256_CTX*)md_state.c);
  453. md_final_raw = tls1_sha256_final_raw;
  454. md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform;
  455. md_size = 224/8;
  456. break;
  457. case NID_sha256:
  458. SHA256_Init((SHA256_CTX*)md_state.c);
  459. md_final_raw = tls1_sha256_final_raw;
  460. md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform;
  461. md_size = 32;
  462. break;
  463. #endif
  464. #ifndef OPENSSL_NO_SHA512
  465. case NID_sha384:
  466. SHA384_Init((SHA512_CTX*)md_state.c);
  467. md_final_raw = tls1_sha512_final_raw;
  468. md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform;
  469. md_size = 384/8;
  470. md_block_size = 128;
  471. md_length_size = 16;
  472. break;
  473. case NID_sha512:
  474. SHA512_Init((SHA512_CTX*)md_state.c);
  475. md_final_raw = tls1_sha512_final_raw;
  476. md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform;
  477. md_size = 64;
  478. md_block_size = 128;
  479. md_length_size = 16;
  480. break;
  481. #endif
  482. default:
  483. /* ssl3_cbc_record_digest_supported should have been
  484. * called first to check that the hash function is
  485. * supported. */
  486. OPENSSL_assert(0);
  487. if (md_out_size)
  488. *md_out_size = -1;
  489. return;
  490. }
  491. OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES);
  492. OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE);
  493. OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE);
  494. header_length = 13;
  495. if (is_sslv3)
  496. {
  497. header_length =
  498. mac_secret_length +
  499. sslv3_pad_length +
  500. 8 /* sequence number */ +
  501. 1 /* record type */ +
  502. 2 /* record length */;
  503. }
  504. /* variance_blocks is the number of blocks of the hash that we have to
  505. * calculate in constant time because they could be altered by the
  506. * padding value.
  507. *
  508. * In SSLv3, the padding must be minimal so the end of the plaintext
  509. * varies by, at most, 15+20 = 35 bytes. (We conservatively assume that
  510. * the MAC size varies from 0..20 bytes.) In case the 9 bytes of hash
  511. * termination (0x80 + 64-bit length) don't fit in the final block, we
  512. * say that the final two blocks can vary based on the padding.
  513. *
  514. * TLSv1 has MACs up to 48 bytes long (SHA-384) and the padding is not
  515. * required to be minimal. Therefore we say that the final six blocks
  516. * can vary based on the padding.
  517. *
  518. * Later in the function, if the message is short and there obviously
  519. * cannot be this many blocks then variance_blocks can be reduced. */
  520. variance_blocks = is_sslv3 ? 2 : 6;
  521. /* From now on we're dealing with the MAC, which conceptually has 13
  522. * bytes of `header' before the start of the data (TLS) or 71/75 bytes
  523. * (SSLv3) */
  524. len = data_plus_mac_plus_padding_size + header_length;
  525. /* max_mac_bytes contains the maximum bytes of bytes in the MAC, including
  526. * |header|, assuming that there's no padding. */
  527. max_mac_bytes = len - md_size - 1;
  528. /* num_blocks is the maximum number of hash blocks. */
  529. num_blocks = (max_mac_bytes + 1 + md_length_size + md_block_size - 1) / md_block_size;
  530. /* In order to calculate the MAC in constant time we have to handle
  531. * the final blocks specially because the padding value could cause the
  532. * end to appear somewhere in the final |variance_blocks| blocks and we
  533. * can't leak where. However, |num_starting_blocks| worth of data can
  534. * be hashed right away because no padding value can affect whether
  535. * they are plaintext. */
  536. num_starting_blocks = 0;
  537. /* k is the starting byte offset into the conceptual header||data where
  538. * we start processing. */
  539. k = 0;
  540. /* mac_end_offset is the index just past the end of the data to be
  541. * MACed. */
  542. mac_end_offset = data_plus_mac_size + header_length - md_size;
  543. /* c is the index of the 0x80 byte in the final hash block that
  544. * contains application data. */
  545. c = mac_end_offset % md_block_size;
  546. /* index_a is the hash block number that contains the 0x80 terminating
  547. * value. */
  548. index_a = mac_end_offset / md_block_size;
  549. /* index_b is the hash block number that contains the 64-bit hash
  550. * length, in bits. */
  551. index_b = (mac_end_offset + md_length_size) / md_block_size;
  552. /* bits is the hash-length in bits. It includes the additional hash
  553. * block for the masked HMAC key, or whole of |header| in the case of
  554. * SSLv3. */
  555. /* For SSLv3, if we're going to have any starting blocks then we need
  556. * at least two because the header is larger than a single block. */
  557. if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0))
  558. {
  559. num_starting_blocks = num_blocks - variance_blocks;
  560. k = md_block_size*num_starting_blocks;
  561. }
  562. bits = 8*mac_end_offset;
  563. if (!is_sslv3)
  564. {
  565. /* Compute the initial HMAC block. For SSLv3, the padding and
  566. * secret bytes are included in |header| because they take more
  567. * than a single block. */
  568. bits += 8*md_block_size;
  569. memset(hmac_pad, 0, md_block_size);
  570. OPENSSL_assert(mac_secret_length <= sizeof(hmac_pad));
  571. memcpy(hmac_pad, mac_secret, mac_secret_length);
  572. for (i = 0; i < md_block_size; i++)
  573. hmac_pad[i] ^= 0x36;
  574. md_transform(md_state.c, hmac_pad);
  575. }
  576. if (length_is_big_endian)
  577. {
  578. memset(length_bytes,0,md_length_size-4);
  579. length_bytes[md_length_size-4] = (unsigned char)(bits>>24);
  580. length_bytes[md_length_size-3] = (unsigned char)(bits>>16);
  581. length_bytes[md_length_size-2] = (unsigned char)(bits>>8);
  582. length_bytes[md_length_size-1] = (unsigned char)bits;
  583. }
  584. else
  585. {
  586. memset(length_bytes,0,md_length_size);
  587. length_bytes[md_length_size-5] = (unsigned char)(bits>>24);
  588. length_bytes[md_length_size-6] = (unsigned char)(bits>>16);
  589. length_bytes[md_length_size-7] = (unsigned char)(bits>>8);
  590. length_bytes[md_length_size-8] = (unsigned char)bits;
  591. }
  592. if (k > 0)
  593. {
  594. if (is_sslv3)
  595. {
  596. /* The SSLv3 header is larger than a single block.
  597. * overhang is the number of bytes beyond a single
  598. * block that the header consumes: either 7 bytes
  599. * (SHA1) or 11 bytes (MD5). */
  600. unsigned overhang = header_length-md_block_size;
  601. md_transform(md_state.c, header);
  602. memcpy(first_block, header + md_block_size, overhang);
  603. memcpy(first_block + overhang, data, md_block_size-overhang);
  604. md_transform(md_state.c, first_block);
  605. for (i = 1; i < k/md_block_size - 1; i++)
  606. md_transform(md_state.c, data + md_block_size*i - overhang);
  607. }
  608. else
  609. {
  610. /* k is a multiple of md_block_size. */
  611. memcpy(first_block, header, 13);
  612. memcpy(first_block+13, data, md_block_size-13);
  613. md_transform(md_state.c, first_block);
  614. for (i = 1; i < k/md_block_size; i++)
  615. md_transform(md_state.c, data + md_block_size*i - 13);
  616. }
  617. }
  618. memset(mac_out, 0, sizeof(mac_out));
  619. /* We now process the final hash blocks. For each block, we construct
  620. * it in constant time. If the |i==index_a| then we'll include the 0x80
  621. * bytes and zero pad etc. For each block we selectively copy it, in
  622. * constant time, to |mac_out|. */
  623. for (i = num_starting_blocks; i <= num_starting_blocks+variance_blocks; i++)
  624. {
  625. unsigned char block[MAX_HASH_BLOCK_SIZE];
  626. unsigned char is_block_a = constant_time_eq_8(i, index_a);
  627. unsigned char is_block_b = constant_time_eq_8(i, index_b);
  628. for (j = 0; j < md_block_size; j++)
  629. {
  630. unsigned char b = 0, is_past_c, is_past_cp1;
  631. if (k < header_length)
  632. b = header[k];
  633. else if (k < data_plus_mac_plus_padding_size + header_length)
  634. b = data[k-header_length];
  635. k++;
  636. is_past_c = is_block_a & constant_time_ge(j, c);
  637. is_past_cp1 = is_block_a & constant_time_ge(j, c+1);
  638. /* If this is the block containing the end of the
  639. * application data, and we are at the offset for the
  640. * 0x80 value, then overwrite b with 0x80. */
  641. b = (b&~is_past_c) | (0x80&is_past_c);
  642. /* If this the the block containing the end of the
  643. * application data and we're past the 0x80 value then
  644. * just write zero. */
  645. b = b&~is_past_cp1;
  646. /* If this is index_b (the final block), but not
  647. * index_a (the end of the data), then the 64-bit
  648. * length didn't fit into index_a and we're having to
  649. * add an extra block of zeros. */
  650. b &= ~is_block_b | is_block_a;
  651. /* The final bytes of one of the blocks contains the
  652. * length. */
  653. if (j >= md_block_size - md_length_size)
  654. {
  655. /* If this is index_b, write a length byte. */
  656. b = (b&~is_block_b) | (is_block_b&length_bytes[j-(md_block_size-md_length_size)]);
  657. }
  658. block[j] = b;
  659. }
  660. md_transform(md_state.c, block);
  661. md_final_raw(md_state.c, block);
  662. /* If this is index_b, copy the hash value to |mac_out|. */
  663. for (j = 0; j < md_size; j++)
  664. mac_out[j] |= block[j]&is_block_b;
  665. }
  666. EVP_MD_CTX_init(&md_ctx);
  667. EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */);
  668. if (is_sslv3)
  669. {
  670. /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */
  671. memset(hmac_pad, 0x5c, sslv3_pad_length);
  672. EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length);
  673. EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length);
  674. EVP_DigestUpdate(&md_ctx, mac_out, md_size);
  675. }
  676. else
  677. {
  678. /* Complete the HMAC in the standard manner. */
  679. for (i = 0; i < md_block_size; i++)
  680. hmac_pad[i] ^= 0x6a;
  681. EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size);
  682. EVP_DigestUpdate(&md_ctx, mac_out, md_size);
  683. }
  684. EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u);
  685. if (md_out_size)
  686. *md_out_size = md_out_size_u;
  687. EVP_MD_CTX_cleanup(&md_ctx);
  688. }
  689. #ifdef OPENSSL_FIPS
  690. /* Due to the need to use EVP in FIPS mode we can't reimplement digests but
  691. * we can ensure the number of blocks processed is equal for all cases
  692. * by digesting additional data.
  693. */
  694. void tls_fips_digest_extra(
  695. const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx,
  696. const unsigned char *data, size_t data_len, size_t orig_len)
  697. {
  698. size_t block_size, digest_pad, blocks_data, blocks_orig;
  699. if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE)
  700. return;
  701. block_size = EVP_MD_CTX_block_size(mac_ctx);
  702. /* We are in FIPS mode if we get this far so we know we have only SHA*
  703. * digests and TLS to deal with.
  704. * Minimum digest padding length is 17 for SHA384/SHA512 and 9
  705. * otherwise.
  706. * Additional header is 13 bytes. To get the number of digest blocks
  707. * processed round up the amount of data plus padding to the nearest
  708. * block length. Block length is 128 for SHA384/SHA512 and 64 otherwise.
  709. * So we have:
  710. * blocks = (payload_len + digest_pad + 13 + block_size - 1)/block_size
  711. * equivalently:
  712. * blocks = (payload_len + digest_pad + 12)/block_size + 1
  713. * HMAC adds a constant overhead.
  714. * We're ultimately only interested in differences so this becomes
  715. * blocks = (payload_len + 29)/128
  716. * for SHA384/SHA512 and
  717. * blocks = (payload_len + 21)/64
  718. * otherwise.
  719. */
  720. digest_pad = block_size == 64 ? 21 : 29;
  721. blocks_orig = (orig_len + digest_pad)/block_size;
  722. blocks_data = (data_len + digest_pad)/block_size;
  723. /* MAC enough blocks to make up the difference between the original
  724. * and actual lengths plus one extra block to ensure this is never a
  725. * no op. The "data" pointer should always have enough space to
  726. * perform this operation as it is large enough for a maximum
  727. * length TLS buffer.
  728. */
  729. EVP_DigestSignUpdate(mac_ctx, data,
  730. (blocks_orig - blocks_data + 1) * block_size);
  731. }
  732. #endif