diff --git a/library/ccm.c b/library/ccm.c
index 54d051e..750ec9e 100644
--- a/library/ccm.c
+++ b/library/ccm.c
@@ -77,8 +77,6 @@
 {
     int ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
     const mbedtls_cipher_info_t *cipher_info;
-    volatile const unsigned char *key_dup = key;
-    volatile unsigned int keybits_dup = keybits;
 
     CCM_VALIDATE_RET( ctx != NULL );
     CCM_VALIDATE_RET( key != NULL );
@@ -101,14 +99,7 @@
         return( ret );
     }
 
-    if( keybits_dup == keybits && key_dup == key )
-    {
-        return( ret );
-    }
-
-    // In case of a FI - clear the context
-    mbedtls_cipher_free( &ctx->cipher_ctx );
-    return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
+    return( ret );
 }
 
 /*
@@ -174,15 +165,6 @@
     unsigned char ctr[16];
     const unsigned char *src;
     unsigned char *dst;
-    volatile size_t length_dup = length;
-    volatile const unsigned char *iv_dup = iv;
-    volatile size_t iv_len_dup = iv_len;
-    volatile const unsigned char *add_dup = add;
-    volatile size_t add_len_dup = add_len;
-    volatile const unsigned char *input_dup = input;
-    volatile unsigned char *output_dup = output;
-    volatile unsigned char *tag_dup = tag;
-    volatile size_t tag_len_dup = tag_len;
 
     /*
      * Check length requirements: SP800-38C A.1
@@ -334,16 +316,6 @@
     CTR_CRYPT( y, y, 16 );
     mbedtls_platform_memcpy( tag, y, tag_len );
 
-    if( length_dup != length || iv_dup != iv || iv_len_dup != iv_len ||
-        add_dup != add || add_len_dup != add_len || input_dup != input ||
-        output_dup != output || tag_dup != tag || tag_len_dup != tag_len)
-    {
-
-        // In case of a FI - clear the output
-        mbedtls_platform_memset( output, 0, length );
-        return MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
-    }
-
     return( ret );
 }
 
@@ -398,15 +370,6 @@
     unsigned char check_tag[16];
     unsigned char i;
     int diff;
-    volatile size_t length_dup = length;
-    volatile const unsigned char *iv_dup = iv;
-    volatile size_t iv_len_dup = iv_len;
-    volatile const unsigned char *add_dup = add;
-    volatile size_t add_len_dup = add_len;
-    volatile const unsigned char *input_dup = input;
-    volatile unsigned char *output_dup = output;
-    volatile const unsigned char *tag_dup = tag;
-    volatile size_t tag_len_dup = tag_len;
 
     CCM_VALIDATE_RET( ctx != NULL );
     CCM_VALIDATE_RET( iv != NULL );
@@ -432,13 +395,6 @@
         return( MBEDTLS_ERR_CCM_AUTH_FAILED );
     }
 
-    if( length_dup != length || iv_dup != iv || iv_len_dup != iv_len ||
-        add_dup != add || add_len_dup != add_len || input_dup != input ||
-        output_dup != output || tag_dup != tag || tag_len_dup != tag_len)
-    {
-        return MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
-    }
-
     return( ret );
 }
 
