summaryrefslogtreecommitdiffstats
path: root/ssl/s3_cbc.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2013-02-01 09:55:43 +0100
committerDr. Stephen Henson <steve@openssl.org>2013-02-06 14:19:09 +0000
commit6b2a843970387ca07c505696129e80d439b1e5f8 (patch)
treee080ca159573cf09eab15d678674457e7cf5f1b9 /ssl/s3_cbc.c
parent6b1f7beeee7edd0613a1913c08b4f101c7ea7af7 (diff)
ssl/s3_cbc.c: uint64_t portability fix.
Break dependency on uint64_t. It's possible to declare bits as unsigned int, because TLS packets are limited in size and 32-bit value can't overflow. (cherry picked from commit cab13fc8473856a43556d41d8dac5605f4ba1f91)
Diffstat (limited to 'ssl/s3_cbc.c')
-rw-r--r--ssl/s3_cbc.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/ssl/s3_cbc.c b/ssl/s3_cbc.c
index 58da501270..694bf374d2 100644
--- a/ssl/s3_cbc.c
+++ b/ssl/s3_cbc.c
@@ -53,8 +53,6 @@
*
*/
-#include <stdint.h>
-
#include "ssl_locl.h"
#include <openssl/md5.h>
@@ -424,7 +422,7 @@ void ssl3_cbc_digest_record(
unsigned sslv3_pad_length = 40, header_length, variance_blocks,
len, max_mac_bytes, num_blocks,
num_starting_blocks, k, mac_end_offset, c, index_a, index_b;
- uint64_t bits;
+ unsigned int bits; /* at most 18 bits */
unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES];
/* hmac_pad is the masked HMAC key. */
unsigned char hmac_pad[MAX_HASH_BLOCK_SIZE];
@@ -584,14 +582,11 @@ void ssl3_cbc_digest_record(
md_transform(md_state, hmac_pad);
}
- j = 0;
- if (md_length_size == 16)
- {
- memset(length_bytes, 0, 8);
- j = 8;
- }
- for (i = 0; i < 8; i++)
- length_bytes[i+j] = bits >> (8*(7-i));
+ memset(length_bytes,0,md_length_size-4);
+ length_bytes[md_length_size-4] = (unsigned char)(bits>>24);
+ length_bytes[md_length_size-3] = (unsigned char)(bits>>16);
+ length_bytes[md_length_size-2] = (unsigned char)(bits>>8);
+ length_bytes[md_length_size-1] = (unsigned char)bits;
if (k > 0)
{