diff options
author | Niels Möller <nisse@lysator.liu.se> | 2019-03-29 07:32:42 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2019-03-29 07:32:42 +0100 |
commit | a7dada790fd758dd2df2d43eff2059960d3397ae (patch) | |
tree | 321b20e9557b306189ebd61783aafebae5f27872 /aes-set-encrypt-key.c | |
parent | b87ec212616765f920000b72d57b7a317e1a0c24 (diff) | |
download | nettle-a7dada790fd758dd2df2d43eff2059960d3397ae.tar.gz |
Redefine struct aes_ctx as a union of key-size specific contexts.aes-struct-layout
Diffstat (limited to 'aes-set-encrypt-key.c')
-rw-r--r-- | aes-set-encrypt-key.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/aes-set-encrypt-key.c b/aes-set-encrypt-key.c index 8de474dc..ed417fcd 100644 --- a/aes-set-encrypt-key.c +++ b/aes-set-encrypt-key.c @@ -36,32 +36,27 @@ # include "config.h" #endif -#include <assert.h> #include <stdlib.h> -#include "aes-internal.h" +#include "aes.h" void aes_set_encrypt_key(struct aes_ctx *ctx, - size_t keysize, const uint8_t *key) + size_t key_size, const uint8_t *key) { - unsigned nk, nr; - - assert(keysize >= AES_MIN_KEY_SIZE); - assert(keysize <= AES_MAX_KEY_SIZE); + switch (key_size) + { + default: abort(); + case AES128_KEY_SIZE: + aes128_set_encrypt_key(&ctx->u.ctx128, key); + break; + case AES192_KEY_SIZE: + aes192_set_encrypt_key(&ctx->u.ctx192, key); + break; + case AES256_KEY_SIZE: + aes256_set_encrypt_key(&ctx->u.ctx256, key); + break; + } - /* Truncate keysizes to the valid key sizes provided by Rijndael */ - if (keysize == AES256_KEY_SIZE) { - nk = 8; - nr = _AES256_ROUNDS; - } else if (keysize >= AES192_KEY_SIZE) { - nk = 6; - nr = _AES192_ROUNDS; - } else { /* must be 16 or more */ - nk = 4; - nr = _AES128_ROUNDS; - } - - ctx->rounds = nr; - _aes_set_key (nr, nk, ctx->keys, key); + ctx->key_size = key_size; } |