Fixed Clang 3.3 integrated assembler crash on Linux
parent
4cf8d660d2
commit
885b94707c
19
gcm.cpp
19
gcm.cpp
|
|
@ -12,6 +12,17 @@
|
||||||
#ifndef CRYPTOPP_IMPORTS
|
#ifndef CRYPTOPP_IMPORTS
|
||||||
#ifndef CRYPTOPP_GENERATE_X64_MASM
|
#ifndef CRYPTOPP_GENERATE_X64_MASM
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux
|
||||||
|
#if defined(CRYPTOPP_CLANG_VERSION) && (CRYPTOPP_CLANG_VERSION < 30400)
|
||||||
|
# undef CRYPTOPP_X86_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_X32_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_X64_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
|
||||||
|
# undef CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE
|
||||||
|
# define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 0
|
||||||
|
# define CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gcm.h"
|
#include "gcm.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
|
|
@ -807,10 +818,10 @@ size_t GCM_Base::AuthenticateBlocks(const byte *data, size_t len)
|
||||||
SSE2_MUL_32BITS(2)
|
SSE2_MUL_32BITS(2)
|
||||||
SSE2_MUL_32BITS(3)
|
SSE2_MUL_32BITS(3)
|
||||||
|
|
||||||
AS2( add WORD_REG(cx), 16 )
|
AS2( add WORD_REG(cx), 16 )
|
||||||
AS2( sub WORD_REG(dx), 1 )
|
AS2( sub WORD_REG(dx), 1 )
|
||||||
ASJ( jnz, 1, b )
|
ASJ( jnz, 1, b )
|
||||||
AS2( movdqa [WORD_REG(si)], xmm0 )
|
AS2( movdqa [WORD_REG(si)], xmm0 )
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
ATT_PREFIX
|
ATT_PREFIX
|
||||||
|
|
|
||||||
3
panama.h
3
panama.h
|
|
@ -10,7 +10,8 @@
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
#include "secblock.h"
|
#include "secblock.h"
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X32
|
// Clang 3.3 integrated assembler crash on Linux
|
||||||
|
#if CRYPTOPP_BOOL_X32 || (defined(CRYPTOPP_CLANG_VERSION) && (CRYPTOPP_CLANG_VERSION < 30400))
|
||||||
# define CRYPTOPP_DISABLE_PANAMA_ASM
|
# define CRYPTOPP_DISABLE_PANAMA_ASM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@
|
||||||
#include "seckey.h"
|
#include "seckey.h"
|
||||||
#include "secblock.h"
|
#include "secblock.h"
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X32
|
// Clang 3.3 integrated assembler crash on Linux
|
||||||
|
#if CRYPTOPP_BOOL_X32 || (defined(CRYPTOPP_CLANG_VERSION) && (CRYPTOPP_CLANG_VERSION < 30400))
|
||||||
# define CRYPTOPP_DISABLE_RIJNDAEL_ASM
|
# define CRYPTOPP_DISABLE_RIJNDAEL_ASM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
8
sha.cpp
8
sha.cpp
|
|
@ -102,7 +102,7 @@ void SHA256::InitState(HashWordType *state)
|
||||||
memcpy(state, s, sizeof(s));
|
memcpy(state, s, sizeof(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
|
#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
CRYPTOPP_ALIGN_DATA(16) extern const word32 SHA256_K[64] CRYPTOPP_SECTION_ALIGN16 = {
|
CRYPTOPP_ALIGN_DATA(16) extern const word32 SHA256_K[64] CRYPTOPP_SECTION_ALIGN16 = {
|
||||||
#else
|
#else
|
||||||
extern const word32 SHA256_K[64] = {
|
extern const word32 SHA256_K[64] = {
|
||||||
|
|
@ -127,7 +127,7 @@ extern const word32 SHA256_K[64] = {
|
||||||
|
|
||||||
#endif // #ifndef CRYPTOPP_GENERATE_X64_MASM
|
#endif // #ifndef CRYPTOPP_GENERATE_X64_MASM
|
||||||
|
|
||||||
#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_GENERATE_X64_MASM)
|
#if (defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_GENERATE_X64_MASM)) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
|
|
||||||
static void CRYPTOPP_FASTCALL X86_SHA256_HashBlocks(word32 *state, const word32 *data, size_t len
|
static void CRYPTOPP_FASTCALL X86_SHA256_HashBlocks(word32 *state, const word32 *data, size_t len
|
||||||
#if defined(_MSC_VER) && (_MSC_VER == 1200)
|
#if defined(_MSC_VER) && (_MSC_VER == 1200)
|
||||||
|
|
@ -461,7 +461,7 @@ void CRYPTOPP_FASTCALL X86_SHA256_HashBlocks(word32 *state, const word32 *data,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
|
#if (defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
|
|
||||||
size_t SHA256::HashMultipleBlocks(const word32 *input, size_t length)
|
size_t SHA256::HashMultipleBlocks(const word32 *input, size_t length)
|
||||||
{
|
{
|
||||||
|
|
@ -503,7 +503,7 @@ size_t SHA224::HashMultipleBlocks(const word32 *input, size_t length)
|
||||||
void SHA256::Transform(word32 *state, const word32 *data)
|
void SHA256::Transform(word32 *state, const word32 *data)
|
||||||
{
|
{
|
||||||
word32 W[16];
|
word32 W[16];
|
||||||
#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
|
#if (defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
// this byte reverse is a waste of time, but this function is only called by MDC
|
// this byte reverse is a waste of time, but this function is only called by MDC
|
||||||
ByteReverse(W, data, BLOCKSIZE);
|
ByteReverse(W, data, BLOCKSIZE);
|
||||||
X86_SHA256_HashBlocks(state, W, BLOCKSIZE - !HasSSE2());
|
X86_SHA256_HashBlocks(state, W, BLOCKSIZE - !HasSSE2());
|
||||||
|
|
|
||||||
9
sha.h
9
sha.h
|
|
@ -10,6 +10,11 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "iterhash.h"
|
#include "iterhash.h"
|
||||||
|
|
||||||
|
// Clang 3.3 integrated assembler crash on Linux
|
||||||
|
#if defined(CRYPTOPP_CLANG_VERSION) && (CRYPTOPP_CLANG_VERSION < 30400)
|
||||||
|
# define CRYPTOPP_DISABLE_SHA_ASM
|
||||||
|
#endif
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
/// <a href="http://www.weidai.com/scan-mirror/md.html#SHA-1">SHA-1</a>
|
/// <a href="http://www.weidai.com/scan-mirror/md.html#SHA-1">SHA-1</a>
|
||||||
|
|
@ -27,7 +32,7 @@ typedef SHA1 SHA; // for backwards compatibility
|
||||||
class CRYPTOPP_DLL SHA256 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA256, 32, true>
|
class CRYPTOPP_DLL SHA256 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA256, 32, true>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
#if (defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
size_t HashMultipleBlocks(const word32 *input, size_t length);
|
size_t HashMultipleBlocks(const word32 *input, size_t length);
|
||||||
#endif
|
#endif
|
||||||
static void CRYPTOPP_API InitState(HashWordType *state);
|
static void CRYPTOPP_API InitState(HashWordType *state);
|
||||||
|
|
@ -39,7 +44,7 @@ public:
|
||||||
class CRYPTOPP_DLL SHA224 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA224, 28, true>
|
class CRYPTOPP_DLL SHA224 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA224, 28, true>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
#if (defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X32_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_SHA_ASM)
|
||||||
size_t HashMultipleBlocks(const word32 *input, size_t length);
|
size_t HashMultipleBlocks(const word32 *input, size_t length);
|
||||||
#endif
|
#endif
|
||||||
static void CRYPTOPP_API InitState(HashWordType *state);
|
static void CRYPTOPP_API InitState(HashWordType *state);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue