size_t-fication of message digest APIs. We should size_t-fy more APIs...
[openssl.git] / crypto / evp / evp_locl.h
index 62fbeba699d5532f9c7eda15783e787d8daf3535..2204e345ad1af7e869541b232bd670a945b8f761 100644 (file)
 /* Wrapper functions for each cipher mode */
 
 #define BLOCK_CIPHER_ecb_loop() \
-       unsigned int i; \
-       if(inl < 8) return 1;\
-       inl -= 8; \
-       for(i=0; i <= inl; i+=8) \
+       unsigned int i, bl; \
+       bl = ctx->cipher->block_size;\
+       if(inl < bl) return 1;\
+       inl -= bl; \
+       for(i=0; i <= inl; i+=bl) \
 
 #define BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \
 static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
@@ -74,10 +75,10 @@ static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
        return 1;\
 }
 
-#define BLOCK_CIPHER_func_ofb(cname, cprefix, kstruct, ksched) \
+#define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \
 static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 {\
-       cprefix##_ofb64_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num);\
+       cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num);\
        return 1;\
 }
 
@@ -88,18 +89,18 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
        return 1;\
 }
 
-#define BLOCK_CIPHER_func_cfb(cname, cprefix, kstruct, ksched) \
-static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
+#define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
+static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 {\
-       cprefix##_cfb64_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
+       cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
        return 1;\
 }
 
-#define BLOCK_CIPHER_all_funcs(cname, cprefix, kstruct, ksched) \
+#define BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \
        BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \
-       BLOCK_CIPHER_func_cfb(cname, cprefix, kstruct, ksched) \
+       BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
        BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \
-       BLOCK_CIPHER_func_ofb(cname, cprefix, kstruct, ksched)
+       BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched)
 
 #define BLOCK_CIPHER_def1(cname, nmode, mode, MODE, kstruct, nid, block_size, \
                          key_len, iv_len, flags, init_key, cleanup, \
@@ -123,17 +124,19 @@ const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
 BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \
                  iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
 
-#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, block_size, key_len, \
-                            iv_len, flags, init_key, cleanup, set_asn1, \
-                            get_asn1, ctrl) \
-BLOCK_CIPHER_def1(cname, cfb64, cfb, CFB, kstruct, nid, block_size, key_len, \
-                 iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
+#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \
+                            iv_len, cbits, flags, init_key, cleanup, \
+                            set_asn1, get_asn1, ctrl) \
+BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \
+                 key_len, iv_len, flags, init_key, cleanup, set_asn1, \
+                 get_asn1, ctrl)
 
-#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, block_size, key_len, \
-                            iv_len, flags, init_key, cleanup, set_asn1, \
-                            get_asn1, ctrl) \
-BLOCK_CIPHER_def1(cname, ofb64, ofb, OFB, kstruct, nid, block_size, key_len, \
-                 iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
+#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, \
+                            iv_len, cbits, flags, init_key, cleanup, \
+                            set_asn1, get_asn1, ctrl) \
+BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, 1, \
+                 key_len, iv_len, flags, init_key, cleanup, set_asn1, \
+                 get_asn1, ctrl)
 
 #define BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, \
                             iv_len, flags, init_key, cleanup, set_asn1, \
@@ -142,14 +145,14 @@ BLOCK_CIPHER_def1(cname, ecb, ecb, ECB, kstruct, nid, block_size, key_len, \
                  iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
 
 #define BLOCK_CIPHER_defs(cname, kstruct, \
-                         nid, block_size, key_len, iv_len, flags, \
+                         nid, block_size, key_len, iv_len, cbits, flags, \
                          init_key, cleanup, set_asn1, get_asn1, ctrl) \
 BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
                     init_key, cleanup, set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def_cfb(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
-                    init_key, cleanup, set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def_ofb(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
-                    init_key, cleanup, set_asn1, get_asn1, ctrl) \
+BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, iv_len, cbits, \
+                    flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \
+BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, iv_len, cbits, \
+                    flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \
 BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
                     init_key, cleanup, set_asn1, get_asn1, ctrl)
 
@@ -213,10 +216,21 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; }
 */
 
 #define IMPLEMENT_BLOCK_CIPHER(cname, ksched, cprefix, kstruct, nid, \
-                              block_size, key_len, iv_len, flags, init_key, \
+                              block_size, key_len, iv_len, cbits, \
+                              flags, init_key, \
                               cleanup, set_asn1, get_asn1, ctrl) \
-       BLOCK_CIPHER_all_funcs(cname, cprefix, kstruct, ksched) \
+       BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \
        BLOCK_CIPHER_defs(cname, kstruct, nid, block_size, key_len, iv_len, \
-                         flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
+                         cbits, flags, init_key, cleanup, set_asn1, \
+                         get_asn1, ctrl)
 
 #define EVP_C_DATA(kstruct, ctx)       ((kstruct *)(ctx)->cipher_data)
+
+#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len) \
+       BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \
+       BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \
+                            NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \
+                            0, cipher##_init_key, NULL, \
+                            EVP_CIPHER_set_asn1_iv, \
+                            EVP_CIPHER_get_asn1_iv, \
+                            NULL)