http://code.google.com/p/selene-tls/source/detail?r=279a09341148
Modified:
/lib/parser/handshake_messages/client_key_exchange.c
=======================================
--- /lib/parser/handshake_messages/client_key_exchange.c Sun Aug 14
00:05:56 2011
+++ /lib/parser/handshake_messages/client_key_exchange.c Sun Aug 21
15:53:27 2011
@@ -24,6 +24,7 @@
{
sln_bucket_t *b = NULL;
size_t len = 0;
+ size_t dlen = 0;
size_t off = 0;
/* message type size */
@@ -33,16 +34,23 @@
len += 3;
/* pre master key size */
+ len += 2;
len += cke->pre_master_secret_length;
sln_bucket_create_empty(s->alloc, &b, len);
+ dlen = len - 4;
+
b->data[0] = SLN_HS_MT_CLIENT_KEY_EXCHANGE;
- b->data[1] = cke->pre_master_secret_length >> 16;
- b->data[2] = cke->pre_master_secret_length >> 8;
- b->data[3] = cke->pre_master_secret_length;
+ b->data[1] = dlen >> 16;
+ b->data[2] = dlen >> 8;
+ b->data[3] = dlen;
off = 4;
+ b->data[off] = cke->pre_master_secret_length >> 8;
+ b->data[off+1] = cke->pre_master_secret_length;
+ off += 2;
+
memcpy(b->data + off, cke->pre_master_secret,
cke->pre_master_secret_length);
off += cke->pre_master_secret_length;