Introduce polarssl_zeroize() instead of memset() for zeroization
diff --git a/library/des.c b/library/des.c
index 0cf4b3d..37fd345 100644
--- a/library/des.c
+++ b/library/des.c
@@ -37,6 +37,11 @@
#if !defined(POLARSSL_DES_ALT)
+/* Implementation that should never be optimized out by the compiler */
+static void polarssl_zeroize( void *v, size_t n ) {
+ volatile unsigned char *p = v; while( n-- ) *p++ = 0;
+}
+
/*
* 32-bit integer manipulation macros (big endian)
*/
@@ -508,7 +513,7 @@
uint32_t sk[96];
des3_set2key( ctx->sk, sk, key );
- memset( sk, 0, sizeof( sk ) );
+ polarssl_zeroize( sk, sizeof( sk ) );
return( 0 );
}
@@ -521,7 +526,7 @@
uint32_t sk[96];
des3_set2key( sk, ctx->sk, key );
- memset( sk, 0, sizeof( sk ) );
+ polarssl_zeroize( sk, sizeof( sk ) );
return( 0 );
}
@@ -557,7 +562,7 @@
uint32_t sk[96];
des3_set3key( ctx->sk, sk, key );
- memset( sk, 0, sizeof( sk ) );
+ polarssl_zeroize( sk, sizeof( sk ) );
return( 0 );
}
@@ -570,7 +575,7 @@
uint32_t sk[96];
des3_set3key( sk, ctx->sk, key );
- memset( sk, 0, sizeof( sk ) );
+ polarssl_zeroize( sk, sizeof( sk ) );
return( 0 );
}