| #include "ecrypt-sync.h" |
#include "ecrypt-sync.h" |
| #include "ecrypt-portable.h" |
#include "ecrypt-portable.h" |
| |
|
| |
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) |
| |
#define RABBIT_GCC 1 |
| |
#endif |
| |
|
| |
#if defined(_MSC_VER) && defined(_M_IX86) |
| |
#define RABBIT_MSC 1 |
| |
#endif |
| |
|
| /* -------------------------------------------------------------------------- */ |
/* -------------------------------------------------------------------------- */ |
| /* 32-bit G function macros */ |
/* 32-bit G function macros */ |
| /* Used in ECRYPT_VARIANT 1 */ |
/* Used in ECRYPT_VARIANT 1 */ |
| /* -------------------------------------------------------------------------- */ |
/* -------------------------------------------------------------------------- */ |
| /* Macros used in next-state function */ |
/* Macros used in next-state function */ |
| |
|
| #if defined(_MSC_VER) && defined(_M_IX86) && (ECRYPT_VARIANT > 2) |
#if defined(RABBIT_MSC) && (ECRYPT_VARIANT > 2) |
| /* COMPILER : MICROSOFT OR INTEL */ |
/* COMPILER : MICROSOFT OR INTEL */ |
| /* PROCESSOR: x86 */ |
/* PROCESSOR: x86 */ |
| |
|
| #define RABBIT_NS_POST \ |
#define RABBIT_NS_POST \ |
| _asm mov [esi]RABBIT_ctx.carry, ecx |
_asm mov [esi]RABBIT_ctx.carry, ecx |
| |
|
| #elif defined(__GNUC__) && defined(__i386__) && (ECRYPT_VARIANT > 2) |
#elif defined(RABBIT_GCC) && (ECRYPT_VARIANT > 2) |
| /* COMPILER : GCC */ |
/* COMPILER : GCC */ |
| /* PROCESSOR: x86 */ |
/* PROCESSOR: x86 */ |
| |
|
| |
|
| /* ------------------------------------------------------------------------- */ |
/* ------------------------------------------------------------------------- */ |
| |
|
| #if defined(_MSC_VER) && defined(_M_IX86) && (ECRYPT_VARIANT > 3) |
#if defined(RABBIT_MSC) && (ECRYPT_VARIANT > 3) |
| /* COMPILER : MICROSOFT OR INTEL */ |
/* COMPILER : MICROSOFT OR INTEL */ |
| /* PROCESSOR: x86 */ |
/* PROCESSOR: x86 */ |
| |
|
| |
|
| /* -------------------------------------------------------------------------- */ |
/* -------------------------------------------------------------------------- */ |
| |
|
| #elif defined(__GNUC__) && defined(__i386__) && (ECRYPT_VARIANT > 4) |
#elif defined(RABBIT_GCC) && (ECRYPT_VARIANT > 4) |
| /* COMPILER : GCC */ |
/* COMPILER : GCC */ |
| /* PROCESSOR: x86 */ |
/* PROCESSOR: x86 */ |
| |
|
| /* Clear carry bit */ |
/* Clear carry bit */ |
| ctx->master_ctx.carry = RABBIT_CARRY_INIT; |
ctx->master_ctx.carry = RABBIT_CARRY_INIT; |
| |
|
| #if ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__))) && (ECRYPT_VARIANT > 4) |
#if ((defined(RABBIT_MSC)) || defined(RABBIT_GCC)) && (ECRYPT_VARIANT > 4) |
| |
|
| p_instance = &(ctx->master_ctx); |
p_instance = &(ctx->master_ctx); |
| |
|
| { |
{ |
| /* Temporary variables */ |
/* Temporary variables */ |
| u32 i0, i1, i2, i3; |
u32 i0, i1, i2, i3; |
| #if (ECRYPT_VARIANT < 5) || !((defined(_MSC_VER) && defined(_M_IX86))) |
#if (ECRYPT_VARIANT < 5) || !((defined(RABBIT_MSC))) |
| u32 i; |
u32 i; |
| RABBIT_NS_VARS |
RABBIT_NS_VARS |
| #endif |
#endif |
| |
|
| ctx->work_ctx.carry = ctx->master_ctx.carry; |
ctx->work_ctx.carry = ctx->master_ctx.carry; |
| |
|
| #if ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__))) && (ECRYPT_VARIANT > 4) |
#if (defined(RABBIT_MSC) || defined(RABBIT_GCC)) && (ECRYPT_VARIANT > 4) |
| p_instance = &(ctx->work_ctx); |
p_instance = &(ctx->work_ctx); |
| |
|
| RABBIT_NS_PRE |
RABBIT_NS_PRE |
| u8 buffer[16]; |
u8 buffer[16]; |
| /* ECRYPT_ctx* temp = ctx; */ |
/* ECRYPT_ctx* temp = ctx; */ |
| |
|
| #if ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__))) && (ECRYPT_VARIANT > 4) |
#if (defined(RABBIT_MSC) || defined(RABBIT_GCC)) && (ECRYPT_VARIANT > 4) |
| /* RABBIT_ctx* p_instance = &ctx->work_ctx; */ |
/* RABBIT_ctx* p_instance = &ctx->work_ctx; */ |
| if (msglen >= 16) |
if (msglen >= 16) |
| { |
{ |
| u32 i; |
u32 i; |
| u8 buffer[16]; |
u8 buffer[16]; |
| |
|
| #if ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__))) && (ECRYPT_VARIANT > 4) |
#if (defined(RABBIT_MSC) || defined(RABBIT_GCC)) && (ECRYPT_VARIANT > 4) |
| if (length >= 16) |
if (length >= 16) |
| { |
{ |
| _keystream_opt(&(ctx->work_ctx), keystream, keystream + (length&0xFFFFFFF0U)); |
_keystream_opt(&(ctx->work_ctx), keystream, keystream + (length&0xFFFFFFF0U)); |
| void ECRYPT_process_blocks(int action, ECRYPT_ctx* ctx, const u8* input, |
void ECRYPT_process_blocks(int action, ECRYPT_ctx* ctx, const u8* input, |
| u8* output, u32 blocks) |
u8* output, u32 blocks) |
| { |
{ |
| #if ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__))) && (ECRYPT_VARIANT > 4) |
#if (defined(RABBIT_MSC) || defined(RABBIT_GCC)) && (ECRYPT_VARIANT > 4) |
| if (!blocks) |
if (!blocks) |
| return; |
return; |
| _process_opt(&(ctx->work_ctx), input, (s32)(output-input), input+(blocks*16)); |
_process_opt(&(ctx->work_ctx), input, (s32)(output-input), input+(blocks*16)); |