diff options
author | Niels Möller <nisse@lysator.liu.se> | 2013-05-22 20:14:14 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2013-05-22 20:14:14 +0200 |
commit | b27be3a688b814832b965b15680f9ccd053a0753 (patch) | |
tree | 0260c2beb0a3854928b22327ca7a6eaaeb8abea8 /aes-set-encrypt-key.c | |
parent | d6fadad818952700af8460399feb0cd5bad899cc (diff) | |
download | nettle-b27be3a688b814832b965b15680f9ccd053a0753.tar.gz |
New internal functions _aes_set_key and _aes_invert.
Diffstat (limited to 'aes-set-encrypt-key.c')
-rw-r--r-- | aes-set-encrypt-key.c | 37 |
1 files changed, 8 insertions, 29 deletions
diff --git a/aes-set-encrypt-key.c b/aes-set-encrypt-key.c index d96a8ebc..a3f20a13 100644 --- a/aes-set-encrypt-key.c +++ b/aes-set-encrypt-key.c @@ -6,6 +6,7 @@ /* nettle, low-level cryptographics library * * Copyright (C) 2000, 2001, 2002 Rafael R. Sevilla, Niels Möller + * Copyright (C) 2013 Niels Möller * * The nettle library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -32,50 +33,28 @@ #include <assert.h> #include "aes-internal.h" -#include "macros.h" void aes_set_encrypt_key(struct aes_ctx *ctx, size_t keysize, const uint8_t *key) { - static const uint8_t rcon[10] = { - 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36, - }; - unsigned nk, nr, i, lastkey; - uint32_t temp; - const uint8_t *rp; + unsigned nk, nr; assert(keysize >= AES_MIN_KEY_SIZE); assert(keysize <= AES_MAX_KEY_SIZE); /* Truncate keysizes to the valid key sizes provided by Rijndael */ - if (keysize == 32) { + if (keysize == AES256_KEY_SIZE) { nk = 8; - nr = 14; - } else if (keysize >= 24) { + nr = _AES256_ROUNDS; + } else if (keysize >= AES192_KEY_SIZE) { nk = 6; - nr = 12; + nr = _AES192_ROUNDS; } else { /* must be 16 or more */ nk = 4; - nr = 10; + nr = _AES128_ROUNDS; } - lastkey = (AES_BLOCK_SIZE/4) * (nr + 1); ctx->rounds = nr; - - for (i=0, rp = rcon; i<nk; i++) - ctx->keys[i] = LE_READ_UINT32(key + i*4); - - for (i=nk; i<lastkey; i++) - { - temp = ctx->keys[i-1]; - if (i % nk == 0) - temp = SUBBYTE(ROTL32(24, temp), aes_sbox) ^ *rp++; - - else if (nk > 6 && (i%nk) == 4) - temp = SUBBYTE(temp, aes_sbox); - - ctx->keys[i] = ctx->keys[i-nk] ^ temp; - } + _aes_set_key (nr, nk, ctx->keys, key); } - |