diff --git a/src/libstrongswan/chunk.c b/src/libstrongswan/chunk.c index d70e1723f..9134b5af9 100644 --- a/src/libstrongswan/chunk.c +++ b/src/libstrongswan/chunk.c @@ -28,6 +28,7 @@ #include #include +#include /** * Empty chunk. @@ -257,6 +258,27 @@ void chunk_free(chunk_t *chunk) chunk->len = 0; } +/** + * Described in header. + */ +void chunk_free_randomized(chunk_t *chunk) +{ + if (chunk->ptr) + { + if (chunk->len > 0) + { + randomizer_t *randomizer = randomizer_create(); + + randomizer->get_pseudo_random_bytes(randomizer, + chunk->len, chunk->ptr); + randomizer->destroy(randomizer); + }; + free(chunk->ptr); + chunk->ptr = NULL; + } + chunk->len = 0; +} + /** * Described in header. */ diff --git a/src/libstrongswan/chunk.h b/src/libstrongswan/chunk.h index a13ccfc22..70dc2ce44 100644 --- a/src/libstrongswan/chunk.h +++ b/src/libstrongswan/chunk.h @@ -88,6 +88,11 @@ bool chunk_write(chunk_t chunk, const char *path, const char *label, mode_t mask */ void chunk_free(chunk_t *chunk); +/** + * Overwrite the contents of a chunk with pseudo-random bytes and free them + */ +void chunk_free_randomized(chunk_t *chunk); + /** * Initialize a chunk to point to buffer inspectable by sizeof() */