mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Linux: Fix build error caused by changes for dynamic CPU SHA support detection
This commit is contained in:
@@ -21,6 +21,66 @@
|
|||||||
|
|
||||||
#if CRYPTOPP_SHANI_AVAILABLE
|
#if CRYPTOPP_SHANI_AVAILABLE
|
||||||
|
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#include <signal.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
typedef void (*SigHandler)(int);
|
||||||
|
|
||||||
|
static jmp_buf s_jmpNoSHA;
|
||||||
|
static void SigIllHandlerSHA(int p)
|
||||||
|
{
|
||||||
|
longjmp(s_jmpNoSHA, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int TrySHA256()
|
||||||
|
{
|
||||||
|
volatile int result = 0;
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
__try
|
||||||
|
#else
|
||||||
|
SigHandler oldHandler = signal(SIGILL, SigIllHandlerSHA);
|
||||||
|
if (oldHandler == SIG_ERR)
|
||||||
|
return 0;
|
||||||
|
if (setjmp(s_jmpNoSHA))
|
||||||
|
result = 0;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
// Known input message block
|
||||||
|
__m128i msg0 = _mm_setr_epi32(0x12345678, 0x9ABCDEF0, 0x87654321, 0x0FEDCBA9);
|
||||||
|
__m128i msg1 = _mm_setr_epi32(0x11111111, 0x22222222, 0x33333333, 0x44444444);
|
||||||
|
|
||||||
|
// SHA256 message schedule update
|
||||||
|
__m128i tmp = _mm_sha256msg1_epu32(msg0, msg1);
|
||||||
|
|
||||||
|
// Verify result - these values were pre-computed for the given input
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
if (tmp.m128i_u32[0] == 0xD8131B44 &&
|
||||||
|
tmp.m128i_u32[1] == 0x9DE6E22B &&
|
||||||
|
tmp.m128i_u32[2] == 0xA86D643A &&
|
||||||
|
tmp.m128i_u32[3] == 0x74320FED)
|
||||||
|
#else
|
||||||
|
if (((uint32_t*)(&tmp))[0] == 0xD8131B44 &&
|
||||||
|
((uint32_t*)(&tmp))[1] == 0x9DE6E22B &&
|
||||||
|
((uint32_t*)(&tmp))[2] == 0xA86D643A &&
|
||||||
|
((uint32_t*)(&tmp))[3] == 0x74320FED)
|
||||||
|
#endif
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
// ignore error if SHA instructions not supported
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
signal(SIGILL, oldHandler);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void sha256_intel(void *mp, uint_32t state[8], uint_64t num_blks)
|
void sha256_intel(void *mp, uint_32t state[8], uint_64t num_blks)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,16 +55,6 @@ static void SigIllHandlerAESNI(int p)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined (_UEFI) && (defined(__SHA__) || defined(__INTEL_COMPILER) || CRYPTOPP_SHANI_AVAILABLE)
|
|
||||||
|
|
||||||
static jmp_buf s_jmpNoSHA;
|
|
||||||
static void SigIllHandlerSHA(int p)
|
|
||||||
{
|
|
||||||
longjmp(s_jmpNoSHA, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if CRYPTOPP_BOOL_X64 == 0
|
#if CRYPTOPP_BOOL_X64 == 0
|
||||||
static jmp_buf s_jmpNoSSE2;
|
static jmp_buf s_jmpNoSSE2;
|
||||||
static void SigIllHandlerSSE2(int p)
|
static void SigIllHandlerSSE2(int p)
|
||||||
@@ -322,52 +312,7 @@ static int Detect_MS_HyperV_AES ()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__SHA__) || defined(__INTEL_COMPILER) || CRYPTOPP_SHANI_AVAILABLE
|
#if defined(__SHA__) || defined(__INTEL_COMPILER) || CRYPTOPP_SHANI_AVAILABLE
|
||||||
static int TrySHA256()
|
extern int TrySHA256();
|
||||||
{
|
|
||||||
volatile int result = 0;
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
__try
|
|
||||||
#else
|
|
||||||
SigHandler oldHandler = signal(SIGILL, SigIllHandlerSHA);
|
|
||||||
if (oldHandler == SIG_ERR)
|
|
||||||
return 0;
|
|
||||||
if (setjmp(s_jmpNoSHA))
|
|
||||||
result = 0;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
// Known input message block
|
|
||||||
__m128i msg0 = _mm_setr_epi32(0x12345678, 0x9ABCDEF0, 0x87654321, 0x0FEDCBA9);
|
|
||||||
__m128i msg1 = _mm_setr_epi32(0x11111111, 0x22222222, 0x33333333, 0x44444444);
|
|
||||||
|
|
||||||
// SHA256 message schedule update
|
|
||||||
__m128i tmp = _mm_sha256msg1_epu32(msg0, msg1);
|
|
||||||
|
|
||||||
// Verify result - these values were pre-computed for the given input
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
if (tmp.m128i_u32[0] == 0xD8131B44 &&
|
|
||||||
tmp.m128i_u32[1] == 0x9DE6E22B &&
|
|
||||||
tmp.m128i_u32[2] == 0xA86D643A &&
|
|
||||||
tmp.m128i_u32[3] == 0x74320FED)
|
|
||||||
#else
|
|
||||||
if (((uint32_t*)(&tmp))[0] == 0xD8131B44 &&
|
|
||||||
((uint32_t*)(&tmp))[1] == 0x9DE6E22B &&
|
|
||||||
((uint32_t*)(&tmp))[2] == 0xA86D643A &&
|
|
||||||
((uint32_t*)(&tmp))[3] == 0x74320FED)
|
|
||||||
#endif
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
|
||||||
{
|
|
||||||
// ignore error if SHA instructions not supported
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
signal(SIGILL, oldHandler);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static BOOL CheckSHA256Support() {
|
static BOOL CheckSHA256Support() {
|
||||||
|
|||||||
Reference in New Issue
Block a user