--- /dev/null
+#ifndef _AHS_API_H_\r
+#define _AHS_API_H_\r
+\r
+/***********************************************************************\r
+**\r
+** Interface declarations of the AHS API using the Skein hash function.\r
+**\r
+** Source code author: Doug Whiting, 2008.\r
+**\r
+** This algorithm and source code is released to the public domain.\r
+** \r
+************************************************************************/\r
+\r
+#include "skein.h"\r
+\r
+typedef enum\r
+ {\r
+ SUCCESS = SKEIN_SUCCESS,\r
+ FAIL = SKEIN_FAIL,\r
+ BAD_HASHLEN = SKEIN_BAD_HASHLEN\r
+ }\r
+ HashReturn;\r
+\r
+typedef size_t DataLength; /* bit count type */\r
+typedef u08b_t BitSequence; /* bit stream type */\r
+\r
+typedef struct\r
+ {\r
+ uint_t statebits; /* 256, 512, or 1024 */\r
+ union\r
+ {\r
+ Skein_Ctxt_Hdr_t h; /* common header "overlay" */\r
+ Skein_256_Ctxt_t ctx_256;\r
+ Skein_512_Ctxt_t ctx_512;\r
+ Skein1024_Ctxt_t ctx1024;\r
+ } u;\r
+ }\r
+ hashState;\r
+\r
+/* "incremental" hashing API */\r
+HashReturn Init (hashState *state, int hashbitlen);\r
+HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen);\r
+HashReturn Final (hashState *state, BitSequence *hashval);\r
+\r
+/* "all-in-one" call */\r
+HashReturn Hash (int hashbitlen, const BitSequence *data, \r
+ DataLength databitlen, BitSequence *hashval);\r
+\r
+\r
+/*\r
+** Re-define the compile-time constants below to change the selection\r
+** of the Skein state size in the Init() function in skeinapi_ref.c.\r
+**\r
+** That is, the NIST API does not allow for explicit selection of the\r
+** Skein block size, so it must be done implicitly in the Init() function.\r
+** The selection is controlled by these constants.\r
+*/\r
+#ifndef SKEIN_256_NIST_MAX_HASHBITS\r
+#define SKEIN_256_NIST_MAX_HASHBITS (0)\r
+#endif\r
+\r
+#ifndef SKEIN_512_NIST_MAX_HASHBITS\r
+#define SKEIN_512_NIST_MAX_HASHBITS (512)\r
+#endif\r
+\r
+#endif /* ifdef _AHS_API_H_ */\r