diff options
Diffstat (limited to 'sosemanuk.h')
-rw-r--r-- | sosemanuk.h | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/sosemanuk.h b/sosemanuk.h deleted file mode 100644 index 3cee5a8..0000000 --- a/sosemanuk.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * SOSEMANUK reference API. - * - * This file documents the reference implementation API. If the - * macro SOSEMANUK_ECRYPT is defined, the API follows the ECRYPT - * conventions (types, function names...) and uses the ECRYPT files; - * otherwise, a simpler API is used. - * - * (c) 2005 X-CRYPT project. This software is provided 'as-is', without - * any express or implied warranty. In no event will the authors be held - * liable for any damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to no restriction. - * - * Technical remarks and questions can be addressed to - * <thomas.pornin@cryptolog.com> - */ - -#ifndef SOSEMANUK_H__ -#define SOSEMANUK_H__ - -/* - * This macro enables the ECRYPT API, and disables the local API. - * It is defined by default, for ECRYPT processing. - */ -//#define SOSEMANUK_ECRYPT - -#ifdef SOSEMANUK_ECRYPT - -#include "ecrypt-sync.h" - -#else - -#include <limits.h> - -/* - * Input/Output is defined in terms of octets, but C provides only - * the C notion of "byte". We require that C bytes are actually octets. - */ -#if CHAR_BIT != 8 -#error We need 8-bit bytes -#endif - -/* - * We want an unsigned integer type with at least (and possibly exactly) - * 32 bits. Such a type implements arithmetics modulo 2^n for a value - * n greater than or equal to 32. The type is named "unum32". - * - * Note: we try to use C99 features such as <stdint.h>. This may prove - * problematic on architectures which claim C99 conformance, but fail - * to actually conform. If necessary, define the macro BROKEN_C99 to - * fall back to C90, whatever the environment claims: -#define BROKEN_C99 1 - */ - -#if !defined BROKEN_C99 && defined __STDC__ && __STDC_VERSION__ >= 199901L - -/* - * C99 implementation. We use "uint_least32_t" which has the required - * semantics. - */ -#include <stdint.h> -typedef uint_least32_t unum32; - -#else - -/* - * Pre-C99 implementation. "unsigned long" is guaranteed to be wide - * enough, but we want to use "unsigned int" if possible (especially - * for 64-bit architectures). - */ -#if UINT_MAX >= 0xFFFFFFFF -typedef unsigned int unum32; -#else -typedef unsigned long unum32; -#endif - -#endif - -/* - * We want (and sometimes need) to perform explicit truncations to 32 bits. - */ -#define ONE32 ((unum32)0xFFFFFFFF) -#define T32(x) ((x) & ONE32) - -/* - * Some of our functions will be tagged as "inline" to help the compiler - * optimize things. We use "inline" only if the compiler is advanced - * enough to understand it; C99 compilers, and pre-C99 versions of gcc, - * understand enough "inline" for our purposes. - */ -#if (!defined BROKEN_C99 && defined __STDC__ && __STDC_VERSION__ >= 199901L) \ - || defined __GNUC__ -#define INLINE inline -#else -#define INLINE -#endif - -/* - * API description: - * - * The SOSEMANUK algorithm works with a secret key and an initial value (IV). - * Two context structures are used: - * - * -- "sosemanuk_key_context" holds the processed secret key. The contents - * of this structure depends only on the key, not the IV. - * - * -- "sosemanuk_run_context" holds the current cipher internal state. This - * structure is initialized using the "sosemanuk_key_context" structure, and - * the IV; it is updated each time some output is produced. - * - * Both structures may be allocated as local variables. There is no - * other external allocation (using malloc() or any similar function). - * There is no global state; hence, this code is thread-safe and - * reentrant. - */ - -typedef struct { - /* - * Sub-keys for Serpent24. - */ - unum32 sk[100]; -} sosemanuk_key_context; - -typedef struct { - /* - * Internal cipher state. - */ - unum32 s00, s01, s02, s03, s04, s05, s06, s07, s08, s09; - unum32 r1, r2; - - /* - * Buffering: the stream cipher produces output data by - * blocks of 640 bits. buf[] contains such a block, and - * "ptr" is the index of the next output byte. - */ - unsigned char buf[80]; - unsigned ptr; -} sosemanuk_run_context; - -/* - * Key schedule: initialize the key context structure with the provided - * secret key. The secret key is an array of 1 to 32 bytes. - */ -void sosemanuk_schedule(sosemanuk_key_context *kc, - unsigned char *key, size_t key_len); - -/* - * Cipher initialization: the cipher internal state is initialized, using - * the provided key context and IV. The IV length is up to 16 bytes. If - * "iv_len" is 0 (no IV), then the "iv" parameter can be NULL. - */ -void sosemanuk_init(sosemanuk_run_context *rc, - sosemanuk_key_context *kc, unsigned char *iv, size_t iv_len); - -/* - * Cipher operation, as a PRNG: the provided output buffer is filled with - * pseudo-random bytes as output from the stream cipher. - */ -void sosemanuk_prng(sosemanuk_run_context *rc, - unsigned char *out, size_t out_len); - -/* - * Cipher operation, as a stream cipher: data is read from the "in" - * buffer, combined by XOR with the stream, and the result is written - * in the "out" buffer. "in" and "out" must be either equal, or - * reference distinct buffers (no partial overlap is allowed). - */ -void sosemanuk_encrypt(sosemanuk_run_context *rc, - unsigned char *in, unsigned char *out, size_t data_len); - -#endif - -#endif |