Fixed totlen calculation.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 5 Nov 2006 14:45:19 +0000 (14:45 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 5 Nov 2006 14:45:19 +0000 (14:45 +0000)
lib/silccore/silcmessage.c
lib/silccore/tests/test_silcmessage.c

index ff8a8433fe83a7508b11b703eed4df8a67692784..6f6b1a9a3e037afda6a469a78e6186e401ff0244 100644 (file)
@@ -123,6 +123,7 @@ SilcBool silc_message_payload_decrypt(unsigned char *data,
   totlen += 2 + len;
   if (totlen + iv_len + mac_len + 2 > data_len)
     return FALSE;
+  totlen += 2;
   if (totlen >= block_len)
     if (!silc_cipher_decrypt(cipher, data + block_len, data + block_len,
                             (totlen - block_len) + SILC_MESSAGE_PAD(totlen),
index e6feb3aedf2f00def644432cdfc32466f342aaa0..47cdf2495309b99d644fff2b990d8428caeb848a 100644 (file)
@@ -19,7 +19,7 @@ int main(int argc, char **argv)
   unsigned char *data, tmp[1023];
   SilcUInt32 data_len;
   SilcUInt16 flags;
-  int i;
+  int i, n;
   SilcMessageSignedPayload sig;
 
   if (argc > 1 && !strcmp(argv[1], "-d")) {
@@ -98,11 +98,12 @@ int main(int argc, char **argv)
   silc_message_payload_free(message);
 
   /* Simple private message */
-  SILC_LOG_DEBUG(("Encoding private message len %d (static key)", 10));
+  n = 10;
+  SILC_LOG_DEBUG(("Encoding private message len %d (static key)", n));
   buf = silc_message_payload_encode(SILC_MESSAGE_FLAG_ACTION |
                                    SILC_MESSAGE_FLAG_UTF8 |
                                    SILC_MESSAGE_FLAG_ACK,
-                                   msg, 10, TRUE, TRUE,
+                                   msg, n, TRUE, TRUE,
                                    key, hmac, rng, NULL, NULL, NULL, buf);
   if (!buf)
     goto err;
@@ -123,18 +124,19 @@ int main(int argc, char **argv)
     goto err;
   data = silc_message_get_data(message, &data_len);
   SILC_LOG_HEXDUMP(("Data"), data, data_len);
-  if (data_len != 10 || memcmp(data, msg, 10))
+  if (data_len != n || memcmp(data, msg, n))
     goto err;
   SILC_LOG_HEXDUMP(("MAC"), silc_message_get_mac(message),
                   silc_hmac_len(hmac));
   silc_message_payload_free(message);
 
   /* Simple private message */
-  SILC_LOG_DEBUG(("Encoding private message len %d (static key)", 1));
+  n = 1;
+  SILC_LOG_DEBUG(("Encoding private message len %d (static key)", n));
   buf = silc_message_payload_encode(SILC_MESSAGE_FLAG_ACTION |
                                    SILC_MESSAGE_FLAG_UTF8 |
                                    SILC_MESSAGE_FLAG_ACK,
-                                   msg, 1, TRUE, TRUE,
+                                   msg, n, TRUE, TRUE,
                                    key, hmac, rng, NULL, NULL, NULL, buf);
   if (!buf)
     goto err;
@@ -155,7 +157,7 @@ int main(int argc, char **argv)
     goto err;
   data = silc_message_get_data(message, &data_len);
   SILC_LOG_HEXDUMP(("Data"), data, data_len);
-  if (data_len != 1 || memcmp(data, msg, 1))
+  if (data_len != n || memcmp(data, msg, n))
     goto err;
   SILC_LOG_HEXDUMP(("MAC"), silc_message_get_mac(message),
                   silc_hmac_len(hmac));