Also use CRYPTOPP_DISABLE_XXX_ASM consistently. The pattern is needed for Clang which still can't compile Intel assembly language. Also see http://llvm.org/bugs/show_bug.cgi?id=24232.pull/705/head
parent
06cf2ede9e
commit
4282f94712
|
|
@ -12,10 +12,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux. Other versions
|
#if defined(CRYPTOPP_DISABLE_GCM_ASM)
|
||||||
// produce incorrect results. Clang has never handled Intel ASM
|
|
||||||
// very well. I wish LLVM would fix it.
|
|
||||||
#if defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
|
||||||
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
||||||
|
|
|
||||||
4
gcm.cpp
4
gcm.cpp
|
|
@ -12,9 +12,7 @@
|
||||||
#ifndef CRYPTOPP_IMPORTS
|
#ifndef CRYPTOPP_IMPORTS
|
||||||
#ifndef CRYPTOPP_GENERATE_X64_MASM
|
#ifndef CRYPTOPP_GENERATE_X64_MASM
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux. Other versions produce incorrect results.
|
#if defined(CRYPTOPP_DISABLE_GCM_ASM)
|
||||||
// Clang has never handled Intel ASM very well. I wish LLVM would fix it.
|
|
||||||
#if defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
|
||||||
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
||||||
|
|
|
||||||
6
gcm.h
6
gcm.h
|
|
@ -10,6 +10,12 @@
|
||||||
#include "authenc.h"
|
#include "authenc.h"
|
||||||
#include "modes.h"
|
#include "modes.h"
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
|
# define CRYPTOPP_DISABLE_GCM_ASM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
/// \enum GCM_TablesOption
|
/// \enum GCM_TablesOption
|
||||||
|
|
|
||||||
17
rijndael.cpp
17
rijndael.cpp
|
|
@ -90,11 +90,6 @@ being unloaded from L1 cache, until that round is finished.
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux
|
|
||||||
#if CRYPTOPP_BOOL_X32 || (defined(CRYPTOPP_LLVM_CLANG_VERSION) && (CRYPTOPP_LLVM_CLANG_VERSION < 30400))
|
|
||||||
# define CRYPTOPP_DISABLE_RIJNDAEL_ASM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Hack for http://github.com/weidai11/cryptopp/issues/42 and http://github.com/weidai11/cryptopp/issues/132
|
// Hack for http://github.com/weidai11/cryptopp/issues/42 and http://github.com/weidai11/cryptopp/issues/132
|
||||||
#if (CRYPTOPP_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE))
|
#if (CRYPTOPP_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE))
|
||||||
# define CRYPTOPP_ALLOW_RIJNDAEL_UNALIGNED_DATA_ACCESS 1
|
# define CRYPTOPP_ALLOW_RIJNDAEL_UNALIGNED_DATA_ACCESS 1
|
||||||
|
|
@ -769,7 +764,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
{
|
{
|
||||||
CRYPTOPP_UNUSED(locals); CRYPTOPP_UNUSED(k);
|
CRYPTOPP_UNUSED(locals); CRYPTOPP_UNUSED(k);
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
|
|
||||||
#define L_REG esp
|
#define L_REG esp
|
||||||
#define L_INDEX(i) (L_REG+768+i)
|
#define L_INDEX(i) (L_REG+768+i)
|
||||||
|
|
@ -869,7 +864,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
AS2( mov edi, [g_cacheLineSize])
|
AS2( mov edi, [g_cacheLineSize])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( mov [ecx+16*12+16*4], esp) // save esp to L_SP
|
AS2( mov [ecx+16*12+16*4], esp) // save esp to L_SP
|
||||||
AS2( lea esp, [ecx-768])
|
AS2( lea esp, [ecx-768])
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -929,7 +924,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
AS2( movd eax, xmm1)
|
AS2( movd eax, xmm1)
|
||||||
AS2( mov al, BYTE PTR [WORD_REG(si)+15])
|
AS2( mov al, BYTE PTR [WORD_REG(si)+15])
|
||||||
AS2( MOVD MM(2), eax)
|
AS2( MOVD MM(2), eax)
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( mov eax, 1)
|
AS2( mov eax, 1)
|
||||||
AS2( movd mm3, eax)
|
AS2( movd mm3, eax)
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1057,7 +1052,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
AS2( xor cl, ch)
|
AS2( xor cl, ch)
|
||||||
AS2( and WORD_REG(cx), 255)
|
AS2( and WORD_REG(cx), 255)
|
||||||
ASL(5)
|
ASL(5)
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( paddb MM(2), mm3)
|
AS2( paddb MM(2), mm3)
|
||||||
#else
|
#else
|
||||||
AS2( add MM(2), 1)
|
AS2( add MM(2), 1)
|
||||||
|
|
@ -1158,7 +1153,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
AS2( movdqu xmm2, [WORD_REG(ax)])
|
AS2( movdqu xmm2, [WORD_REG(ax)])
|
||||||
AS2( pxor xmm2, xmm4)
|
AS2( pxor xmm2, xmm4)
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( movdqa xmm0, [L_INCREMENTS])
|
AS2( movdqa xmm0, [L_INCREMENTS])
|
||||||
AS2( paddd xmm0, [L_INBLOCKS])
|
AS2( paddd xmm0, [L_INBLOCKS])
|
||||||
AS2( movdqa [L_INBLOCKS], xmm0)
|
AS2( movdqa [L_INBLOCKS], xmm0)
|
||||||
|
|
@ -1206,7 +1201,7 @@ CRYPTOPP_NAKED void CRYPTOPP_FASTCALL Rijndael_Enc_AdvancedProcessBlocks(void *l
|
||||||
AS2( movaps [WORD_REG(ax)+4*16], xmm0)
|
AS2( movaps [WORD_REG(ax)+4*16], xmm0)
|
||||||
AS2( movaps [WORD_REG(ax)+5*16], xmm0)
|
AS2( movaps [WORD_REG(ax)+5*16], xmm0)
|
||||||
AS2( movaps [WORD_REG(ax)+6*16], xmm0)
|
AS2( movaps [WORD_REG(ax)+6*16], xmm0)
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( mov esp, [L_SP])
|
AS2( mov esp, [L_SP])
|
||||||
AS1( emms)
|
AS1( emms)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,12 @@
|
||||||
#include "seckey.h"
|
#include "seckey.h"
|
||||||
#include "secblock.h"
|
#include "secblock.h"
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
|
# define CRYPTOPP_DISABLE_RIJNDAEL_ASM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_ARM32 || \
|
#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_ARM32 || \
|
||||||
CRYPTOPP_BOOL_ARM64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64
|
CRYPTOPP_BOOL_ARM64 || CRYPTOPP_BOOL_PPC32 || CRYPTOPP_BOOL_PPC64
|
||||||
# define CRYPTOPP_RIJNDAEL_ADVANCED_PROCESS_BLOCKS 1
|
# define CRYPTOPP_RIJNDAEL_ADVANCED_PROCESS_BLOCKS 1
|
||||||
|
|
|
||||||
5
salsa.h
5
salsa.h
|
|
@ -9,9 +9,10 @@
|
||||||
#include "strciphr.h"
|
#include "strciphr.h"
|
||||||
#include "secblock.h"
|
#include "secblock.h"
|
||||||
|
|
||||||
// "Inline assembly operands don't work with .intel_syntax", http://llvm.org/bugs/show_bug.cgi?id=24232
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
# define CRYPTOPP_DISABLE_SALSA_ASM
|
# define CRYPTOPP_DISABLE_SALSA_ASM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,13 @@
|
||||||
#include "sha.h"
|
#include "sha.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
|
#if defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_SSE2_ASM_AVAILABLE
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (CRYPTOPP_SHANI_AVAILABLE)
|
#if (CRYPTOPP_SHANI_AVAILABLE)
|
||||||
# include <nmmintrin.h>
|
# include <nmmintrin.h>
|
||||||
# include <immintrin.h>
|
# include <immintrin.h>
|
||||||
|
|
|
||||||
7
sha.cpp
7
sha.cpp
|
|
@ -42,13 +42,6 @@
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux
|
|
||||||
// http://github.com/weidai11/cryptopp/issues/264
|
|
||||||
// Clang 3.4.1 (x86) crash on FreeBSD 10.3. Clang 3.4.1 (x64) works fine.
|
|
||||||
#if (defined(CRYPTOPP_LLVM_CLANG_VERSION) && (CRYPTOPP_LLVM_CLANG_VERSION < 30500)) || CRYPTOPP_BOOL_X32
|
|
||||||
# define CRYPTOPP_DISABLE_SHA_ASM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CRYPTOPP_DISABLE_SHA_ASM)
|
#if defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
|
|
|
||||||
6
sha.h
6
sha.h
|
|
@ -11,6 +11,12 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
|
# define CRYPTOPP_DISABLE_SHA_ASM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
/// \brief SHA-1 message digest
|
/// \brief SHA-1 message digest
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@
|
||||||
#include "strciphr.h"
|
#include "strciphr.h"
|
||||||
#include "secblock.h"
|
#include "secblock.h"
|
||||||
|
|
||||||
// Clang due to "Inline assembly operands don't work with .intel_syntax"
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
// https://llvm.org/bugs/show_bug.cgi?id=24232
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
# define CRYPTOPP_DISABLE_SOSEMANUK_ASM
|
# define CRYPTOPP_DISABLE_SOSEMANUK_ASM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
|
||||||
6
tiger.h
6
tiger.h
|
|
@ -10,9 +10,9 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
// http://github.com/weidai11/cryptopp/issues/264
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
#if (defined(CRYPTOPP_LLVM_CLANG_VERSION) && (CRYPTOPP_LLVM_CLANG_VERSION < 30400)) || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
# define CRYPTOPP_DISABLE_TIGER_ASM 1
|
# define CRYPTOPP_DISABLE_TIGER_ASM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
84
vmac.cpp
84
vmac.cpp
|
|
@ -20,26 +20,29 @@
|
||||||
# pragma warning(disable: 4731)
|
# pragma warning(disable: 4731)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !CRYPTOPP_BOOL_SLOW_WORD64
|
#if defined(_MSC_VER) && !CRYPTOPP_BOOL_SLOW_WORD64
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CRYPTOPP_WORD128_AVAILABLE) && !defined(CRYPTOPP_X64_ASM_AVAILABLE)
|
#if defined(CRYPTOPP_WORD128_AVAILABLE) && !defined(CRYPTOPP_X64_ASM_AVAILABLE)
|
||||||
|
using CryptoPP::word128;
|
||||||
|
using CryptoPP::word64;
|
||||||
# define VMAC_BOOL_WORD128 1
|
# define VMAC_BOOL_WORD128 1
|
||||||
#else
|
#else
|
||||||
|
using CryptoPP::word64;
|
||||||
# define VMAC_BOOL_WORD128 0
|
# define VMAC_BOOL_WORD128 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#define const // Turbo C++ 2006 workaround
|
#define const // Turbo C++ 2006 workaround
|
||||||
#endif
|
#endif
|
||||||
static const word64 p64 = W64LIT(0xfffffffffffffeff); /* 2^64 - 257 prime */
|
const word64 p64 = W64LIT(0xfffffffffffffeff); /* 2^64 - 257 prime */
|
||||||
static const word64 m62 = W64LIT(0x3fffffffffffffff); /* 62-bit mask */
|
const word64 m62 = W64LIT(0x3fffffffffffffff); /* 62-bit mask */
|
||||||
static const word64 m63 = W64LIT(0x7fffffffffffffff); /* 63-bit mask */
|
const word64 m63 = W64LIT(0x7fffffffffffffff); /* 63-bit mask */
|
||||||
static const word64 m64 = W64LIT(0xffffffffffffffff); /* 64-bit mask */
|
const word64 m64 = W64LIT(0xffffffffffffffff); /* 64-bit mask */
|
||||||
static const word64 mpoly = W64LIT(0x1fffffff1fffffff); /* Poly key mask */
|
const word64 mpoly = W64LIT(0x1fffffff1fffffff); /* Poly key mask */
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#undef const
|
#undef const
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -48,10 +51,14 @@ static const word64 mpoly = W64LIT(0x1fffffff1fffffff); /* Poly key mask */
|
||||||
// workaround GCC Bug 31690: ICE with const __uint128_t and C++ front-end
|
// workaround GCC Bug 31690: ICE with const __uint128_t and C++ front-end
|
||||||
#define m126 ((word128(m62)<<64)|m64)
|
#define m126 ((word128(m62)<<64)|m64)
|
||||||
#else
|
#else
|
||||||
static const word128 m126 = (word128(m62)<<64)|m64; /* 126-bit mask */
|
const word128 m126 = (word128(m62)<<64)|m64; /* 126-bit mask */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_END
|
||||||
|
|
||||||
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
void VMAC_Base::UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs ¶ms)
|
void VMAC_Base::UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs ¶ms)
|
||||||
{
|
{
|
||||||
int digestLength = params.GetIntValueWithDefault(Name::DigestSize(), DefaultDigestSize());
|
int digestLength = params.GetIntValueWithDefault(Name::DigestSize(), DefaultDigestSize());
|
||||||
|
|
@ -167,7 +174,7 @@ unsigned int VMAC_Base::OptimalDataAlignment() const
|
||||||
GetCipher().OptimalDataAlignment();
|
GetCipher().OptimalDataAlignment();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CRYPTOPP_SSE2_ASM_AVAILABLE && (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32)
|
#if CRYPTOPP_SSE2_ASM_AVAILABLE && (CRYPTOPP_BOOL_X86)
|
||||||
#if CRYPTOPP_MSC_VERSION
|
#if CRYPTOPP_MSC_VERSION
|
||||||
# pragma warning(disable: 4731) // frame pointer register 'ebp' modified by inline assembly code
|
# pragma warning(disable: 4731) // frame pointer register 'ebp' modified by inline assembly code
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -217,13 +224,8 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AS2( shr ebx, 3)
|
AS2( shr ebx, 3)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS_PUSH_IF86( bp)
|
|
||||||
AS2( sub esp, 24)
|
|
||||||
#else
|
|
||||||
AS_PUSH_IF86( bp)
|
AS_PUSH_IF86( bp)
|
||||||
AS2( sub esp, 12)
|
AS2( sub esp, 12)
|
||||||
#endif
|
|
||||||
ASL(4)
|
ASL(4)
|
||||||
AS2( mov ebp, ebx)
|
AS2( mov ebp, ebx)
|
||||||
AS2( cmp ecx, ebx)
|
AS2( cmp ecx, ebx)
|
||||||
|
|
@ -246,11 +248,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( pxor mm7, mm7)
|
AS2( pxor mm7, mm7)
|
||||||
AS2( movd [esp], mm6)
|
AS2( movd [esp], mm6)
|
||||||
AS2( psrlq mm6, 32)
|
AS2( psrlq mm6, 32)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+8], mm5)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+4], mm5)
|
AS2( movd [esp+4], mm5)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm5, 32)
|
AS2( psrlq mm5, 32)
|
||||||
AS2( cmp edi, ebp)
|
AS2( cmp edi, ebp)
|
||||||
ASJ( je, 1, f)
|
ASJ( je, 1, f)
|
||||||
|
|
@ -265,11 +263,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( paddq mm5, mm2)
|
AS2( paddq mm5, mm2)
|
||||||
ASS( pshufw mm2, mm0, 1, 0, 3, 2)
|
ASS( pshufw mm2, mm0, 1, 0, 3, 2)
|
||||||
AS2( pmuludq mm0, mm1)
|
AS2( pmuludq mm0, mm1)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+16], mm3)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+8], mm3)
|
AS2( movd [esp+8], mm3)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm3, 32)
|
AS2( psrlq mm3, 32)
|
||||||
AS2( paddq mm5, mm3)
|
AS2( paddq mm5, mm3)
|
||||||
ASS( pshufw mm3, mm1, 1, 0, 3, 2)
|
ASS( pshufw mm3, mm1, 1, 0, 3, 2)
|
||||||
|
|
@ -278,48 +272,28 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( pmuludq mm3, mm4)
|
AS2( pmuludq mm3, mm4)
|
||||||
AS2( movd mm4, [esp])
|
AS2( movd mm4, [esp])
|
||||||
AS2( paddq mm7, mm4)
|
AS2( paddq mm7, mm4)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd mm4, [esp+8])
|
|
||||||
AS2( paddq mm6, mm4)
|
|
||||||
AS2( movd mm4, [esp+16])
|
|
||||||
#else
|
|
||||||
AS2( movd mm4, [esp+4])
|
AS2( movd mm4, [esp+4])
|
||||||
AS2( paddq mm6, mm4)
|
AS2( paddq mm6, mm4)
|
||||||
AS2( movd mm4, [esp+8])
|
AS2( movd mm4, [esp+8])
|
||||||
#endif
|
|
||||||
AS2( paddq mm6, mm4)
|
AS2( paddq mm6, mm4)
|
||||||
AS2( movd [esp], mm0)
|
AS2( movd [esp], mm0)
|
||||||
AS2( psrlq mm0, 32)
|
AS2( psrlq mm0, 32)
|
||||||
AS2( paddq mm6, mm0)
|
AS2( paddq mm6, mm0)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+8], mm1)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+4], mm1)
|
AS2( movd [esp+4], mm1)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm1, 32)
|
AS2( psrlq mm1, 32)
|
||||||
AS2( paddq mm5, mm1)
|
AS2( paddq mm5, mm1)
|
||||||
AS2( cmp edi, ebp)
|
AS2( cmp edi, ebp)
|
||||||
ASJ( jne, 0, b)
|
ASJ( jne, 0, b)
|
||||||
ASL(1)
|
ASL(1)
|
||||||
AS2( paddq mm5, mm2)
|
AS2( paddq mm5, mm2)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+16], mm3)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+8], mm3)
|
AS2( movd [esp+8], mm3)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm3, 32)
|
AS2( psrlq mm3, 32)
|
||||||
AS2( paddq mm5, mm3)
|
AS2( paddq mm5, mm3)
|
||||||
AS2( movd mm4, [esp])
|
AS2( movd mm4, [esp])
|
||||||
AS2( paddq mm7, mm4)
|
AS2( paddq mm7, mm4)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd mm4, [esp+8])
|
|
||||||
AS2( paddq mm6, mm4)
|
|
||||||
AS2( movd mm4, [esp+16])
|
|
||||||
#else
|
|
||||||
AS2( movd mm4, [esp+4])
|
AS2( movd mm4, [esp+4])
|
||||||
AS2( paddq mm6, mm4)
|
AS2( paddq mm6, mm4)
|
||||||
AS2( movd mm4, [esp+8])
|
AS2( movd mm4, [esp+8])
|
||||||
#endif
|
|
||||||
AS2( paddq mm6, mm4)
|
AS2( paddq mm6, mm4)
|
||||||
AS2( lea ebp, [8*ebx])
|
AS2( lea ebp, [8*ebx])
|
||||||
AS2( sub edi, ebp) // reset edi to start of nhK
|
AS2( sub edi, ebp) // reset edi to start of nhK
|
||||||
|
|
@ -327,11 +301,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( movd [esp], mm7)
|
AS2( movd [esp], mm7)
|
||||||
AS2( psrlq mm7, 32)
|
AS2( psrlq mm7, 32)
|
||||||
AS2( paddq mm6, mm7)
|
AS2( paddq mm6, mm7)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+8], mm6)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+4], mm6)
|
AS2( movd [esp+4], mm6)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm6, 32)
|
AS2( psrlq mm6, 32)
|
||||||
AS2( paddq mm5, mm6)
|
AS2( paddq mm5, mm6)
|
||||||
AS2( psllq mm5, 2)
|
AS2( psllq mm5, 2)
|
||||||
|
|
@ -353,11 +323,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( movd a0, mm0)
|
AS2( movd a0, mm0)
|
||||||
AS2( psrlq mm0, 32)
|
AS2( psrlq mm0, 32)
|
||||||
AS2( movd mm1, k1)
|
AS2( movd mm1, k1)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd mm2, [esp+8])
|
|
||||||
#else
|
|
||||||
AS2( movd mm2, [esp+4])
|
AS2( movd mm2, [esp+4])
|
||||||
#endif
|
|
||||||
AS2( paddq mm1, mm2)
|
AS2( paddq mm1, mm2)
|
||||||
AS2( paddq mm0, mm1)
|
AS2( paddq mm0, mm1)
|
||||||
AS2( movd a1, mm0)
|
AS2( movd a1, mm0)
|
||||||
|
|
@ -395,11 +361,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( movq mm3, mm2)
|
AS2( movq mm3, mm2)
|
||||||
AS2( pmuludq mm2, k3) // a0*k3
|
AS2( pmuludq mm2, k3) // a0*k3
|
||||||
AS2( pmuludq mm3, mm7) // a0*k0
|
AS2( pmuludq mm3, mm7) // a0*k0
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd [esp+16], mm0)
|
|
||||||
#else
|
|
||||||
AS2( movd [esp+8], mm0)
|
AS2( movd [esp+8], mm0)
|
||||||
#endif
|
|
||||||
AS2( psrlq mm0, 32)
|
AS2( psrlq mm0, 32)
|
||||||
AS2( pmuludq mm7, mm5) // a1*k0
|
AS2( pmuludq mm7, mm5) // a1*k0
|
||||||
AS2( pmuludq mm5, k3) // a1*k3
|
AS2( pmuludq mm5, k3) // a1*k3
|
||||||
|
|
@ -422,22 +384,14 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
AS2( movd mm1, a3)
|
AS2( movd mm1, a3)
|
||||||
AS2( pmuludq mm1, k2) // a3*k2
|
AS2( pmuludq mm1, k2) // a3*k2
|
||||||
AS2( paddq mm5, mm2)
|
AS2( paddq mm5, mm2)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd mm2, [esp+8])
|
|
||||||
#else
|
|
||||||
AS2( movd mm2, [esp+4])
|
AS2( movd mm2, [esp+4])
|
||||||
#endif
|
|
||||||
AS2( psllq mm5, 1)
|
AS2( psllq mm5, 1)
|
||||||
AS2( paddq mm0, mm5)
|
AS2( paddq mm0, mm5)
|
||||||
AS2( psllq mm4, 33)
|
AS2( psllq mm4, 33)
|
||||||
AS2( movd a0, mm0)
|
AS2( movd a0, mm0)
|
||||||
AS2( psrlq mm0, 32)
|
AS2( psrlq mm0, 32)
|
||||||
AS2( paddq mm6, mm7)
|
AS2( paddq mm6, mm7)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( movd mm7, [esp+16])
|
|
||||||
#else
|
|
||||||
AS2( movd mm7, [esp+8])
|
AS2( movd mm7, [esp+8])
|
||||||
#endif
|
|
||||||
AS2( paddq mm0, mm6)
|
AS2( paddq mm0, mm6)
|
||||||
AS2( paddq mm0, mm2)
|
AS2( paddq mm0, mm2)
|
||||||
AS2( paddq mm3, mm1)
|
AS2( paddq mm3, mm1)
|
||||||
|
|
@ -461,11 +415,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
|
||||||
ASL(3)
|
ASL(3)
|
||||||
AS2( test ecx, ecx)
|
AS2( test ecx, ecx)
|
||||||
ASJ( jnz, 4, b)
|
ASJ( jnz, 4, b)
|
||||||
#if CRYPTOPP_BOOL_X32
|
|
||||||
AS2( add esp, 24)
|
|
||||||
#else
|
|
||||||
AS2( add esp, 12)
|
AS2( add esp, 12)
|
||||||
#endif
|
|
||||||
AS_POP_IF86( bp)
|
AS_POP_IF86( bp)
|
||||||
AS1( emms)
|
AS1( emms)
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
|
@ -800,7 +750,7 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
|
||||||
|
|
||||||
inline void VMAC_Base::VHASH_Update(const word64 *data, size_t blocksRemainingInWord64)
|
inline void VMAC_Base::VHASH_Update(const word64 *data, size_t blocksRemainingInWord64)
|
||||||
{
|
{
|
||||||
#if CRYPTOPP_SSE2_ASM_AVAILABLE && (CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32)
|
#if CRYPTOPP_SSE2_ASM_AVAILABLE && (CRYPTOPP_BOOL_X86)
|
||||||
if (HasSSE2())
|
if (HasSSE2())
|
||||||
{
|
{
|
||||||
VHASH_Update_SSE2(data, blocksRemainingInWord64, 0);
|
VHASH_Update_SSE2(data, blocksRemainingInWord64, 0);
|
||||||
|
|
@ -825,7 +775,7 @@ size_t VMAC_Base::HashMultipleBlocks(const word64 *data, size_t length)
|
||||||
return remaining;
|
return remaining;
|
||||||
}
|
}
|
||||||
|
|
||||||
static word64 L3Hash(const word64 *input, const word64 *l3Key, size_t len)
|
word64 L3Hash(const word64 *input, const word64 *l3Key, size_t len)
|
||||||
{
|
{
|
||||||
word64 rh, rl, t, z=0;
|
word64 rh, rl, t, z=0;
|
||||||
word64 p1 = input[0], p2 = input[1];
|
word64 p1 = input[0], p2 = input[1];
|
||||||
|
|
|
||||||
8
vmac.h
8
vmac.h
|
|
@ -11,10 +11,10 @@
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
#include "seckey.h"
|
#include "seckey.h"
|
||||||
|
|
||||||
// Clang 3.3 integrated assembler crash on Linux
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
// http://github.com/weidai11/cryptopp/issues/264
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
#if (defined(CRYPTOPP_LLVM_CLANG_VERSION) && (CRYPTOPP_LLVM_CLANG_VERSION < 30400)) || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
# define CRYPTOPP_DISABLE_VMAC_ASM
|
# define CRYPTOPP_DISABLE_VMAC_ASM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
|
||||||
12
whrlpool.cpp
12
whrlpool.cpp
|
|
@ -73,11 +73,11 @@
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
// "Inline assembly operands don't work with .intel_syntax",
|
#if defined(CRYPTOPP_DISABLE_WHIRLPOOL_ASM)
|
||||||
// http://llvm.org/bugs/show_bug.cgi?id=24232
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
#if defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_SSE2_ASM_AVAILABLE
|
# undef CRYPTOPP_SSE2_ASM_AVAILABLE
|
||||||
# undef CRYPTOPP_SSSE3_ASM_AVAILABLE
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
@ -438,15 +438,13 @@ void Whirlpool::Transform(word64 *digest, const word64 *block)
|
||||||
AS2( mov WORD_REG(cx), digest)
|
AS2( mov WORD_REG(cx), digest)
|
||||||
AS2( mov WORD_REG(dx), block)
|
AS2( mov WORD_REG(dx), block)
|
||||||
#endif
|
#endif
|
||||||
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X32
|
#if CRYPTOPP_BOOL_X86
|
||||||
AS2( mov eax, esp)
|
AS2( mov eax, esp)
|
||||||
AS2( and esp, -16)
|
AS2( and esp, -16)
|
||||||
AS2( sub esp, 16*8)
|
AS2( sub esp, 16*8)
|
||||||
AS_PUSH_IF86( ax)
|
AS_PUSH_IF86( ax)
|
||||||
#if CRYPTOPP_BOOL_X86
|
#if CRYPTOPP_BOOL_X86
|
||||||
#define SSE2_workspace esp+WORD_SZ
|
#define SSE2_workspace esp+WORD_SZ
|
||||||
#elif CRYPTOPP_BOOL_X32
|
|
||||||
#define SSE2_workspace esp+(WORD_SZ*2)
|
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define SSE2_workspace %3
|
#define SSE2_workspace %3
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,12 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux. Clang 3.4 due to compiler
|
||||||
|
// error with .intel_syntax, http://llvm.org/bugs/show_bug.cgi?id=24232
|
||||||
|
#if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_INTEL_ASM)
|
||||||
|
# define CRYPTOPP_DISABLE_WHIRLPOOL_ASM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
/// \brief Whirlpool message digest
|
/// \brief Whirlpool message digest
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue