summaryrefslogtreecommitdiff
path: root/aes-set-encrypt-key.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2013-05-22 20:14:14 +0200
committerNiels Möller <nisse@lysator.liu.se>2013-05-22 20:14:14 +0200
commitb27be3a688b814832b965b15680f9ccd053a0753 (patch)
tree0260c2beb0a3854928b22327ca7a6eaaeb8abea8 /aes-set-encrypt-key.c
parentd6fadad818952700af8460399feb0cd5bad899cc (diff)
downloadnettle-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.c37
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);
}
-