diff --git a/src/tss2-esys/esys_crypto.c b/src/tss2-esys/esys_crypto.c
index d88a65c..1928160 100644
--- a/src/tss2-esys/esys_crypto.c
+++ b/src/tss2-esys/esys_crypto.c
@@ -1097,13 +1097,12 @@
                               TPM2_ALG_ID tpm_sym_alg,
                               TPMI_AES_KEY_BITS key_bits,
                               TPM2_ALG_ID tpm_mode,
-                              size_t blk_len, size_t iv_len, uint8_t * iv)
+                              size_t iv_len, uint8_t * iv)
 {
 
     LOGBLOB_TRACE(key, (key_bits + 7) / 8, "IESYS AES key");
     LOGBLOB_TRACE(iv, iv_len, "IESYS AES iv");
     int algo, mode, len;
-    //int blk_len = 16;
     size_t key_len = 0;
     gcry_error_t err;
     switch (tpm_sym_alg) {
@@ -1148,7 +1147,7 @@
         return TSS2_ESYS_RC_GENERAL_FAILURE;
     }
     if (iv_len != 0) {
-        err = gcry_cipher_setiv(*cipher_hd, &iv[0], blk_len);
+        err = gcry_cipher_setiv(*cipher_hd, &iv[0], iv_len);
         if (err != GPG_ERR_NO_ERROR) {
             LOG_ERROR("Function gcry_cipher_setiv");
             return TSS2_ESYS_RC_GENERAL_FAILURE;
@@ -1170,14 +1169,19 @@
                                  size_t blk_len,
                                  uint8_t * buffer,
                                  size_t buffer_size,
-                                 uint8_t * iv, size_t iv_len)
+                                 uint8_t * iv)
 {
     gcry_cipher_hd_t cipher_hd;
-    //int blk_len = 16;
     gcry_error_t err;
     TSS2_RC r;
+
+    if (key == NULL || buffer == NULL) {
+        LOG_ERROR("Bad reference");
+        return TSS2_ESYS_RC_BAD_REFERENCE;
+    }
+
     r = iesys_cryptogcry_sym_aes_init(&cipher_hd, key, tpm_sym_alg,
-                                      key_bits, tpm_mode, blk_len, iv_len, iv);
+                                      key_bits, tpm_mode, blk_len, iv);
     if (r != TSS2_RC_SUCCESS)
         return r;
     LOGBLOB_TRACE(buffer, buffer_size, "IESYS AES input");
@@ -1197,8 +1201,9 @@
                                  TPMI_AES_KEY_BITS key_bits,
                                  TPM2_ALG_ID tpm_mode,
                                  size_t blk_len,
-                                 uint8_t * buffer, size_t buffer_size,
-                                 uint8_t * iv, size_t iv_len)
+                                 uint8_t * buffer,
+                                 size_t buffer_size,
+                                 uint8_t * iv)
 {
     gcry_cipher_hd_t cipher_hd;
     gcry_error_t err;
@@ -1215,7 +1220,7 @@
     }
 
     r = iesys_cryptogcry_sym_aes_init(&cipher_hd, key, tpm_sym_alg,
-                                      key_bits, tpm_mode, blk_len, iv_len, iv);
+                                      key_bits, tpm_mode, blk_len, iv);
     if (r != TSS2_RC_SUCCESS)
         return r;
     err = gcry_cipher_decrypt(cipher_hd, buffer, buffer_size, NULL, 0);
diff --git a/src/tss2-esys/esys_crypto.h b/src/tss2-esys/esys_crypto.h
index aca1ade..8ce5893 100644
--- a/src/tss2-esys/esys_crypto.h
+++ b/src/tss2-esys/esys_crypto.h
@@ -208,8 +208,7 @@
     size_t blk_len,
     uint8_t *dst,
     size_t dst_size,
-    uint8_t *iv,
-    size_t iv_len);
+    uint8_t *iv);
 
 TSS2_RC iesys_cryptogcry_sym_aes_decrypt(
     uint8_t *key,
@@ -219,8 +218,7 @@
     size_t blk_len,
     uint8_t *dst,
     size_t dst_size,
-    uint8_t *iv,
-    size_t iv_len);
+    uint8_t *iv);
 
 TSS2_RC iesys_xor_parameter_obfuscation(
     TPM2_ALG_ID hash_alg,
diff --git a/src/tss2-esys/esys_iutil.c b/src/tss2-esys/esys_iutil.c
index d31b2ec..a437c32 100644
--- a/src/tss2-esys/esys_iutil.c
+++ b/src/tss2-esys/esys_iutil.c
@@ -556,8 +556,7 @@
                                                  symDef->mode.aes,
                                                  AES_BLOCK_SIZE_IN_BYTES,
                                                  &encrypt_buffer[0], paramSize,
-                                                 &symKey[aes_off],
-                                                 AES_BLOCK_SIZE_IN_BYTES);
+                                                 &symKey[aes_off]);
                 return_if_error(r, "AES encryption not possible");
                 r = Tss2_Sys_SetDecryptParam(esys_context->sys, paramSize,
                                              &encrypt_buffer[0]);
@@ -640,8 +639,7 @@
                                      symDef->mode.aes,
                                      AES_BLOCK_SIZE_IN_BYTES,
                                      (uint8_t *) & rpBuffer[2], p2BSize,
-                                     &symKey[aes_off],
-                                     AES_BLOCK_SIZE_IN_BYTES);
+                                     &symKey[aes_off]);
         return_if_error(r, "Decryption error");
 
     } else if (symDef->algorithm == TPM2_ALG_XOR) {
