altos: Add software AES implementation
[fw/altos] / src / aes / ao_aes_int.h
diff --git a/src/aes/ao_aes_int.h b/src/aes/ao_aes_int.h
new file mode 100644 (file)
index 0000000..7990a2e
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (C) 2000-2009 Peter Selinger.
+   This file is part of ccrypt. It is free software and it is covered
+   by the GNU general public license. See the file COPYING for details. */
+
+/* rijndael.h */
+/* $Id: rijndael.h 258 2009-08-26 17:46:10Z selinger $ */
+
+/* derived from original source: rijndael-alg-ref.h   v2.0   August '99
+ * Reference ANSI C code for NIST competition
+ * authors: Paulo Barreto
+ *          Vincent Rijmen
+ */
+
+#ifndef __RIJNDAEL_H
+#define __RIJNDAEL_H
+
+#include <stdint.h>
+
+typedef uint8_t word8;
+typedef uint32_t word32;
+
+/* a type to hold 32 bits accessible as 1 integer or 4 bytes */
+union word8x4_u {
+  word8 w8[4];
+  word32 w32;
+};
+typedef union word8x4_u word8x4;
+
+#include "ao_aes_tables.h"
+
+#define MAXBC          (256/32)
+#define MAXKC          (256/32)
+#define MAXROUNDS      14
+#define MAXRK           ((MAXROUNDS+1)*MAXBC)
+
+typedef struct {
+  int BC;
+  int KC;
+  int ROUNDS;
+  int shift[2][4];
+  word32 rk[MAXRK];
+} roundkey;
+
+/* keys and blocks are externally treated as word32 arrays, to
+   make sure they are aligned on 4-byte boundaries on architectures
+   that require it. */
+
+/* make a roundkey rkk from key. key must have appropriate size given
+   by keyBits. keyBits and blockBits may only be 128, 196, or
+   256. Returns non-zero if arguments are invalid. */
+
+int xrijndaelKeySched(word32 key[], int keyBits, int blockBits,
+                     roundkey *rkk);
+
+/* encrypt, resp. decrypt, block using rijndael roundkey rkk. rkk must
+   have been created with xrijndaelKeySched. Size of block, in bits,
+   must be equal to blockBits parameter that was used to make rkk. In
+   all other cases, behavior is undefined - for reasons of speed, no
+   check for error conditions is done. */
+
+void xrijndaelEncrypt(word32 block[], roundkey *rkk);
+void xrijndaelDecrypt(word32 block[], roundkey *rkk);
+
+#endif                         /* __RIJNDAEL_H */