Removed dependency to rtlgenrandom for windows because we use
std::random_device, so we remove the random function for linux by the way. Updated the get_env_variable for Windows so in the future we don't get suprises when having env variables with length > 1024 (even if its extremely rare).merge-requests/8/head
parent
d0727267e0
commit
69c6bb5399
|
@ -1,12 +1,10 @@
|
||||||
call build_set_protobuf_directories.bat
|
call build_set_protobuf_directories.bat
|
||||||
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x86.bat
|
call build_env_x86.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /I%PROTOBUF_X86_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api.dll
|
||||||
cl /LD /I%PROTOBUF_X86_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api.dll
|
|
||||||
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient.dll
|
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient.dll
|
||||||
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets.dll
|
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets.dll
|
||||||
call build_env_x64.bat
|
call build_env_x64.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /I%PROTOBUF_X64_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api64.dll
|
||||||
cl /LD /I%PROTOBUF_X64_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api64.dll
|
|
||||||
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient64.dll
|
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient64.dll
|
||||||
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets64.dll
|
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets64.dll
|
||||||
|
|
|
@ -3,8 +3,7 @@ del /Q release\lobby_connect\*
|
||||||
call build_set_protobuf_directories.bat
|
call build_set_protobuf_directories.bat
|
||||||
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x86.bat
|
call build_env_x86.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /DNO_DISK_WRITES /DLOBBY_CONNECT /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ lobby_connect.cpp dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib Comdlg32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\lobby_connect\lobby_connect.exe
|
||||||
cl /DNO_DISK_WRITES /DLOBBY_CONNECT /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ lobby_connect.cpp dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Comdlg32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\lobby_connect\lobby_connect.exe
|
|
||||||
del /Q /S release\lobby_connect\*.lib
|
del /Q /S release\lobby_connect\*.lib
|
||||||
del /Q /S release\lobby_connect\*.exp
|
del /Q /S release\lobby_connect\*.exp
|
||||||
copy Readme_lobby_connect.txt release\lobby_connect\Readme.txt
|
copy Readme_lobby_connect.txt release\lobby_connect\Readme.txt
|
||||||
|
|
|
@ -6,12 +6,10 @@ mkdir release
|
||||||
call build_set_protobuf_directories.bat
|
call build_set_protobuf_directories.bat
|
||||||
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x86.bat
|
call build_env_x86.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api.dll
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api.dll
|
|
||||||
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x64.bat
|
call build_env_x64.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api64.dll
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api64.dll
|
|
||||||
copy Readme_release.txt release\Readme.txt
|
copy Readme_release.txt release\Readme.txt
|
||||||
xcopy /s files_example\* release\
|
xcopy /s files_example\* release\
|
||||||
call build_win_release_experimental.bat
|
call build_win_release_experimental.bat
|
||||||
|
|
|
@ -3,12 +3,10 @@ del /Q release\experimental\*
|
||||||
call build_set_protobuf_directories.bat
|
call build_set_protobuf_directories.bat
|
||||||
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x86.bat
|
call build_env_x86.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api.dll
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api.dll
|
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient.dll
|
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient.dll
|
||||||
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
|
||||||
call build_env_x64.bat
|
call build_env_x64.bat
|
||||||
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
|
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api64.dll
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api64.dll
|
|
||||||
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient64.dll
|
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient64.dll
|
||||||
copy Readme_experimental.txt release\experimental\Readme.txt
|
copy Readme_experimental.txt release\experimental\Readme.txt
|
||||||
|
|
94
dll/base.cpp
94
dll/base.cpp
|
@ -16,32 +16,62 @@
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#include "base.h"
|
#include "base.h"
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
// Random device generator
|
||||||
|
static std::random_device rd;
|
||||||
|
static std::mt19937 gen(rd());
|
||||||
|
|
||||||
|
static void randombytes(char* buf, size_t len)
|
||||||
|
{
|
||||||
|
// uniform integer distribution
|
||||||
|
std::uniform_int_distribution<> dis(std::numeric_limits<int>::min(), std::numeric_limits<int>::max());
|
||||||
|
|
||||||
|
// Make sure we can hold our buffer size as int32_t
|
||||||
|
size_t rand_buf_len = len / 4 + 1;
|
||||||
|
int32_t* rand_buf = new int32_t[rand_buf_len];
|
||||||
|
// Generator some (pseudo) random numbers
|
||||||
|
for (int i = 0; i < rand_buf_len; ++i)
|
||||||
|
rand_buf[i] = dis(gen);
|
||||||
|
|
||||||
|
// Copy the random bytes to buffer
|
||||||
|
memcpy(buf, rand_buf, len);
|
||||||
|
|
||||||
|
// Don't forget to free it
|
||||||
|
delete[]rand_buf;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef STEAM_WIN32
|
#ifdef STEAM_WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
|
||||||
#define SystemFunction036 NTAPI SystemFunction036
|
|
||||||
#include <ntsecapi.h>
|
|
||||||
#undef SystemFunction036
|
|
||||||
|
|
||||||
static void
|
|
||||||
randombytes(char * const buf, const size_t size)
|
|
||||||
{
|
|
||||||
|
|
||||||
RtlGenRandom((PVOID) buf, (ULONG) size);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string get_env_variable(std::string name)
|
std::string get_env_variable(std::string name)
|
||||||
{
|
{
|
||||||
char env_variable[1024];
|
// base env buffer size
|
||||||
DWORD ret = GetEnvironmentVariableA(name.c_str(), env_variable, sizeof(env_variable));
|
constexpr size_t base_size = 1024;
|
||||||
if (ret <= 0) {
|
DWORD size = base_size;
|
||||||
return std::string();
|
std::string res(base_size, '\0');
|
||||||
}
|
size = GetEnvironmentVariableA(name.c_str(), const_cast<char*>(res.c_str()), size);
|
||||||
|
if (size <= 0) {
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
// If GetEnvironmentVariable return is greater than the buffer size,
|
||||||
|
// then the return parameter is the env var size
|
||||||
|
if (size > base_size)
|
||||||
|
{
|
||||||
|
// So allocate that much buffer to hold it all
|
||||||
|
res.resize(size);
|
||||||
|
size = GetEnvironmentVariableA(name.c_str(), const_cast<char*>(res.c_str()), size);
|
||||||
|
if (size <= 0)
|
||||||
|
{
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Then resize to what we need (without the null char,
|
||||||
|
// cause c_str() assures that it has a null char)
|
||||||
|
res.resize(size);
|
||||||
|
|
||||||
env_variable[ret] = 0;
|
return res;
|
||||||
return std::string(env_variable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -51,34 +81,6 @@ std::string get_env_variable(std::string name)
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
static int fd = -1;
|
|
||||||
|
|
||||||
static void randombytes(char *buf, size_t size)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (fd == -1) {
|
|
||||||
for (;;) {
|
|
||||||
fd = open("/dev/urandom",O_RDONLY);
|
|
||||||
if (fd != -1) break;
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (size > 0) {
|
|
||||||
if (size < 1048576) i = size; else i = 1048576;
|
|
||||||
|
|
||||||
i = read(fd,buf,i);
|
|
||||||
if (i < 1) {
|
|
||||||
sleep(1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf += i;
|
|
||||||
size -= i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string get_env_variable(std::string name)
|
std::string get_env_variable(std::string name)
|
||||||
{
|
{
|
||||||
char *env = getenv(name.c_str());
|
char *env = getenv(name.c_str());
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
#include <windows.h>
|
|
||||||
#define RtlGenRandom SystemFunction036
|
|
||||||
#define DLLEXPORT __declspec(dllexport)
|
|
||||||
DLLEXPORT BOOLEAN WINAPI RtlGenRandom(PVOID in, ULONG len) {}
|
|
|
@ -1,3 +0,0 @@
|
||||||
LIBRARY advapi32.dll
|
|
||||||
EXPORTS
|
|
||||||
SystemFunction036
|
|
Loading…
Reference in New Issue