cfb8: Fix decrypt path
[gd/nettle] / aes-set-encrypt-key.c
index dfc2089b418a4a1b8b385aa4388b096a9cdfa30b..ed417fcd5e4286778155ae730b728c80493c6fac 100644 (file)
 # 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;
 }