db6d4e792b95597f197a73ec461678867c95c21f
[openssl.git] / ssl / record / ssl3_record.c
1 /* ssl/record/ssl3_record.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscapes SSL.
8  *
9  * This library is free for commercial and non-commercial use as long as
10  * the following conditions are aheared to.  The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  *
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  *
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in the
30  *    documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  *    must display the following acknowledgement:
33  *    "This product includes cryptographic software written by
34  *     Eric Young (eay@cryptsoft.com)"
35  *    The word 'cryptographic' can be left out if the rouines from the library
36  *    being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from
38  *    the apps directory (application code) you must include an acknowledgement:
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  *
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  * The licence and distribution terms for any publically available version or
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 /* ====================================================================
59  * Copyright (c) 1998-2015 The OpenSSL Project.  All rights reserved.
60  *
61  * Redistribution and use in source and binary forms, with or without
62  * modification, are permitted provided that the following conditions
63  * are met:
64  *
65  * 1. Redistributions of source code must retain the above copyright
66  *    notice, this list of conditions and the following disclaimer.
67  *
68  * 2. Redistributions in binary form must reproduce the above copyright
69  *    notice, this list of conditions and the following disclaimer in
70  *    the documentation and/or other materials provided with the
71  *    distribution.
72  *
73  * 3. All advertising materials mentioning features or use of this
74  *    software must display the following acknowledgment:
75  *    "This product includes software developed by the OpenSSL Project
76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77  *
78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79  *    endorse or promote products derived from this software without
80  *    prior written permission. For written permission, please contact
81  *    openssl-core@openssl.org.
82  *
83  * 5. Products derived from this software may not be called "OpenSSL"
84  *    nor may "OpenSSL" appear in their names without prior written
85  *    permission of the OpenSSL Project.
86  *
87  * 6. Redistributions of any form whatsoever must retain the following
88  *    acknowledgment:
89  *    "This product includes software developed by the OpenSSL Project
90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91  *
92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103  * OF THE POSSIBILITY OF SUCH DAMAGE.
104  * ====================================================================
105  *
106  * This product includes cryptographic software written by Eric Young
107  * (eay@cryptsoft.com).  This product includes software written by Tim
108  * Hudson (tjh@cryptsoft.com).
109  *
110  */
111
112 #include "../ssl_locl.h"
113 #include "../../crypto/constant_time_locl.h"
114 #include <openssl/rand.h>
115 #include "record_locl.h"
116
117 static const unsigned char ssl3_pad_1[48] = {
118     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
119     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
120     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
121     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
122     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
123     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
124 };
125
126 static const unsigned char ssl3_pad_2[48] = {
127     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
128     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
129     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
130     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
131     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
132     0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c
133 };
134
135 void SSL3_RECORD_clear(SSL3_RECORD *r)
136 {
137     memset(r->seq_num, 0, sizeof(r->seq_num));
138 }
139
140 void SSL3_RECORD_release(SSL3_RECORD *r)
141 {
142     OPENSSL_free(r->comp);
143     r->comp = NULL;
144 }
145
146 int SSL3_RECORD_setup(SSL3_RECORD *r)
147 {
148     if (r->comp == NULL)
149         r->comp = (unsigned char *)
150             OPENSSL_malloc(SSL3_RT_MAX_ENCRYPTED_LENGTH);
151     if (r->comp == NULL)
152         return 0;
153     return 1;
154 }
155
156 void SSL3_RECORD_set_seq_num(SSL3_RECORD *r, const unsigned char *seq_num)
157 {
158     memcpy(r->seq_num, seq_num, SEQ_NUM_SIZE);
159 }
160
161 /*
162  * MAX_EMPTY_RECORDS defines the number of consecutive, empty records that
163  * will be processed per call to ssl3_get_record. Without this limit an
164  * attacker could send empty records at a faster rate than we can process and
165  * cause ssl3_get_record to loop forever.
166  */
167 #define MAX_EMPTY_RECORDS 32
168
169 /*-
170  * Call this to get a new input record.
171  * It will return <= 0 if more data is needed, normally due to an error
172  * or non-blocking IO.
173  * When it finishes, one packet has been decoded and can be found in
174  * ssl->s3->rrec.type    - is the type of record
175  * ssl->s3->rrec.data,   - data
176  * ssl->s3->rrec.length, - number of bytes
177  */
178 /* used only by ssl3_read_bytes */
179 int ssl3_get_record(SSL *s)
180 {
181     int ssl_major, ssl_minor, al;
182     int enc_err, n, i, ret = -1;
183     SSL3_RECORD *rr;
184     SSL_SESSION *sess;
185     unsigned char *p;
186     unsigned char md[EVP_MAX_MD_SIZE];
187     short version;
188     unsigned mac_size;
189     size_t extra;
190     unsigned empty_record_count = 0;
191
192     rr = RECORD_LAYER_get_rrec(&s->rlayer);
193     sess = s->session;
194
195     if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
196         extra = SSL3_RT_MAX_EXTRA;
197     else
198         extra = 0;
199     if (extra && !s->s3->init_extra) {
200         /*
201          * An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER set after
202          * ssl3_setup_buffers() was done
203          */
204         SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR);
205         return -1;
206     }
207
208  again:
209     /* check if we have the header */
210     if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) ||
211         (RECORD_LAYER_get_packet_length(&s->rlayer) < SSL3_RT_HEADER_LENGTH)) {
212         n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH,
213             SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0);
214         if (n <= 0)
215             return (n);         /* error or non-blocking */
216         RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY);
217
218         p = RECORD_LAYER_get_packet(&s->rlayer);
219         if (s->msg_callback)
220             s->msg_callback(0, 0, SSL3_RT_HEADER, p, 5, s,
221                             s->msg_callback_arg);
222
223         /* Pull apart the header into the SSL3_RECORD */
224         rr->type = *(p++);
225         ssl_major = *(p++);
226         ssl_minor = *(p++);
227         version = (ssl_major << 8) | ssl_minor;
228         n2s(p, rr->length);
229
230         /* Lets check version */
231         if (!s->first_packet) {
232             if (version != s->version) {
233                 SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER);
234                 if ((s->version & 0xFF00) == (version & 0xFF00)
235                     && !s->enc_write_ctx && !s->write_hash)
236                     /*
237                      * Send back error using their minor version number :-)
238                      */
239                     s->version = (unsigned short)version;
240                 al = SSL_AD_PROTOCOL_VERSION;
241                 goto f_err;
242             }
243         }
244
245         if ((version >> 8) != SSL3_VERSION_MAJOR) {
246             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER);
247             goto err;
248         }
249
250         if (rr->length >
251                 SSL3_BUFFER_get_len(&s->rlayer.rbuf)
252                 - SSL3_RT_HEADER_LENGTH) {
253             al = SSL_AD_RECORD_OVERFLOW;
254             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_PACKET_LENGTH_TOO_LONG);
255             goto f_err;
256         }
257
258         /* now s->rlayer.rstate == SSL_ST_READ_BODY */
259     }
260
261     /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */
262
263     if (rr->length >
264         RECORD_LAYER_get_packet_length(&s->rlayer) - SSL3_RT_HEADER_LENGTH) {
265         /* now s->packet_length == SSL3_RT_HEADER_LENGTH */
266         i = rr->length;
267         n = ssl3_read_n(s, i, i, 1);
268         if (n <= 0)
269             return (n);         /* error or non-blocking io */
270         /*
271          * now n == rr->length, and s->packet_length == SSL3_RT_HEADER_LENGTH
272          * + rr->length
273          */
274     }
275
276     /* set state for later operations */
277     RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER);
278
279     /*
280      * At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length,
281      * and we have that many bytes in s->packet
282      */
283     rr->input = &(RECORD_LAYER_get_packet(&s->rlayer)[SSL3_RT_HEADER_LENGTH]);
284
285     /*
286      * ok, we can now read from 's->packet' data into 'rr' rr->input points
287      * at rr->length bytes, which need to be copied into rr->data by either
288      * the decryption or by the decompression When the data is 'copied' into
289      * the rr->data buffer, rr->input will be pointed at the new buffer
290      */
291
292     /*
293      * We now have - encrypted [ MAC [ compressed [ plain ] ] ] rr->length
294      * bytes of encrypted compressed stuff.
295      */
296
297     /* check is not needed I believe */
298     if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH + extra) {
299         al = SSL_AD_RECORD_OVERFLOW;
300         SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
301         goto f_err;
302     }
303
304     /* decrypt in place in 'rr->input' */
305     rr->data = rr->input;
306     rr->orig_len = rr->length;
307     /*
308      * If in encrypt-then-mac mode calculate mac from encrypted record. All
309      * the details below are public so no timing details can leak.
310      */
311     if (SSL_USE_ETM(s) && s->read_hash) {
312         unsigned char *mac;
313         mac_size = EVP_MD_CTX_size(s->read_hash);
314         OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE);
315         if (rr->length < mac_size) {
316             al = SSL_AD_DECODE_ERROR;
317             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT);
318             goto f_err;
319         }
320         rr->length -= mac_size;
321         mac = rr->data + rr->length;
322         i = s->method->ssl3_enc->mac(s, md, 0 /* not send */ );
323         if (i < 0 || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) {
324             al = SSL_AD_BAD_RECORD_MAC;
325             SSLerr(SSL_F_SSL3_GET_RECORD,
326                    SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
327             goto f_err;
328         }
329     }
330
331     enc_err = s->method->ssl3_enc->enc(s, 0);
332     /*-
333      * enc_err is:
334      *    0: (in non-constant time) if the record is publically invalid.
335      *    1: if the padding is valid
336      *    -1: if the padding is invalid
337      */
338     if (enc_err == 0) {
339         al = SSL_AD_DECRYPTION_FAILED;
340         SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG);
341         goto f_err;
342     }
343 #ifdef TLS_DEBUG
344     printf("dec %d\n", rr->length);
345     {
346         unsigned int z;
347         for (z = 0; z < rr->length; z++)
348             printf("%02X%c", rr->data[z], ((z + 1) % 16) ? ' ' : '\n');
349     }
350     printf("\n");
351 #endif
352
353     /* r->length is now the compressed data plus mac */
354     if ((sess != NULL) &&
355         (s->enc_read_ctx != NULL) &&
356         (EVP_MD_CTX_md(s->read_hash) != NULL) && !SSL_USE_ETM(s)) {
357         /* s->read_hash != NULL => mac_size != -1 */
358         unsigned char *mac = NULL;
359         unsigned char mac_tmp[EVP_MAX_MD_SIZE];
360         mac_size = EVP_MD_CTX_size(s->read_hash);
361         OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE);
362
363         /*
364          * orig_len is the length of the record before any padding was
365          * removed. This is public information, as is the MAC in use,
366          * therefore we can safely process the record in a different amount
367          * of time if it's too short to possibly contain a MAC.
368          */
369         if (rr->orig_len < mac_size ||
370             /* CBC records must have a padding length byte too. */
371             (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
372              rr->orig_len < mac_size + 1)) {
373             al = SSL_AD_DECODE_ERROR;
374             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT);
375             goto f_err;
376         }
377
378         if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) {
379             /*
380              * We update the length so that the TLS header bytes can be
381              * constructed correctly but we need to extract the MAC in
382              * constant time from within the record, without leaking the
383              * contents of the padding bytes.
384              */
385             mac = mac_tmp;
386             ssl3_cbc_copy_mac(mac_tmp, rr, mac_size);
387             rr->length -= mac_size;
388         } else {
389             /*
390              * In this case there's no padding, so |rec->orig_len| equals
391              * |rec->length| and we checked that there's enough bytes for
392              * |mac_size| above.
393              */
394             rr->length -= mac_size;
395             mac = &rr->data[rr->length];
396         }
397
398         i = s->method->ssl3_enc->mac(s, md, 0 /* not send */ );
399         if (i < 0 || mac == NULL
400             || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
401             enc_err = -1;
402         if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra + mac_size)
403             enc_err = -1;
404     }
405
406     if (enc_err < 0) {
407         /*
408          * A separate 'decryption_failed' alert was introduced with TLS 1.0,
409          * SSL 3.0 only has 'bad_record_mac'.  But unless a decryption
410          * failure is directly visible from the ciphertext anyway, we should
411          * not reveal which kind of error occurred -- this might become
412          * visible to an attacker (e.g. via a logfile)
413          */
414         al = SSL_AD_BAD_RECORD_MAC;
415         SSLerr(SSL_F_SSL3_GET_RECORD,
416                SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
417         goto f_err;
418     }
419
420     /* r->length is now just compressed */
421     if (s->expand != NULL) {
422         if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra) {
423             al = SSL_AD_RECORD_OVERFLOW;
424             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_COMPRESSED_LENGTH_TOO_LONG);
425             goto f_err;
426         }
427         if (!ssl3_do_uncompress(s)) {
428             al = SSL_AD_DECOMPRESSION_FAILURE;
429             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BAD_DECOMPRESSION);
430             goto f_err;
431         }
432     }
433
434     if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH + extra) {
435         al = SSL_AD_RECORD_OVERFLOW;
436         SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DATA_LENGTH_TOO_LONG);
437         goto f_err;
438     }
439
440     rr->off = 0;
441     /*-
442      * So at this point the following is true
443      * ssl->s3->rrec.type   is the type of record
444      * ssl->s3->rrec.length == number of bytes in record
445      * ssl->s3->rrec.off    == offset to first valid byte
446      * ssl->s3->rrec.data   == where to take bytes from, increment
447      *                         after use :-).
448      */
449
450     /* we have pulled in a full packet so zero things */
451     RECORD_LAYER_reset_packet_length(&s->rlayer);
452
453     /* just read a 0 length packet */
454     if (rr->length == 0) {
455         empty_record_count++;
456         if (empty_record_count > MAX_EMPTY_RECORDS) {
457             al = SSL_AD_UNEXPECTED_MESSAGE;
458             SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_RECORD_TOO_SMALL);
459             goto f_err;
460         }
461         goto again;
462     }
463
464     return (1);
465
466  f_err:
467     ssl3_send_alert(s, SSL3_AL_FATAL, al);
468  err:
469     return (ret);
470 }
471
472 int ssl3_do_uncompress(SSL *ssl)
473 {
474 #ifndef OPENSSL_NO_COMP
475     int i;
476     SSL3_RECORD *rr;
477
478     rr = RECORD_LAYER_get_rrec(&ssl->rlayer);
479     i = COMP_expand_block(ssl->expand, rr->comp,
480                           SSL3_RT_MAX_PLAIN_LENGTH, rr->data,
481                           (int)rr->length);
482     if (i < 0)
483         return (0);
484     else
485         rr->length = i;
486     rr->data = rr->comp;
487 #endif
488     return (1);
489 }
490
491 int ssl3_do_compress(SSL *ssl)
492 {
493 #ifndef OPENSSL_NO_COMP
494     int i;
495     SSL3_RECORD *wr;
496
497     wr = RECORD_LAYER_get_wrec(&ssl->rlayer);
498     i = COMP_compress_block(ssl->compress, wr->data,
499                             SSL3_RT_MAX_COMPRESSED_LENGTH,
500                             wr->input, (int)wr->length);
501     if (i < 0)
502         return (0);
503     else
504         wr->length = i;
505
506     wr->input = wr->data;
507 #endif
508     return (1);
509 }
510
511 /*-
512  * ssl3_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively.
513  *
514  * Returns:
515  *   0: (in non-constant time) if the record is publically invalid (i.e. too
516  *       short etc).
517  *   1: if the record's padding is valid / the encryption was successful.
518  *   -1: if the record's padding is invalid or, if sending, an internal error
519  *       occurred.
520  */
521 int ssl3_enc(SSL *s, int send)
522 {
523     SSL3_RECORD *rec;
524     EVP_CIPHER_CTX *ds;
525     unsigned long l;
526     int bs, i, mac_size = 0;
527     const EVP_CIPHER *enc;
528
529     if (send) {
530         ds = s->enc_write_ctx;
531         rec = RECORD_LAYER_get_wrec(&s->rlayer);
532         if (s->enc_write_ctx == NULL)
533             enc = NULL;
534         else
535             enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx);
536     } else {
537         ds = s->enc_read_ctx;
538         rec = RECORD_LAYER_get_rrec(&s->rlayer);
539         if (s->enc_read_ctx == NULL)
540             enc = NULL;
541         else
542             enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
543     }
544
545     if ((s->session == NULL) || (ds == NULL) || (enc == NULL)) {
546         memmove(rec->data, rec->input, rec->length);
547         rec->input = rec->data;
548     } else {
549         l = rec->length;
550         bs = EVP_CIPHER_block_size(ds->cipher);
551
552         /* COMPRESS */
553
554         if ((bs != 1) && send) {
555             i = bs - ((int)l % bs);
556
557             /* we need to add 'i-1' padding bytes */
558             l += i;
559             /*
560              * the last of these zero bytes will be overwritten with the
561              * padding length.
562              */
563             memset(&rec->input[rec->length], 0, i);
564             rec->length += i;
565             rec->input[l - 1] = (i - 1);
566         }
567
568         if (!send) {
569             if (l == 0 || l % bs != 0)
570                 return 0;
571             /* otherwise, rec->length >= bs */
572         }
573
574         if (EVP_Cipher(ds, rec->data, rec->input, l) < 1)
575             return -1;
576
577         if (EVP_MD_CTX_md(s->read_hash) != NULL)
578             mac_size = EVP_MD_CTX_size(s->read_hash);
579         if ((bs != 1) && !send)
580             return ssl3_cbc_remove_padding(s, rec, bs, mac_size);
581     }
582     return (1);
583 }
584
585 /*-
586  * tls1_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively.
587  *
588  * Returns:
589  *   0: (in non-constant time) if the record is publically invalid (i.e. too
590  *       short etc).
591  *   1: if the record's padding is valid / the encryption was successful.
592  *   -1: if the record's padding/AEAD-authenticator is invalid or, if sending,
593  *       an internal error occurred.
594  */
595 int tls1_enc(SSL *s, int send)
596 {
597     SSL3_RECORD *rec;
598     EVP_CIPHER_CTX *ds;
599     unsigned long l;
600     int bs, i, j, k, pad = 0, ret, mac_size = 0;
601     const EVP_CIPHER *enc;
602
603     if (send) {
604         if (EVP_MD_CTX_md(s->write_hash)) {
605             int n = EVP_MD_CTX_size(s->write_hash);
606             OPENSSL_assert(n >= 0);
607         }
608         ds = s->enc_write_ctx;
609         rec = RECORD_LAYER_get_wrec(&s->rlayer);
610         if (s->enc_write_ctx == NULL)
611             enc = NULL;
612         else {
613             int ivlen;
614             enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx);
615             /* For TLSv1.1 and later explicit IV */
616             if (SSL_USE_EXPLICIT_IV(s)
617                 && EVP_CIPHER_mode(enc) == EVP_CIPH_CBC_MODE)
618                 ivlen = EVP_CIPHER_iv_length(enc);
619             else
620                 ivlen = 0;
621             if (ivlen > 1) {
622                 if (rec->data != rec->input)
623                     /*
624                      * we can't write into the input stream: Can this ever
625                      * happen?? (steve)
626                      */
627                     fprintf(stderr,
628                             "%s:%d: rec->data != rec->input\n",
629                             __FILE__, __LINE__);
630                 else if (RAND_bytes(rec->input, ivlen) <= 0)
631                     return -1;
632             }
633         }
634     } else {
635         if (EVP_MD_CTX_md(s->read_hash)) {
636             int n = EVP_MD_CTX_size(s->read_hash);
637             OPENSSL_assert(n >= 0);
638         }
639         ds = s->enc_read_ctx;
640         rec = RECORD_LAYER_get_rrec(&s->rlayer);
641         if (s->enc_read_ctx == NULL)
642             enc = NULL;
643         else
644             enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
645     }
646
647     if ((s->session == NULL) || (ds == NULL) || (enc == NULL)) {
648         memmove(rec->data, rec->input, rec->length);
649         rec->input = rec->data;
650         ret = 1;
651     } else {
652         l = rec->length;
653         bs = EVP_CIPHER_block_size(ds->cipher);
654
655         if (EVP_CIPHER_flags(ds->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) {
656             unsigned char buf[EVP_AEAD_TLS1_AAD_LEN], *seq;
657
658             seq = send ? RECORD_LAYER_get_write_sequence(&s->rlayer)
659                 : RECORD_LAYER_get_read_sequence(&s->rlayer);
660
661             if (SSL_IS_DTLS(s)) {
662                 unsigned char dtlsseq[9], *p = dtlsseq;
663
664                 s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&s->rlayer) :
665                     DTLS_RECORD_LAYER_get_r_epoch(&s->rlayer), p);
666                 memcpy(p, &seq[2], 6);
667                 memcpy(buf, dtlsseq, 8);
668             } else {
669                 memcpy(buf, seq, 8);
670                 for (i = 7; i >= 0; i--) { /* increment */
671                     ++seq[i];
672                     if (seq[i] != 0)
673                         break;
674                 }
675             }
676
677             buf[8] = rec->type;
678             buf[9] = (unsigned char)(s->version >> 8);
679             buf[10] = (unsigned char)(s->version);
680             buf[11] = rec->length >> 8;
681             buf[12] = rec->length & 0xff;
682             pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD,
683                                       EVP_AEAD_TLS1_AAD_LEN, buf);
684             if (pad <= 0)
685                 return -1;
686             if (send) {
687                 l += pad;
688                 rec->length += pad;
689             }
690         } else if ((bs != 1) && send) {
691             i = bs - ((int)l % bs);
692
693             /* Add weird padding of upto 256 bytes */
694
695             /* we need to add 'i' padding bytes of value j */
696             j = i - 1;
697             if (s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) {
698                 if (s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG)
699                     j++;
700             }
701             for (k = (int)l; k < (int)(l + i); k++)
702                 rec->input[k] = j;
703             l += i;
704             rec->length += i;
705         }
706
707         if (!send) {
708             if (l == 0 || l % bs != 0)
709                 return 0;
710         }
711
712         i = EVP_Cipher(ds, rec->data, rec->input, l);
713         if ((EVP_CIPHER_flags(ds->cipher) & EVP_CIPH_FLAG_CUSTOM_CIPHER)
714             ? (i < 0)
715             : (i == 0))
716             return -1;          /* AEAD can fail to verify MAC */
717         if (EVP_CIPHER_mode(enc) == EVP_CIPH_GCM_MODE && !send) {
718             rec->data += EVP_GCM_TLS_EXPLICIT_IV_LEN;
719             rec->input += EVP_GCM_TLS_EXPLICIT_IV_LEN;
720             rec->length -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
721         }
722
723         ret = 1;
724         if (!SSL_USE_ETM(s) && EVP_MD_CTX_md(s->read_hash) != NULL)
725             mac_size = EVP_MD_CTX_size(s->read_hash);
726         if ((bs != 1) && !send)
727             ret = tls1_cbc_remove_padding(s, rec, bs, mac_size);
728         if (pad && !send)
729             rec->length -= pad;
730     }
731     return ret;
732 }
733
734 int n_ssl3_mac(SSL *ssl, unsigned char *md, int send)
735 {
736     SSL3_RECORD *rec;
737     unsigned char *mac_sec, *seq;
738     EVP_MD_CTX md_ctx;
739     const EVP_MD_CTX *hash;
740     unsigned char *p, rec_char;
741     size_t md_size;
742     int npad;
743     int t;
744
745     if (send) {
746         rec = RECORD_LAYER_get_wrec(&ssl->rlayer);
747         mac_sec = &(ssl->s3->write_mac_secret[0]);
748         seq = RECORD_LAYER_get_write_sequence(&ssl->rlayer);
749         hash = ssl->write_hash;
750     } else {
751         rec = RECORD_LAYER_get_rrec(&ssl->rlayer);
752         mac_sec = &(ssl->s3->read_mac_secret[0]);
753         seq = RECORD_LAYER_get_read_sequence(&ssl->rlayer);
754         hash = ssl->read_hash;
755     }
756
757     t = EVP_MD_CTX_size(hash);
758     if (t < 0)
759         return -1;
760     md_size = t;
761     npad = (48 / md_size) * md_size;
762
763     if (!send &&
764         EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
765         ssl3_cbc_record_digest_supported(hash)) {
766         /*
767          * This is a CBC-encrypted record. We must avoid leaking any
768          * timing-side channel information about how many blocks of data we
769          * are hashing because that gives an attacker a timing-oracle.
770          */
771
772         /*-
773          * npad is, at most, 48 bytes and that's with MD5:
774          *   16 + 48 + 8 (sequence bytes) + 1 + 2 = 75.
775          *
776          * With SHA-1 (the largest hash speced for SSLv3) the hash size
777          * goes up 4, but npad goes down by 8, resulting in a smaller
778          * total size.
779          */
780         unsigned char header[75];
781         unsigned j = 0;
782         memcpy(header + j, mac_sec, md_size);
783         j += md_size;
784         memcpy(header + j, ssl3_pad_1, npad);
785         j += npad;
786         memcpy(header + j, seq, 8);
787         j += 8;
788         header[j++] = rec->type;
789         header[j++] = rec->length >> 8;
790         header[j++] = rec->length & 0xff;
791
792         /* Final param == is SSLv3 */
793         ssl3_cbc_digest_record(hash,
794                                md, &md_size,
795                                header, rec->input,
796                                rec->length + md_size, rec->orig_len,
797                                mac_sec, md_size, 1);
798     } else {
799         unsigned int md_size_u;
800         /* Chop the digest off the end :-) */
801         EVP_MD_CTX_init(&md_ctx);
802
803         EVP_MD_CTX_copy_ex(&md_ctx, hash);
804         EVP_DigestUpdate(&md_ctx, mac_sec, md_size);
805         EVP_DigestUpdate(&md_ctx, ssl3_pad_1, npad);
806         EVP_DigestUpdate(&md_ctx, seq, 8);
807         rec_char = rec->type;
808         EVP_DigestUpdate(&md_ctx, &rec_char, 1);
809         p = md;
810         s2n(rec->length, p);
811         EVP_DigestUpdate(&md_ctx, md, 2);
812         EVP_DigestUpdate(&md_ctx, rec->input, rec->length);
813         EVP_DigestFinal_ex(&md_ctx, md, NULL);
814
815         EVP_MD_CTX_copy_ex(&md_ctx, hash);
816         EVP_DigestUpdate(&md_ctx, mac_sec, md_size);
817         EVP_DigestUpdate(&md_ctx, ssl3_pad_2, npad);
818         EVP_DigestUpdate(&md_ctx, md, md_size);
819         EVP_DigestFinal_ex(&md_ctx, md, &md_size_u);
820         md_size = md_size_u;
821
822         EVP_MD_CTX_cleanup(&md_ctx);
823     }
824
825     ssl3_record_sequence_update(seq);
826     return (md_size);
827 }
828
829 int tls1_mac(SSL *ssl, unsigned char *md, int send)
830 {
831     SSL3_RECORD *rec;
832     unsigned char *seq;
833     EVP_MD_CTX *hash;
834     size_t md_size;
835     int i;
836     EVP_MD_CTX hmac, *mac_ctx;
837     unsigned char header[13];
838     int stream_mac = (send ? (ssl->mac_flags & SSL_MAC_FLAG_WRITE_MAC_STREAM)
839                       : (ssl->mac_flags & SSL_MAC_FLAG_READ_MAC_STREAM));
840     int t;
841
842     if (send) {
843         rec = RECORD_LAYER_get_wrec(&ssl->rlayer);
844         seq = RECORD_LAYER_get_write_sequence(&ssl->rlayer);
845         hash = ssl->write_hash;
846     } else {
847         rec = RECORD_LAYER_get_rrec(&ssl->rlayer);
848         seq = RECORD_LAYER_get_read_sequence(&ssl->rlayer);
849         hash = ssl->read_hash;
850     }
851
852     t = EVP_MD_CTX_size(hash);
853     OPENSSL_assert(t >= 0);
854     md_size = t;
855
856     /* I should fix this up TLS TLS TLS TLS TLS XXXXXXXX */
857     if (stream_mac) {
858         mac_ctx = hash;
859     } else {
860         if (!EVP_MD_CTX_copy(&hmac, hash))
861             return -1;
862         mac_ctx = &hmac;
863     }
864
865     if (SSL_IS_DTLS(ssl)) {
866         unsigned char dtlsseq[8], *p = dtlsseq;
867
868         s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&ssl->rlayer) :
869             DTLS_RECORD_LAYER_get_r_epoch(&ssl->rlayer), p);
870         memcpy(p, &seq[2], 6);
871
872         memcpy(header, dtlsseq, 8);
873     } else
874         memcpy(header, seq, 8);
875
876     header[8] = rec->type;
877     header[9] = (unsigned char)(ssl->version >> 8);
878     header[10] = (unsigned char)(ssl->version);
879     header[11] = (rec->length) >> 8;
880     header[12] = (rec->length) & 0xff;
881
882     if (!send && !SSL_USE_ETM(ssl) &&
883         EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
884         ssl3_cbc_record_digest_supported(mac_ctx)) {
885         /*
886          * This is a CBC-encrypted record. We must avoid leaking any
887          * timing-side channel information about how many blocks of data we
888          * are hashing because that gives an attacker a timing-oracle.
889          */
890         /* Final param == not SSLv3 */
891         ssl3_cbc_digest_record(mac_ctx,
892                                md, &md_size,
893                                header, rec->input,
894                                rec->length + md_size, rec->orig_len,
895                                ssl->s3->read_mac_secret,
896                                ssl->s3->read_mac_secret_size, 0);
897     } else {
898         EVP_DigestSignUpdate(mac_ctx, header, sizeof(header));
899         EVP_DigestSignUpdate(mac_ctx, rec->input, rec->length);
900         t = EVP_DigestSignFinal(mac_ctx, md, &md_size);
901         OPENSSL_assert(t > 0);
902         if (!send && !SSL_USE_ETM(ssl) && FIPS_mode())
903             tls_fips_digest_extra(ssl->enc_read_ctx,
904                                   mac_ctx, rec->input,
905                                   rec->length, rec->orig_len);
906     }
907
908     if (!stream_mac)
909         EVP_MD_CTX_cleanup(&hmac);
910 #ifdef TLS_DEBUG
911     fprintf(stderr, "seq=");
912     {
913         int z;
914         for (z = 0; z < 8; z++)
915             fprintf(stderr, "%02X ", seq[z]);
916         fprintf(stderr, "\n");
917     }
918     fprintf(stderr, "rec=");
919     {
920         unsigned int z;
921         for (z = 0; z < rec->length; z++)
922             fprintf(stderr, "%02X ", rec->data[z]);
923         fprintf(stderr, "\n");
924     }
925 #endif
926
927     if (!SSL_IS_DTLS(ssl)) {
928         for (i = 7; i >= 0; i--) {
929             ++seq[i];
930             if (seq[i] != 0)
931                 break;
932         }
933     }
934 #ifdef TLS_DEBUG
935     {
936         unsigned int z;
937         for (z = 0; z < md_size; z++)
938             fprintf(stderr, "%02X ", md[z]);
939         fprintf(stderr, "\n");
940     }
941 #endif
942     return (md_size);
943 }
944
945 /*-
946  * ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC
947  * record in |rec| by updating |rec->length| in constant time.
948  *
949  * block_size: the block size of the cipher used to encrypt the record.
950  * returns:
951  *   0: (in non-constant time) if the record is publicly invalid.
952  *   1: if the padding was valid
953  *  -1: otherwise.
954  */
955 int ssl3_cbc_remove_padding(const SSL *s,
956                             SSL3_RECORD *rec,
957                             unsigned block_size, unsigned mac_size)
958 {
959     unsigned padding_length, good;
960     const unsigned overhead = 1 /* padding length byte */  + mac_size;
961
962     /*
963      * These lengths are all public so we can test them in non-constant time.
964      */
965     if (overhead > rec->length)
966         return 0;
967
968     padding_length = rec->data[rec->length - 1];
969     good = constant_time_ge(rec->length, padding_length + overhead);
970     /* SSLv3 requires that the padding is minimal. */
971     good &= constant_time_ge(block_size, padding_length + 1);
972     rec->length -= good & (padding_length + 1);
973     return constant_time_select_int(good, 1, -1);
974 }
975
976 /*-
977  * tls1_cbc_remove_padding removes the CBC padding from the decrypted, TLS, CBC
978  * record in |rec| in constant time and returns 1 if the padding is valid and
979  * -1 otherwise. It also removes any explicit IV from the start of the record
980  * without leaking any timing about whether there was enough space after the
981  * padding was removed.
982  *
983  * block_size: the block size of the cipher used to encrypt the record.
984  * returns:
985  *   0: (in non-constant time) if the record is publicly invalid.
986  *   1: if the padding was valid
987  *  -1: otherwise.
988  */
989 int tls1_cbc_remove_padding(const SSL *s,
990                             SSL3_RECORD *rec,
991                             unsigned block_size, unsigned mac_size)
992 {
993     unsigned padding_length, good, to_check, i;
994     const unsigned overhead = 1 /* padding length byte */  + mac_size;
995     /* Check if version requires explicit IV */
996     if (SSL_USE_EXPLICIT_IV(s)) {
997         /*
998          * These lengths are all public so we can test them in non-constant
999          * time.
1000          */
1001         if (overhead + block_size > rec->length)
1002             return 0;
1003         /* We can now safely skip explicit IV */
1004         rec->data += block_size;
1005         rec->input += block_size;
1006         rec->length -= block_size;
1007         rec->orig_len -= block_size;
1008     } else if (overhead > rec->length)
1009         return 0;
1010
1011     padding_length = rec->data[rec->length - 1];
1012
1013     /*
1014      * NB: if compression is in operation the first packet may not be of even
1015      * length so the padding bug check cannot be performed. This bug
1016      * workaround has been around since SSLeay so hopefully it is either
1017      * fixed now or no buggy implementation supports compression [steve]
1018      */
1019     if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) {
1020         /* First packet is even in size, so check */
1021         if ((memcmp(RECORD_LAYER_get_read_sequence(&s->rlayer),
1022                 "\0\0\0\0\0\0\0\0", 8) == 0) &&
1023             !(padding_length & 1)) {
1024             s->s3->flags |= TLS1_FLAGS_TLS_PADDING_BUG;
1025         }
1026         if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && padding_length > 0) {
1027             padding_length--;
1028         }
1029     }
1030
1031     if (EVP_CIPHER_flags(s->enc_read_ctx->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) {
1032         /* padding is already verified */
1033         rec->length -= padding_length + 1;
1034         return 1;
1035     }
1036
1037     good = constant_time_ge(rec->length, overhead + padding_length);
1038     /*
1039      * The padding consists of a length byte at the end of the record and
1040      * then that many bytes of padding, all with the same value as the length
1041      * byte. Thus, with the length byte included, there are i+1 bytes of
1042      * padding. We can't check just |padding_length+1| bytes because that
1043      * leaks decrypted information. Therefore we always have to check the
1044      * maximum amount of padding possible. (Again, the length of the record
1045      * is public information so we can use it.)
1046      */
1047     to_check = 255;             /* maximum amount of padding. */
1048     if (to_check > rec->length - 1)
1049         to_check = rec->length - 1;
1050
1051     for (i = 0; i < to_check; i++) {
1052         unsigned char mask = constant_time_ge_8(padding_length, i);
1053         unsigned char b = rec->data[rec->length - 1 - i];
1054         /*
1055          * The final |padding_length+1| bytes should all have the value
1056          * |padding_length|. Therefore the XOR should be zero.
1057          */
1058         good &= ~(mask & (padding_length ^ b));
1059     }
1060
1061     /*
1062      * If any of the final |padding_length+1| bytes had the wrong value, one
1063      * or more of the lower eight bits of |good| will be cleared.
1064      */
1065     good = constant_time_eq(0xff, good & 0xff);
1066     rec->length -= good & (padding_length + 1);
1067
1068     return constant_time_select_int(good, 1, -1);
1069 }
1070
1071 /*-
1072  * ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in
1073  * constant time (independent of the concrete value of rec->length, which may
1074  * vary within a 256-byte window).
1075  *
1076  * ssl3_cbc_remove_padding or tls1_cbc_remove_padding must be called prior to
1077  * this function.
1078  *
1079  * On entry:
1080  *   rec->orig_len >= md_size
1081  *   md_size <= EVP_MAX_MD_SIZE
1082  *
1083  * If CBC_MAC_ROTATE_IN_PLACE is defined then the rotation is performed with
1084  * variable accesses in a 64-byte-aligned buffer. Assuming that this fits into
1085  * a single or pair of cache-lines, then the variable memory accesses don't
1086  * actually affect the timing. CPUs with smaller cache-lines [if any] are
1087  * not multi-core and are not considered vulnerable to cache-timing attacks.
1088  */
1089 #define CBC_MAC_ROTATE_IN_PLACE
1090
1091 void ssl3_cbc_copy_mac(unsigned char *out,
1092                        const SSL3_RECORD *rec, unsigned md_size)
1093 {
1094 #if defined(CBC_MAC_ROTATE_IN_PLACE)
1095     unsigned char rotated_mac_buf[64 + EVP_MAX_MD_SIZE];
1096     unsigned char *rotated_mac;
1097 #else
1098     unsigned char rotated_mac[EVP_MAX_MD_SIZE];
1099 #endif
1100
1101     /*
1102      * mac_end is the index of |rec->data| just after the end of the MAC.
1103      */
1104     unsigned mac_end = rec->length;
1105     unsigned mac_start = mac_end - md_size;
1106     /*
1107      * scan_start contains the number of bytes that we can ignore because the
1108      * MAC's position can only vary by 255 bytes.
1109      */
1110     unsigned scan_start = 0;
1111     unsigned i, j;
1112     unsigned div_spoiler;
1113     unsigned rotate_offset;
1114
1115     OPENSSL_assert(rec->orig_len >= md_size);
1116     OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE);
1117
1118 #if defined(CBC_MAC_ROTATE_IN_PLACE)
1119     rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf) & 63);
1120 #endif
1121
1122     /* This information is public so it's safe to branch based on it. */
1123     if (rec->orig_len > md_size + 255 + 1)
1124         scan_start = rec->orig_len - (md_size + 255 + 1);
1125     /*
1126      * div_spoiler contains a multiple of md_size that is used to cause the
1127      * modulo operation to be constant time. Without this, the time varies
1128      * based on the amount of padding when running on Intel chips at least.
1129      * The aim of right-shifting md_size is so that the compiler doesn't
1130      * figure out that it can remove div_spoiler as that would require it to
1131      * prove that md_size is always even, which I hope is beyond it.
1132      */
1133     div_spoiler = md_size >> 1;
1134     div_spoiler <<= (sizeof(div_spoiler) - 1) * 8;
1135     rotate_offset = (div_spoiler + mac_start - scan_start) % md_size;
1136
1137     memset(rotated_mac, 0, md_size);
1138     for (i = scan_start, j = 0; i < rec->orig_len; i++) {
1139         unsigned char mac_started = constant_time_ge_8(i, mac_start);
1140         unsigned char mac_ended = constant_time_ge_8(i, mac_end);
1141         unsigned char b = rec->data[i];
1142         rotated_mac[j++] |= b & mac_started & ~mac_ended;
1143         j &= constant_time_lt(j, md_size);
1144     }
1145
1146     /* Now rotate the MAC */
1147 #if defined(CBC_MAC_ROTATE_IN_PLACE)
1148     j = 0;
1149     for (i = 0; i < md_size; i++) {
1150         /* in case cache-line is 32 bytes, touch second line */
1151         ((volatile unsigned char *)rotated_mac)[rotate_offset ^ 32];
1152         out[j++] = rotated_mac[rotate_offset++];
1153         rotate_offset &= constant_time_lt(rotate_offset, md_size);
1154     }
1155 #else
1156     memset(out, 0, md_size);
1157     rotate_offset = md_size - rotate_offset;
1158     rotate_offset &= constant_time_lt(rotate_offset, md_size);
1159     for (i = 0; i < md_size; i++) {
1160         for (j = 0; j < md_size; j++)
1161             out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset);
1162         rotate_offset++;
1163         rotate_offset &= constant_time_lt(rotate_offset, md_size);
1164     }
1165 #endif
1166 }
1167
1168 int dtls1_process_record(SSL *s)
1169 {
1170     int i, al;
1171     int enc_err;
1172     SSL_SESSION *sess;
1173     SSL3_RECORD *rr;
1174     unsigned int mac_size;
1175     unsigned char md[EVP_MAX_MD_SIZE];
1176
1177     rr = RECORD_LAYER_get_rrec(&s->rlayer);
1178     sess = s->session;
1179
1180     /*
1181      * At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length,
1182      * and we have that many bytes in s->packet
1183      */
1184     rr->input = &(RECORD_LAYER_get_packet(&s->rlayer)[DTLS1_RT_HEADER_LENGTH]);
1185
1186     /*
1187      * ok, we can now read from 's->packet' data into 'rr' rr->input points
1188      * at rr->length bytes, which need to be copied into rr->data by either
1189      * the decryption or by the decompression When the data is 'copied' into
1190      * the rr->data buffer, rr->input will be pointed at the new buffer
1191      */
1192
1193     /*
1194      * We now have - encrypted [ MAC [ compressed [ plain ] ] ] rr->length
1195      * bytes of encrypted compressed stuff.
1196      */
1197
1198     /* check is not needed I believe */
1199     if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
1200         al = SSL_AD_RECORD_OVERFLOW;
1201         SSLerr(SSL_F_DTLS1_PROCESS_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
1202         goto f_err;
1203     }
1204
1205     /* decrypt in place in 'rr->input' */
1206     rr->data = rr->input;
1207     rr->orig_len = rr->length;
1208
1209     enc_err = s->method->ssl3_enc->enc(s, 0);
1210     /*-
1211      * enc_err is:
1212      *    0: (in non-constant time) if the record is publically invalid.
1213      *    1: if the padding is valid
1214      *   -1: if the padding is invalid
1215      */
1216     if (enc_err == 0) {
1217         /* For DTLS we simply ignore bad packets. */
1218         rr->length = 0;
1219         RECORD_LAYER_reset_packet_length(&s->rlayer);
1220         goto err;
1221     }
1222 #ifdef TLS_DEBUG
1223     printf("dec %d\n", rr->length);
1224     {
1225         unsigned int z;
1226         for (z = 0; z < rr->length; z++)
1227             printf("%02X%c", rr->data[z], ((z + 1) % 16) ? ' ' : '\n');
1228     }
1229     printf("\n");
1230 #endif
1231
1232     /* r->length is now the compressed data plus mac */
1233     if ((sess != NULL) &&
1234         (s->enc_read_ctx != NULL) && (EVP_MD_CTX_md(s->read_hash) != NULL)) {
1235         /* s->read_hash != NULL => mac_size != -1 */
1236         unsigned char *mac = NULL;
1237         unsigned char mac_tmp[EVP_MAX_MD_SIZE];
1238         mac_size = EVP_MD_CTX_size(s->read_hash);
1239         OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE);
1240
1241         /*
1242          * orig_len is the length of the record before any padding was
1243          * removed. This is public information, as is the MAC in use,
1244          * therefore we can safely process the record in a different amount
1245          * of time if it's too short to possibly contain a MAC.
1246          */
1247         if (rr->orig_len < mac_size ||
1248             /* CBC records must have a padding length byte too. */
1249             (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
1250              rr->orig_len < mac_size + 1)) {
1251             al = SSL_AD_DECODE_ERROR;
1252             SSLerr(SSL_F_DTLS1_PROCESS_RECORD, SSL_R_LENGTH_TOO_SHORT);
1253             goto f_err;
1254         }
1255
1256         if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) {
1257             /*
1258              * We update the length so that the TLS header bytes can be
1259              * constructed correctly but we need to extract the MAC in
1260              * constant time from within the record, without leaking the
1261              * contents of the padding bytes.
1262              */
1263             mac = mac_tmp;
1264             ssl3_cbc_copy_mac(mac_tmp, rr, mac_size);
1265             rr->length -= mac_size;
1266         } else {
1267             /*
1268              * In this case there's no padding, so |rec->orig_len| equals
1269              * |rec->length| and we checked that there's enough bytes for
1270              * |mac_size| above.
1271              */
1272             rr->length -= mac_size;
1273             mac = &rr->data[rr->length];
1274         }
1275
1276         i = s->method->ssl3_enc->mac(s, md, 0 /* not send */ );
1277         if (i < 0 || mac == NULL
1278             || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
1279             enc_err = -1;
1280         if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size)
1281             enc_err = -1;
1282     }
1283
1284     if (enc_err < 0) {
1285         /* decryption failed, silently discard message */
1286         rr->length = 0;
1287         RECORD_LAYER_reset_packet_length(&s->rlayer);
1288         goto err;
1289     }
1290
1291     /* r->length is now just compressed */
1292     if (s->expand != NULL) {
1293         if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) {
1294             al = SSL_AD_RECORD_OVERFLOW;
1295             SSLerr(SSL_F_DTLS1_PROCESS_RECORD,
1296                    SSL_R_COMPRESSED_LENGTH_TOO_LONG);
1297             goto f_err;
1298         }
1299         if (!ssl3_do_uncompress(s)) {
1300             al = SSL_AD_DECOMPRESSION_FAILURE;
1301             SSLerr(SSL_F_DTLS1_PROCESS_RECORD, SSL_R_BAD_DECOMPRESSION);
1302             goto f_err;
1303         }
1304     }
1305
1306     if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH) {
1307         al = SSL_AD_RECORD_OVERFLOW;
1308         SSLerr(SSL_F_DTLS1_PROCESS_RECORD, SSL_R_DATA_LENGTH_TOO_LONG);
1309         goto f_err;
1310     }
1311
1312     rr->off = 0;
1313     /*-
1314      * So at this point the following is true
1315      * ssl->s3->rrec.type   is the type of record
1316      * ssl->s3->rrec.length == number of bytes in record
1317      * ssl->s3->rrec.off    == offset to first valid byte
1318      * ssl->s3->rrec.data   == where to take bytes from, increment
1319      *                         after use :-).
1320      */
1321
1322     /* we have pulled in a full packet so zero things */
1323     RECORD_LAYER_reset_packet_length(&s->rlayer);
1324     return (1);
1325
1326  f_err:
1327     ssl3_send_alert(s, SSL3_AL_FATAL, al);
1328  err:
1329     return (0);
1330 }
1331
1332
1333 /*
1334  * retrieve a buffered record that belongs to the current epoch, ie,
1335  * processed
1336  */
1337 #define dtls1_get_processed_record(s) \
1338                    dtls1_retrieve_buffered_record((s), \
1339                    &(DTLS_RECORD_LAYER_get_processed_rcds(&s->rlayer)))
1340
1341 /*-
1342  * Call this to get a new input record.
1343  * It will return <= 0 if more data is needed, normally due to an error
1344  * or non-blocking IO.
1345  * When it finishes, one packet has been decoded and can be found in
1346  * ssl->s3->rrec.type    - is the type of record
1347  * ssl->s3->rrec.data,   - data
1348  * ssl->s3->rrec.length, - number of bytes
1349  */
1350 /* used only by dtls1_read_bytes */
1351 int dtls1_get_record(SSL *s)
1352 {
1353     int ssl_major, ssl_minor;
1354     int i, n;
1355     SSL3_RECORD *rr;
1356     unsigned char *p = NULL;
1357     unsigned short version;
1358     DTLS1_BITMAP *bitmap;
1359     unsigned int is_next_epoch;
1360
1361     rr = RECORD_LAYER_get_rrec(&s->rlayer);
1362
1363     /*
1364      * The epoch may have changed.  If so, process all the pending records.
1365      * This is a non-blocking operation.
1366      */
1367     if (dtls1_process_buffered_records(s) < 0)
1368         return -1;
1369
1370     /* if we're renegotiating, then there may be buffered records */
1371     if (dtls1_get_processed_record(s))
1372         return 1;
1373
1374     /* get something from the wire */
1375  again:
1376     /* check if we have the header */
1377     if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) ||
1378         (RECORD_LAYER_get_packet_length(&s->rlayer) < DTLS1_RT_HEADER_LENGTH)) {
1379         n = ssl3_read_n(s, DTLS1_RT_HEADER_LENGTH,
1380             SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0);
1381         /* read timeout is handled by dtls1_read_bytes */
1382         if (n <= 0)
1383             return (n);         /* error or non-blocking */
1384
1385         /* this packet contained a partial record, dump it */
1386         if (RECORD_LAYER_get_packet_length(&s->rlayer) != DTLS1_RT_HEADER_LENGTH) {
1387             RECORD_LAYER_reset_packet_length(&s->rlayer);
1388             goto again;
1389         }
1390
1391         RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY);
1392
1393         p = RECORD_LAYER_get_packet(&s->rlayer);
1394
1395         if (s->msg_callback)
1396             s->msg_callback(0, 0, SSL3_RT_HEADER, p, DTLS1_RT_HEADER_LENGTH,
1397                             s, s->msg_callback_arg);
1398
1399         /* Pull apart the header into the DTLS1_RECORD */
1400         rr->type = *(p++);
1401         ssl_major = *(p++);
1402         ssl_minor = *(p++);
1403         version = (ssl_major << 8) | ssl_minor;
1404
1405         /* sequence number is 64 bits, with top 2 bytes = epoch */
1406         n2s(p, rr->epoch);
1407
1408         memcpy(&(RECORD_LAYER_get_read_sequence(&s->rlayer)[2]), p, 6);
1409         p += 6;
1410
1411         n2s(p, rr->length);
1412
1413         /* Lets check version */
1414         if (!s->first_packet) {
1415             if (version != s->version) {
1416                 /* unexpected version, silently discard */
1417                 rr->length = 0;
1418                 RECORD_LAYER_reset_packet_length(&s->rlayer);
1419                 goto again;
1420             }
1421         }
1422
1423         if ((version & 0xff00) != (s->version & 0xff00)) {
1424             /* wrong version, silently discard record */
1425             rr->length = 0;
1426             RECORD_LAYER_reset_packet_length(&s->rlayer);
1427             goto again;
1428         }
1429
1430         if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
1431             /* record too long, silently discard it */
1432             rr->length = 0;
1433             RECORD_LAYER_reset_packet_length(&s->rlayer);
1434             goto again;
1435         }
1436
1437         /* now s->rlayer.rstate == SSL_ST_READ_BODY */
1438     }
1439
1440     /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */
1441
1442     if (rr->length >
1443         RECORD_LAYER_get_packet_length(&s->rlayer) - DTLS1_RT_HEADER_LENGTH) {
1444         /* now s->packet_length == DTLS1_RT_HEADER_LENGTH */
1445         i = rr->length;
1446         n = ssl3_read_n(s, i, i, 1);
1447         /* this packet contained a partial record, dump it */
1448         if (n != i) {
1449             rr->length = 0;
1450             RECORD_LAYER_reset_packet_length(&s->rlayer);
1451             goto again;
1452         }
1453
1454         /*
1455          * now n == rr->length, and s->packet_length ==
1456          * DTLS1_RT_HEADER_LENGTH + rr->length
1457          */
1458     }
1459     /* set state for later operations */
1460     RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER);
1461
1462     /* match epochs.  NULL means the packet is dropped on the floor */
1463     bitmap = dtls1_get_bitmap(s, rr, &is_next_epoch);
1464     if (bitmap == NULL) {
1465         rr->length = 0;
1466         RECORD_LAYER_reset_packet_length(&s->rlayer);   /* dump this record */
1467         goto again;             /* get another record */
1468     }
1469 #ifndef OPENSSL_NO_SCTP
1470     /* Only do replay check if no SCTP bio */
1471     if (!BIO_dgram_is_sctp(SSL_get_rbio(s))) {
1472 #endif
1473         /*
1474          * Check whether this is a repeat, or aged record. Don't check if
1475          * we're listening and this message is a ClientHello. They can look
1476          * as if they're replayed, since they arrive from different
1477          * connections and would be dropped unnecessarily.
1478          */
1479         if (!(s->d1->listen && rr->type == SSL3_RT_HANDSHAKE &&
1480               RECORD_LAYER_get_packet_length(&s->rlayer)
1481                   > DTLS1_RT_HEADER_LENGTH &&
1482               RECORD_LAYER_get_packet(&s->rlayer)[DTLS1_RT_HEADER_LENGTH]
1483                   == SSL3_MT_CLIENT_HELLO) &&
1484             !dtls1_record_replay_check(s, bitmap)) {
1485             rr->length = 0;
1486             RECORD_LAYER_reset_packet_length(&s->rlayer); /* dump this record */
1487             goto again;         /* get another record */
1488         }
1489 #ifndef OPENSSL_NO_SCTP
1490     }
1491 #endif
1492
1493     /* just read a 0 length packet */
1494     if (rr->length == 0)
1495         goto again;
1496
1497     /*
1498      * If this record is from the next epoch (either HM or ALERT), and a
1499      * handshake is currently in progress, buffer it since it cannot be
1500      * processed at this time. However, do not buffer anything while
1501      * listening.
1502      */
1503     if (is_next_epoch) {
1504         if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) {
1505             if (dtls1_buffer_record
1506                 (s, &(DTLS_RECORD_LAYER_get_unprocessed_rcds(&s->rlayer)),
1507                 rr->seq_num) < 0)
1508                 return -1;
1509             /* Mark receipt of record. */
1510             dtls1_record_bitmap_update(s, bitmap);
1511         }
1512         rr->length = 0;
1513         RECORD_LAYER_reset_packet_length(&s->rlayer);
1514         goto again;
1515     }
1516
1517     if (!dtls1_process_record(s)) {
1518         rr->length = 0;
1519         RECORD_LAYER_reset_packet_length(&s->rlayer);   /* dump this record */
1520         goto again;             /* get another record */
1521     }
1522     dtls1_record_bitmap_update(s, bitmap); /* Mark receipt of record. */
1523
1524     return (1);
1525
1526 }
1527