diff options
Diffstat (limited to 'src/crypto/gcm.c')
-rw-r--r-- | src/crypto/gcm.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/crypto/gcm.c b/src/crypto/gcm.c index c21aad14c..a32890d59 100644 --- a/src/crypto/gcm.c +++ b/src/crypto/gcm.c @@ -469,13 +469,15 @@ int gcm_setkey ( struct gcm_context *context, const void *key, size_t keylen, * @v ivlen Initialisation vector length */ void gcm_setiv ( struct gcm_context *context, const void *iv, size_t ivlen ) { - union gcm_block *check = ( ( void * ) context ); - /* Sanity checks */ - build_assert ( &context->hash == check ); - build_assert ( &context->len == check + 1 ); - build_assert ( &context->ctr == check + 2 ); - build_assert ( &context->key == check + 3 ); + /* Sanity check: ensure that memset()s will clear expected state */ + build_assert ( &context->hash < &context->ctr ); + build_assert ( &context->len < &context->ctr ); + build_assert ( &context->ctr < &context->key ); + build_assert ( ( ( void * ) &context->raw_cipher ) > + ( ( void * ) &context->key ) ); + build_assert ( ( ( void * ) context->raw_ctx ) > + ( ( void * ) &context->key ) ); /* Reset non-key state */ memset ( context, 0, offsetof ( typeof ( *context ), key ) ); |