+/* $OpenBSD: rijndael.h,v 1.9 2001/07/30 16:23:30 stevesk Exp $ */
+
+/* This is an independent implementation of the encryption algorithm: */
+/* */
+/* RIJNDAEL by Joan Daemen and Vincent Rijmen */
+/* */
+/* which is a candidate algorithm in the Advanced Encryption Standard */
+/* programme of the US National Institute of Standards and Technology. */
+
/*
- * rijndael-alg-fst.h v2.4 April '2000
- * rijndael-api-fst.h v2.4 April '2000
- *
- * Optimised ANSI C code
- *
- */
+ -----------------------------------------------------------------------
+ Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
+
+ TERMS
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ This software is provided 'as is' with no guarantees of correctness or
+ fitness for purpose.
+ -----------------------------------------------------------------------
+*/
+
+#ifndef _RIJNDAEL_H_
+#define _RIJNDAEL_H_
+
+#include "config.h"
+
+/* 1. Standard types for AES cryptography source code */
+
+typedef u_int8_t u1byte; /* an 8 bit unsigned character type */
+typedef u_int16_t u2byte; /* a 16 bit unsigned integer type */
+typedef u_int32_t u4byte; /* a 32 bit unsigned integer type */
+
+typedef int8_t s1byte; /* an 8 bit signed character type */
+typedef int16_t s2byte; /* a 16 bit signed integer type */
+typedef int32_t s4byte; /* a 32 bit signed integer type */
-#ifndef RIJNDAEL_H
-#define RIJNDAEL_H
+typedef struct _rijndael_ctx {
+ u4byte k_len;
+ int decrypt;
+ u4byte e_key[64];
+ u4byte d_key[64];
+} rijndael_ctx;
-#define RIJNDAEL_MAXKC (256/32)
-#define RIJNDAEL_MAXROUNDS 14
-#define RIJNDAEL_ENCRYPT 0
-#define RIJNDAEL_DECRYPT 1
+/* 2. Standard interface for AES cryptographic routines */
-typedef struct {
- int ROUNDS; /* key-length-dependent number of rounds */
- u_int8_t keySched[RIJNDAEL_MAXROUNDS+1][4][4];
-} rijndael_key;
+/* These are all based on 32 bit unsigned values and will therefore */
+/* require endian conversions for big-endian architectures */
-int rijndael_encrypt(rijndael_key *key, u_int8_t a[16], u_int8_t b[16]);
-int rijndael_decrypt(rijndael_key *key, u_int8_t a[16], u_int8_t b[16]);
-int rijndael_makekey(rijndael_key *key, int direction, int keyLen, u_int8_t *keyMaterial);
+rijndael_ctx *
+rijndael_set_key __P((rijndael_ctx *, const u4byte *, const u4byte, int));
+void rijndael_encrypt __P((rijndael_ctx *, const u4byte *, u4byte *));
+void rijndael_decrypt __P((rijndael_ctx *, const u4byte *, u4byte *));
-#endif
+#endif /* _RIJNDAEL_H_ */