Merged from silc_1_0_branch.
[silc.git] / lib / silccrypt / silccipher.c
index b233e3f9485d3668fd1cb87769f01f5a623729a4..53c938b69a17e475d44ba9f7392bf993911a99ea 100644 (file)
@@ -315,7 +315,13 @@ bool silc_cipher_encrypt(SilcCipher cipher, const unsigned char *src,
                         unsigned char *dst, SilcUInt32 len, 
                         unsigned char *iv)
 {
-  return cipher->cipher->encrypt(cipher->context, src, dst, len, iv);
+#ifdef SILC_DEBUG
+  assert((len & (cipher->cipher->block_len - 1)) == 0);
+#endif
+  if (len & (cipher->cipher->block_len - 1))
+    return FALSE;
+  return cipher->cipher->encrypt(cipher->context, src, dst, len,
+                                iv ? iv : cipher->iv);
 }
 
 /* Decrypts */
@@ -324,7 +330,13 @@ bool silc_cipher_decrypt(SilcCipher cipher, const unsigned char *src,
                         unsigned char *dst, SilcUInt32 len, 
                         unsigned char *iv)
 {
-  return cipher->cipher->decrypt(cipher->context, src, dst, len, iv);
+#ifdef SILC_DEBUG
+  assert((len & (cipher->cipher->block_len - 1)) == 0);
+#endif
+  if (len & (cipher->cipher->block_len - 1))
+    return FALSE;
+  return cipher->cipher->decrypt(cipher->context, src, dst, len,
+                                iv ? iv : cipher->iv);
 }
 
 /* Sets the key for the cipher */