Fix AES CBC mode EVP_CIPHER structures: the IV length is always
[openssl.git] / crypto / evp / e_aes.c
index 79fc9c3ea8802f2efb244c440e655e2a666c9675..51a51a7bbe03e251b87f18e216204e9372e6cb5f 100644 (file)
@@ -53,6 +53,7 @@
 #include <openssl/err.h>
 #include <string.h>
 #include <assert.h>
+#include <openssl/rijndael.h>
 
 static int aes_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
                                        const unsigned char *iv, int enc);
@@ -70,8 +71,7 @@ static const EVP_CIPHER name##_cipher_st = \
        aes_init, \
        ciph_func, \
        NULL, \
-       sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+ \
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rijndael)), \
+       sizeof(RIJNDAEL_KEY), \
        EVP_CIPHER_set_asn1_iv, \
        EVP_CIPHER_get_asn1_iv, \
        NULL, \
@@ -87,13 +87,13 @@ IMPLEMENT_AES_CIPHER(aes_192_ecb, aes_ecb, 24, 0, EVP_CIPH_ECB_MODE)
 IMPLEMENT_AES_CIPHER(aes_256_ecb, aes_ecb, 32, 0, EVP_CIPH_ECB_MODE)
 
 IMPLEMENT_AES_CIPHER(aes_128_cbc, aes_cbc, 16, 16, EVP_CIPH_CBC_MODE)
-IMPLEMENT_AES_CIPHER(aes_192_cbc, aes_cbc, 24, 24, EVP_CIPH_CBC_MODE)
-IMPLEMENT_AES_CIPHER(aes_256_cbc, aes_cbc, 32, 32, EVP_CIPH_CBC_MODE)
+IMPLEMENT_AES_CIPHER(aes_192_cbc, aes_cbc, 24, 16, EVP_CIPH_CBC_MODE)
+IMPLEMENT_AES_CIPHER(aes_256_cbc, aes_cbc, 32, 16, EVP_CIPH_CBC_MODE)
 
 static int aes_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
                   const unsigned char *iv, int enc)
        {
-       RIJNDAEL_KEY *k=&ctx->c.rijndael;
+       RIJNDAEL_KEY *k=ctx->cipher_data;
        if (enc) 
                k->rounds = rijndaelKeySetupEnc(k->rd_key, key, ctx->key_len * 8);
        else
@@ -105,7 +105,7 @@ static int aes_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
 static int aes_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out,
                         const unsigned char *in, unsigned int inl)
        {
-       RIJNDAEL_KEY *k=&ctx->c.rijndael;
+       RIJNDAEL_KEY *k=ctx->cipher_data;
        while(inl > 0)
                {
                if(ctx->encrypt)
@@ -126,7 +126,7 @@ static int aes_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out,
        {
        int n;
        unsigned char tmp[16];
-       RIJNDAEL_KEY *k=&ctx->c.rijndael;
+       RIJNDAEL_KEY *k=ctx->cipher_data;
        while(inl > 0)
                {
                if(ctx->encrypt)