Don't use configure script for crypto.

Just set defines and include sources directly.
Also fix ome bcrypt compile issues.
This commit is contained in:
Fletcher Dunn
2019-08-28 15:24:02 -07:00
parent b795a21127
commit 08a2541e33
9 changed files with 79 additions and 105 deletions
+13 -9
View File
@@ -42,10 +42,6 @@ set(GNS_PROTOS
)
set(GNS_SRCS
"common/crypto_bcrypt.cpp"
"common/crypto_openssl.cpp"
"common/crypto_25519_donna.cpp"
"common/crypto_25519_openssl.cpp"
"common/crypto_textencode.cpp"
"common/keypair.cpp"
"common/steamid.cpp"
@@ -69,9 +65,14 @@ set(GNS_SRCS
)
if(GNS_CRYPTO_25519_OPENSSL)
# No additional sources needed!
elseif(GNS_CRYPTO_25519_REF)
target_compile_definitions(${GNS_TARGET} PRIVATE STEAMNETWORKINGSOCKETS_CRYPTO_25519_OPENSSL)
set(GNS_SRCS ${GNS_SRCS}
"common/crypto_25519_openssl.cpp"
)
elseif(GNS_CRYPTO_25519_REF)
target_compile_definitions(${GNS_TARGET} PRIVATE VALVE_CRYPTO_25519_DONNA)
set(GNS_SRCS ${GNS_SRCS}
"common/crypto_25519_donna.cpp"
"external/curve25519-donna/curve25519.c"
"external/curve25519-donna/curve25519_VALVE_sse2.c"
"external/ed25519-donna/ed25519_VALVE.c"
@@ -82,11 +83,16 @@ else()
endif()
if(GNS_CRYPTO_AES_OPENSSL)
target_compile_definitions(${GNS_TARGET} PRIVATE STEAMNETWORKINGSOCKETS_CRYPTO_VALVEOPENSSL)
set(GNS_SRCS ${GNS_SRCS}
"common/crypto_openssl.cpp"
"common/opensslwrapper.cpp"
)
elseif(GNS_CRYPTO_AES_BCRYPT)
# No additional sources
target_compile_definitions(${GNS_TARGET} PRIVATE STEAMNETWORKINGSOCKETS_CRYPTO_BCRYPT)
set(GNS_SRCS ${GNS_SRCS}
"common/crypto_bcrypt.cpp"
)
else()
message(FATAL_ERROR "Unknown AES implementation")
endif()
@@ -281,6 +287,4 @@ target_compile_definitions(GameNetworkingSockets_s INTERFACE STEAMNETWORKINGSOCK
gamenetworkingsockets_common(GameNetworkingSockets_s)
add_sanitizers(GameNetworkingSockets_s)
configure_file(gnsconfig.h.in.cmake gnsconfig.h)
# vim: set ts=4 sts=4 sw=4 noet:
+2 -4
View File
@@ -1,10 +1,8 @@
//========= Copyright Valve LLC, All rights reserved. ========================
#include "gnsconfig.h"
#ifdef GNS_CRYPTO_25519_REF
#include "crypto.h"
#ifdef VALVE_CRYPTO_25519_DONNA
#ifdef _WIN64
#include "intrin.h"
#endif
+2 -5
View File
@@ -1,11 +1,8 @@
//========= Copyright Valve LLC, All rights reserved. ========================
#include "gnsconfig.h"
#ifdef GNS_CRYPTO_25519_OPENSSL
#include "crypto.h"
#ifdef STEAMNETWORKINGSOCKETS_CRYPTO_25519_OPENSSL
#include <openssl/evp.h>
#if OPENSSL_VERSION_NUMBER < 0x10101000
+9 -11
View File
@@ -1,12 +1,10 @@
//========= Copyright Valve LLC, All rights reserved. ========================
#include "crypto.h"
#include "gnsconfig.h"
#ifdef GNS_CRYPTO_AES_BCRYPT
#ifdef STEAMNETWORKINGSOCKETS_CRYPTO_BCRYPT
#include <tier0/vprof.h>
#include <tier1/utlmemory.h>
#include "crypto.h"
#include <windows.h>
#include <stdio.h>
@@ -113,12 +111,12 @@ bool AES_GCM_CipherContext::InitCipher( const void *pKey, size_t cbKey, size_t c
if (!ctx->pbKeyObject)
return false;
if ( (ret = BCryptGenerateSymmetricKey(ctx->hAlgAES, &ctx->hKey, ctx->pbKeyObject, ctx->cbKeyObject, ( PUCHAR )pKey, cbKey, 0 )) != 0 )
if ( (ret = BCryptGenerateSymmetricKey(ctx->hAlgAES, &ctx->hKey, ctx->pbKeyObject, ctx->cbKeyObject, ( PUCHAR )pKey, (ULONG)cbKey, 0 )) != 0 )
return false;
AssertFatal( ctx->hKey != INVALID_HANDLE_VALUE );
m_cbIV = cbIV;
m_cbTag = cbTag;
m_cbIV = (uint32)cbIV;
m_cbTag = (uint32)cbTag;
return true;
}
@@ -139,12 +137,12 @@ bool AES_GCM_EncryptContext::Encrypt(
paddingInfo.cbTag = m_cbTag;
paddingInfo.pbNonce = ( PUCHAR )pIV;
paddingInfo.cbNonce = m_cbIV;
paddingInfo.cbAuthData = cbAuthenticationData;
paddingInfo.cbAuthData = (ULONG)cbAuthenticationData;
paddingInfo.pbAuthData = cbAuthenticationData ? (PUCHAR)pAdditionalAuthenticationData : NULL;
ULONG ct_size;
NTSTATUS status = BCryptEncrypt(
ctx->hKey,
( PUCHAR )pPlaintextData, cbPlaintextData,
( PUCHAR )pPlaintextData, (ULONG)cbPlaintextData,
&paddingInfo,
NULL, 0,
( PUCHAR )pEncryptedDataAndTag, *pcbEncryptedDataAndTag,
@@ -176,12 +174,12 @@ bool AES_GCM_DecryptContext::Decrypt(
paddingInfo.cbTag = m_cbTag;
paddingInfo.pbNonce = (PUCHAR)pIV;
paddingInfo.cbNonce = m_cbIV;
paddingInfo.cbAuthData = cbAuthenticationData;
paddingInfo.cbAuthData = (ULONG)cbAuthenticationData;
paddingInfo.pbAuthData = cbAuthenticationData ? (PUCHAR)pAdditionalAuthenticationData : NULL;
ULONG pt_size;
NTSTATUS status = BCryptDecrypt(
ctx->hKey,
( PUCHAR )pEncryptedDataAndTag, cbEncryptedDataAndTag,
( PUCHAR )pEncryptedDataAndTag, (ULONG)cbEncryptedDataAndTag,
&paddingInfo,
NULL, 0,
( PUCHAR )pPlaintextData, *pcbPlaintextData,
+10 -8
View File
@@ -1,12 +1,7 @@
//========= Copyright Valve LLC, All rights reserved. ========================
#include "gnsconfig.h"
#ifdef GNS_CRYPTO_AES_OPENSSL
// Note: not using precompiled headers! This file is included directly by
// several different projects and may include Crypto++ headers depending
// on compile-time defines, which in turn pulls in other odd dependencies
#include "crypto.h"
#ifdef STEAMNETWORKINGSOCKETS_CRYPTO_VALVEOPENSSL
#if defined(_WIN32)
#ifdef __MINGW32__
@@ -33,6 +28,13 @@
#include "opensslwrapper.h"
#if OPENSSL_VERSION_NUMBER < 0x10100000
inline void EVP_MD_CTX_free( EVP_MD_CTX *ctx )
{
EVP_MD_CTX_destroy( ctx );
}
#endif
void OneTimeCryptoInitOpenSSL()
{
static bool once;
@@ -449,4 +451,4 @@ void CCrypto::GenerateHMAC256( const uint8 *pubData, uint32 cubData, const uint8
VerifyFatal(EVP_DigestSignFinal(mdctx.ctx, *pOutputDigest, &needed) == 1);
}
#endif //GNS_CRYPTO_AES_OPENSSL
#endif //STEAMNETWORKINGSOCKETS_CRYPTO_VALVEOPENSSL
@@ -11,7 +11,7 @@ curve25519_scalarmult_donna(curve25519_key mypublic, const curve25519_key n, con
packed32bignum25519 qx, qz, pqz, pqx;
packed64bignum25519 nq, sq, sqscalar, prime, primex, primez, nqpq;
bignum25519mulprecomp preq;
size_t bit, lastbit, i;
uint32_t bit, lastbit, i;
curve25519_expand(nqpqx, basepoint);
curve25519_mul_precompute(&preq, nqpqx);
+29 -29
View File
@@ -373,34 +373,34 @@ static void ed25519_hash( uint8_t *hash, const uint8_t *in, size_t inlen ) { ed2
#ifdef _WIN32
/* Win32 always has RtlGenRandom to act as an entropy source for ed25519_sign_open_batch */
#ifndef NO_ED25519_RANDOMBYTES_IMPL
#define WIN32_LEAN_AND_MEAN
#define NOGDI
#include <windows.h>
void ed25519_randombytes_unsafe(void *p, size_t len) {
// the Microsoft CRT imports RtlGenRandom as a direct link to SystemFunction036 in advapi32.dll
// so we can safely do the same - it can never be removed without breaking all VC2010 apps.
static BOOLEAN (WINAPI *pfnRtlGenRandom)( void *, unsigned long );
if ( !pfnRtlGenRandom ) {
pfnRtlGenRandom = ( BOOLEAN (WINAPI *)( void *, unsigned long ) ) GetProcAddress( LoadLibraryA("advapi32.dll"), "SystemFunction036" );
}
(*pfnRtlGenRandom)( p, (unsigned long) len );
}
#endif
#else
/* Other platforms - ed25519_sign_open_batch will explode without an entropy source;
remap the function name so that linking will fail, rather than exploding at runtime */
#define ed25519_sign_open_batch ed25519_sign_open_batch_DO_NOT_USE
#ifndef NO_ED25519_RANDOMBYTES_IMPL
void ed25519_randombytes_unsafe(void *p, size_t len) { /*boom*/ *(volatile int*)0 = 1; }
#endif
#endif
//#ifdef _WIN32
///* Win32 always has RtlGenRandom to act as an entropy source for ed25519_sign_open_batch */
//
//#ifndef NO_ED25519_RANDOMBYTES_IMPL
//#define WIN32_LEAN_AND_MEAN
//#define NOGDI
//#include <windows.h>
//void ed25519_randombytes_unsafe(void *p, size_t len) {
// // the Microsoft CRT imports RtlGenRandom as a direct link to SystemFunction036 in advapi32.dll
// // so we can safely do the same - it can never be removed without breaking all VC2010 apps.
// static BOOLEAN (WINAPI *pfnRtlGenRandom)( void *, unsigned long );
// if ( !pfnRtlGenRandom ) {
// pfnRtlGenRandom = ( BOOLEAN (WINAPI *)( void *, unsigned long ) ) GetProcAddress( LoadLibraryA("advapi32.dll"), "SystemFunction036" );
// }
// (*pfnRtlGenRandom)( p, (unsigned long) len );
//}
//#endif
//
//#else
//
///* Other platforms - ed25519_sign_open_batch will explode without an entropy source;
// remap the function name so that linking will fail, rather than exploding at runtime */
//#define ed25519_sign_open_batch ed25519_sign_open_batch_DO_NOT_USE
//
//#ifndef NO_ED25519_RANDOMBYTES_IMPL
//void ed25519_randombytes_unsafe(void *p, size_t len) { /*boom*/ *(volatile int*)0 = 1; }
//#endif
//
//#endif
#include "ed25519.c"
-11
View File
@@ -1,11 +0,0 @@
/* AES-GCM implmented using Windows Crypto API: Next Generation (CNG) functions */
#cmakedefine GNS_CRYPTO_AES_BCRYPT
/* AES-GCM implemented using OpenSSL */
#cmakedefine GNS_CRYPTO_AES_OPENSSL
/* ed25519/curve25519 using reference C implementation */
#cmakedefine GNS_CRYPTO_25519_REF
/* ed25519/curve25519 using OpenSSL implementation */
#cmakedefine GNS_CRYPTO_25519_OPENSSL
+13 -27
View File
@@ -31,27 +31,6 @@ if not use_bcrypt
endif
endif
conf_data = configuration_data()
conf_data.set('GNS_CRYPTO_AES_BCRYPT', false)
conf_data.set('GNS_CRYPTO_AES_OPENSSL', false)
conf_data.set('GNS_CRYPTO_25519_REF', false)
conf_data.set('GNS_CRYPTO_25519_OPENSSL', false)
if use_bcrypt
conf_data.set('GNS_CRYPTO_AES_BCRYPT', true)
conf_data.set('GNS_CRYPTO_25519_REF', true)
else
conf_data.set('GNS_CRYPTO_AES_OPENSSL', true)
if good_libcrypto.found()
conf_data.set('GNS_CRYPTO_25519_OPENSSL', true)
else
conf_data.set('GNS_CRYPTO_25519_REF', true)
endif
endif
configure_file(output: 'gnsconfig.h', configuration: conf_data)
dependencies += [
dep_threads,
dependency('protobuf', version: '>=3.0.0'),
@@ -81,10 +60,6 @@ protobuf_sources = [
]
sources = [
'common/crypto_bcrypt.cpp',
'common/crypto_openssl.cpp',
'common/crypto_25519_donna.cpp',
'common/crypto_25519_openssl.cpp',
'common/crypto_textencode.cpp',
'common/keypair.cpp',
'common/steamid.cpp',
@@ -109,16 +84,27 @@ sources = [
if use_bcrypt
dependencies += [ c_compiler.find_library('bcrypt') ]
cpp_flags += [ '-DED25519_HASH_BCRYPT' ]
sources += [ 'common/crypto_bcrypt.cpp' ]
cpp_flags += [ '-DED25519_HASH_BCRYPT', '-DSTEAMNETWORKINGSOCKETS_CRYPTO_BCRYPT' ]
else
cpp_flags += [ '-DSTEAMNETWORKINGSOCKETS_CRYPTO_VALVEOPENSSL' ]
sources += [
'common/opensslwrapper.cpp',
'common/crypto_openssl.cpp',
]
// Use OpenSSL for 25519 if possible
if good_libcrypto.found()
cpp_flags += [ '-DSTEAMNETWORKINGSOCKETS_CRYPTO_25519_OPENSSL' ]
sources += [ 'common/crypto_25519_openssl.cpp' ]
endif
endif
# Select 25519 crypto provider
# Use reference 25519 crypto implementation?
if use_bcrypt or not good_libcrypto.found()
cpp_flags += [ '-DVALVE_CRYPTO_25519_DONNA' ]
sources += [
'common/crypto_25519_donna.cpp',
'external/curve25519-donna/curve25519.c',
'external/curve25519-donna/curve25519_VALVE_sse2.c',
'external/ed25519-donna/ed25519_VALVE.c',