From fff0366bbaa925498bd29897f0e3c69aa482021a Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 18 Jun 2014 16:21:25 +0200
Subject: [PATCH] Add ctr_drbg_free()
---
include/polarssl/ctr_drbg.h | 7 +++++++
library/ctr_drbg.c | 14 ++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/include/polarssl/ctr_drbg.h b/include/polarssl/ctr_drbg.h
index 4b5a444a56..bebbfe9311 100644
--- a/include/polarssl/ctr_drbg.h
+++ b/include/polarssl/ctr_drbg.h
@@ -130,6 +130,13 @@ int ctr_drbg_init( ctr_drbg_context *ctx,
const unsigned char *custom,
size_t len );
+/**
+ * \brief Clear CTR_CRBG context data
+ *
+ * \param ctx CTR_DRBG context to clear
+ */
+void ctr_drbg_free( ctr_drbg_context *ctx );
+
/**
* \brief Enable / disable prediction resistance (Default: Off)
*
diff --git a/library/ctr_drbg.c b/library/ctr_drbg.c
index 249b840695..96ee4f1625 100644
--- a/library/ctr_drbg.c
+++ b/library/ctr_drbg.c
@@ -48,6 +48,11 @@
#define polarssl_printf printf
#endif
+/* 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;
+}
+
/*
* Non-public function wrapped by ctr_crbg_init(). Necessary to allow NIST
* tests to succeed (which require known length fixed entropy)
@@ -95,6 +100,15 @@ int ctr_drbg_init( ctr_drbg_context *ctx,
CTR_DRBG_ENTROPY_LEN ) );
}
+void ctr_drbg_free( ctr_drbg_context *ctx )
+{
+ if( ctx == NULL )
+ return;
+
+ aes_free( &ctx->aes_ctx );
+ polarssl_zeroize( ctx, sizeof( ctr_drbg_context ) );
+}
+
void ctr_drbg_set_prediction_resistance( ctr_drbg_context *ctx, int resistance )
{
ctx->prediction_resistance = resistance;