AuroraRuntime/Source/AuRTEntrypoint.cpp
Reece Wilson 8a2947ffc5 [+] RMD128+BScFwd based HashCash (bcrypt DoS mitigation, acc creation, antibot, etc)
[*] Refactor bcrypt api: HashPW[Ex] -> HashPassword[Ex]
[+] ByteBuffer::GetOrAllocateLinearWriteable
[+] ByteBuffer::Can[Read/Write](n)
[+] ByteBuffer::GetLinear[Read/Writable]able(n)
[*] Split RNG.cpp into two files
[+] EHashType::eSHA2_48 (_32, _64 was already in place. missed 48/384 bit)
[+] AuCrypto::HMAC and IHMACContext
(AuHashing)
[+] EHashType::eSHA3_28
[+] EHashType::eSHA3_32
[+] EHashType::eSHA3_48
[+] EHashType::eSHA3_64
(AuCrypto)
[+] EHashType::eSHA2_48_384
[+] EHashType::eSHA2_64_512
[+] EHashType::eSHA3_28_224
[+] EHashType::eSHA3_32_256
[+] EHashType::eSHA3_48_384
[+] EHashType::eSHA3_64_512
[*] (IRandomDevice) class -> struct
[*] Bugfix: cast in Promise<SuccessValue_t, ErrorValue_t>::WriteIntoError
[+] Missing AuHashing namespace alias
[*] Time util: pad ms when fraction of a second to 3 digits
2022-09-19 02:34:57 +01:00

180 lines
3.9 KiB
C++

/***
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: Entrypoint.cpp
Date: 2021-5-13
Author: Reece
***/
#define _AURORA_RUNTIME_BUILD_API_INTERFACES
#include <AuroraCommon.hpp>
#include <AuroraRuntime.hpp>
#include "RuntimeInternal.hpp"
#include "AuCrypto.hpp"
#include "Processes/Processes.hpp"
#include "RNG/RNG.hpp"
#include "Locale/Locale.hpp"
#include "Console/Console.hpp"
#include "IO/FS/FS.hpp"
#include "IO/IO.hpp"
#include "IO/Net/Net.hpp"
#include "Hashing/Hashing.hpp"
#include "Debug/Debug.hpp"
#include "Async/Async.hpp"
#include "HWInfo/HWInfo.hpp"
#include "Telemetry/Telemetry.hpp"
#include "Threading/Threads/OSThread.hpp"
#include "SWInfo/SWInfo.hpp"
#if defined(AURORA_PLATFORM_WIN32)
#include "Extensions/Win32/DarkTheme.hpp"
#endif
#include "Process/Process.hpp"
#include "Exit/Exit.hpp"
#include "CmdLine/CmdLine.hpp"
#include "Grug/Grug.hpp"
#include "Threading/Sleep.hpp"
#if defined(AURORA_IS_LINUX_DERIVED)
void LinuxSuperSecretIOTick();
#endif
namespace Aurora::IO::TLS
{
void TLSInit();
}
static thread_local bool tlsHackIsMainThread {};
static void Init()
{
gRuntimeRunLevel = 1;
tlsHackIsMainThread = true;
#if defined(AURORA_PLATFORM_WIN32)
Aurora::Extensions::Win32::InitDarkMode();
#endif
Crypto::InitCrypto();
Aurora::RNG::Init();
Aurora::IO::TLS::TLSInit();
Aurora::Threading::InitSleep();
Aurora::Process::InitProcess();
Aurora::SWInfo::InitSwInfo();
Aurora::Threading::Threads::InitThreading();
Aurora::Exit::InitExit();
Aurora::IO::Net::InitNetworking();
Aurora::Console::Init();
Aurora::IO::FS::InitResources();
Aurora::IO::Init();
Aurora::Console::Init2();
Aurora::HWInfo::Init();
Aurora::Telemetry::Init();
Aurora::Grug::InitGrug();
Aurora::Debug::InitDebug();
Aurora::Locale::Init();
Aurora::CmdLine::Init();
Aurora::Processes::Init();
Aurora::Hashing::InitHashing();
Aurora::Async::InitAsync();
gRuntimeRunLevel = 2;
}
static void Pump()
{
Aurora::Console::Pump();
#if defined(AURORA_IS_LINUX_DERIVED)
::LinuxSuperSecretIOTick();
#endif
}
static void RuntimeLateClean();
static void Deinit()
{
//tlsHackIsMainThread = true;
gRuntimeRunLevel = 3;
Aurora::Exit::PostLevel(AuThreads::GetThread(), Aurora::Exit::ETriggerLevel::eSafeTermination);
gRuntimeRunLevel = 4;
Aurora::RNG::Release();
Aurora::Async::ShutdownAsync();
Aurora::Grug::DeinitGrug();
RuntimeLateClean();
}
static void RuntimeLateClean() // strictly IO flushing + DeinitGrug can sometimes fail under POSIX
{
Aurora::Console::Exit();
Aurora::Processes::Deinit();
Aurora::Exit::DeinitExit();
Aurora::IO::Deinit();
gRuntimeRunLevel = 5;
}
namespace Aurora
{
static bool gRuntimeHasStarted {};
bool RuntimeIsMainThread()
{
return tlsHackIsMainThread;
}
AUKN_SYM void RuntimeStart(const RuntimeStartInfo &info)
{
gRuntimeConfig = info;
if (gRuntimeHasStarted)
{
SysPanic("Do not nest RuntimeStart/RuntimeShutdowns. Modules should respect RuntimeHasStarted()");
}
try
{
Init();
}
catch (...)
{
SysPanic("A fatal error occurred during the initialization of Aurora Runtime");
}
gRuntimeHasStarted = true;
}
AUKN_SYM bool RuntimeHasStarted()
{
return gRuntimeHasStarted;
}
AUKN_SYM void RuntimeShutdown()
{
gRuntimeHasStarted = false;
Deinit();
}
AUKN_SYM void RuntimeSysPump()
{
Pump();
}
void RuntimeLateClean()
{
::RuntimeLateClean();
}
}
#if defined(AURORA_PLATFORM_WIN32)
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
}
return TRUE;
}
#endif