Major restructuring of the internals of SILC Cipher API
[crypto.git] / lib / silccrypt / blowfish.c
index 355d64a87f5b2911d72e7c8455188bd750411711..862f1c2015f0ac980b90998d542bbaf92a1bdf44 100644 (file)
  *
  */
 
-#include "silc.h"
+#include "silccrypto.h"
 #include "blowfish_internal.h"
 #include "blowfish.h"
 
-/* 
+/*
  * SILC Crypto API for Blowfish
  */
 
 /* Sets the key for the cipher. */
 
-SILC_CIPHER_API_SET_KEY(blowfish)
+SILC_CIPHER_API_SET_KEY(blowfish_cbc)
 {
   blowfish_set_key((BlowfishContext *)context, (unsigned char *)key, keylen);
   return TRUE;
 }
 
-/* Sets the string as a new key for the cipher. The string is first
-   hashed and then used as a new key. */
+/* Sets IV for the cipher. */
+
+SILC_CIPHER_API_SET_IV(blowfish_cbc)
+{
+
+}
+
+/* Initialize */
 
-SILC_CIPHER_API_SET_KEY_WITH_STRING(blowfish)
+SILC_CIPHER_API_INIT(blowfish_cbc)
 {
-  return 1;
+  return silc_calloc(1, sizeof(BlowfishContext));
 }
 
-/* Returns the size of the cipher context. */
+/* Unnitialize */
 
-SILC_CIPHER_API_CONTEXT_LEN(blowfish)
+SILC_CIPHER_API_UNINIT(blowfish_cbc)
 {
-  return sizeof(BlowfishContext);
+  BlowfishContext *b = context;
+  memset(b, 0, sizeof(*b));
+  silc_free(b);
 }
 
 /* Encrypts with the cipher in CBC mode. Source and destination buffers
    maybe one and same. */
 
-SILC_CIPHER_API_ENCRYPT_CBC(blowfish)
+SILC_CIPHER_API_ENCRYPT(blowfish_cbc)
 {
   SilcUInt32 tiv[4];
   int i;
@@ -92,7 +100,7 @@ SILC_CIPHER_API_ENCRYPT_CBC(blowfish)
 /* Decrypts with the cipher in CBC mode. Source and destination buffers
    maybe one and same. */
 
-SILC_CIPHER_API_DECRYPT_CBC(blowfish)
+SILC_CIPHER_API_DECRYPT(blowfish_cbc)
 {
   SilcUInt32 tmp[4], tmp2[4], tiv[4];
   int i;
@@ -108,9 +116,9 @@ SILC_CIPHER_API_DECRYPT_CBC(blowfish)
     blowfish_decrypt((BlowfishContext *)context, tmp, tmp2, 16);
     SILC_CBC_DEC_POST(tmp2, dst, src, tmp, tiv);
   }
-  
+
   SILC_CBC_PUT_IV(tiv, iv);
-  
+
   return TRUE;
 }
 
@@ -383,7 +391,7 @@ static u32 bf_sbox[256 * 4] =
     0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
 };
 
-/* 
+/*
  * Round loop unrolling macros, S is a pointer to a S-Box array
  * organized in 4 SilcUInt32s at a row.
  */
@@ -400,7 +408,7 @@ static u32 bf_sbox[256 * 4] =
 
 /*
  * The blowfish encipher, processes 64-bit blocks.
- * NOTE: This function MUSTN'T respect endianess 
+ * NOTE: This function MUSTN'T respect endianess
  */
 
 int blowfish_encrypt(BlowfishContext *ctx,
@@ -526,7 +534,7 @@ int blowfish_set_key(BlowfishContext *ctx,
     for (i = 0; i < 16 + 2; i += 2)
     {
         blowfish_encrypt(ctx, data, data, 8);
-        
+
         P[i] = data[0];
         P[i + 1] = data[1];
     }