Botan 3.6.1
Crypto and TLS for C&
|
Classes | |
class | Echo_Suppression |
class | Socket |
class | SocketUDP |
Functions | |
std::vector< void * > | allocate_locked_pages (size_t count) |
unsigned long | auxval_hwcap () |
unsigned long | auxval_hwcap2 () |
std::string BOTAN_TEST_API | format_time (time_t time, const std::string &format) |
void | free_locked_pages (const std::vector< void * > &pages) |
unsigned long | get_auxval (unsigned long id) |
size_t BOTAN_TEST_API | get_cpu_available () |
uint64_t BOTAN_TEST_API | get_cpu_cycle_counter () |
uint64_t BOTAN_TEST_API | get_high_resolution_clock () |
size_t | get_memory_locking_limit () |
uint32_t BOTAN_TEST_API | get_process_id () |
uint64_t BOTAN_TEST_API | get_system_timestamp_ns () |
bool | has_auxval () |
std::unique_ptr< Socket > BOTAN_TEST_API | open_socket (std::string_view hostname, std::string_view service, std::chrono::milliseconds timeout) |
std::unique_ptr< SocketUDP > BOTAN_TEST_API | open_socket_udp (std::string_view hostname, std::string_view service, std::chrono::microseconds timeout) |
std::unique_ptr< SocketUDP > BOTAN_TEST_API | open_socket_udp (std::string_view uri, std::chrono::microseconds timeout) |
void | page_allow_access (void *page) |
void | page_named (void *page, size_t size) |
void | page_prohibit_access (void *page) |
bool | read_env_variable (std::string &value_out, std::string_view var_name) |
size_t | read_env_variable_sz (std::string_view var_name, size_t def_value=0) |
int BOTAN_TEST_API | run_cpu_instruction_probe (const std::function< int()> &probe_fn) |
bool | running_in_privileged_state () |
std::unique_ptr< Echo_Suppression > BOTAN_UNSTABLE_API | suppress_echo_on_terminal () |
size_t | system_page_size () |
std::vector< void * > Botan::OS::allocate_locked_pages | ( | size_t | count | ) |
Request count pages of RAM which are locked into memory using mlock, VirtualLock, or some similar OS specific API. Free it with free_locked_pages.
Returns an empty list on failure. This function is allowed to return fewer than count pages.
The contents of the allocated pages are undefined.
Each page is preceded by and followed by a page which is marked as noaccess, such that accessing it will cause a crash. This turns out of bound reads/writes into crash events.
count | requested number of locked pages |
Definition at line 515 of file os_utils.cpp.
References BOTAN_UNUSED, page_named(), page_prohibit_access(), and system_page_size().
Referenced by Botan::mlock_allocator::mlock_allocator().
unsigned long Botan::OS::auxval_hwcap | ( | ) |
If get_auxval is supported, returns the relevant value for AT_HWCAP
If get_auxval is not supported on this system, arbitrarily returns 0
Definition at line 136 of file os_utils.cpp.
References has_auxval().
unsigned long Botan::OS::auxval_hwcap2 | ( | ) |
If get_auxval is supported, returns the relevant value for AT_HWCAP2
If get_auxval is not supported on this system, arbitrarily returns 0
Definition at line 146 of file os_utils.cpp.
References has_auxval().
std::string Botan::OS::format_time | ( | time_t | time, |
const std::string & | format ) |
Format a time
Converts the time_t to a local time representation, then invokes std::put_time with the specified format.
Definition at line 341 of file os_utils.cpp.
void Botan::OS::free_locked_pages | ( | const std::vector< void * > & | pages | ) |
Free memory allocated by allocate_locked_pages
pages | a list of pages returned by allocate_locked_pages |
Definition at line 634 of file os_utils.cpp.
References page_allow_access(), Botan::secure_scrub_memory(), and system_page_size().
Referenced by Botan::mlock_allocator::~mlock_allocator().
unsigned long Botan::OS::get_auxval | ( | unsigned long | id | ) |
Return the ELF auxiliary vector cooresponding to the given ID. This only makes sense on Unix-like systems and is currently only supported on Linux, Android, and FreeBSD.
Returns zero if not supported on the current system or if the id provided is not known.
Definition at line 156 of file os_utils.cpp.
References BOTAN_UNUSED.
Referenced by running_in_privileged_state().
size_t Botan::OS::get_cpu_available | ( | ) |
Definition at line 247 of file os_utils.cpp.
Referenced by Botan::Thread_Pool::Thread_Pool().
uint64_t Botan::OS::get_cpu_cycle_counter | ( | ) |
On Windows, calls QueryPerformanceCounter.
Under GCC or Clang on supported platforms the hardware cycle counter is queried. Currently supported processors are x86, PPC, Alpha, SPARC, IA-64, S/390x, and HP-PA. If no CPU cycle counter is available on this system, returns zero.
Definition at line 190 of file os_utils.cpp.
Referenced by get_high_resolution_clock(), Botan::Timer::start(), and Botan::Timer::stop().
uint64_t Botan::OS::get_high_resolution_clock | ( | ) |
Definition at line 279 of file os_utils.cpp.
References get_cpu_cycle_counter().
Referenced by Botan::RandomNumberGenerator::randomize_with_ts_input().
size_t Botan::OS::get_memory_locking_limit | ( | ) |
Definition at line 381 of file os_utils.cpp.
References BOTAN_UNUSED, read_env_variable_sz(), and system_page_size().
Referenced by Botan::mlock_allocator::mlock_allocator().
uint32_t Botan::OS::get_process_id | ( | ) |
On Unix and Windows systems, this always returns a result
On systems where there is no processes to speak of (for example on baremetal systems or within a unikernel), this function returns zero.
Definition at line 112 of file os_utils.cpp.
Referenced by Botan::RandomNumberGenerator::randomize_with_ts_input(), and Botan::Stateful_RNG::reseed_check().
uint64_t Botan::OS::get_system_timestamp_ns | ( | ) |
Definition at line 329 of file os_utils.cpp.
Referenced by Botan::RandomNumberGenerator::randomize_with_ts_input(), Botan::Timer::start(), and Botan::Timer::stop().
bool Botan::OS::has_auxval | ( | ) |
Return true if get_auxval is implemented on this system
Definition at line 124 of file os_utils.cpp.
Referenced by auxval_hwcap(), auxval_hwcap2(), and running_in_privileged_state().
std::unique_ptr< OS::Socket > Botan::OS::open_socket | ( | std::string_view | hostname, |
std::string_view | service, | ||
std::chrono::milliseconds | timeout ) |
Open up a socket. Will throw on error. Returns null if sockets are not available on this platform.
Definition at line 351 of file socket.cpp.
References BOTAN_UNUSED.
std::unique_ptr< OS::SocketUDP > Botan::OS::open_socket_udp | ( | std::string_view | hostname, |
std::string_view | service, | ||
std::chrono::microseconds | timeout ) |
Open up a socket. Will throw on error. Returns null if sockets are not available on this platform.
Definition at line 318 of file socket_udp.cpp.
References BOTAN_UNUSED.
Referenced by Botan::Roughtime::online_request(), and open_socket_udp().
std::unique_ptr< OS::SocketUDP > Botan::OS::open_socket_udp | ( | std::string_view | uri, |
std::chrono::microseconds | timeout ) |
Open up a socket. Will throw on error. Returns null if sockets are not available on this platform.
Definition at line 333 of file socket_udp.cpp.
References Botan::URI::fromAny(), and open_socket_udp().
void Botan::OS::page_allow_access | ( | void * | page | ) |
Set the MMU to allow R/W access to this page
Definition at line 606 of file os_utils.cpp.
References BOTAN_UNUSED, and system_page_size().
Referenced by Botan::Memory_Pool::allocate(), free_locked_pages(), Botan::Sodium::sodium_mprotect_readwrite(), and Botan::Memory_Pool::~Memory_Pool().
void Botan::OS::page_named | ( | void * | page, |
size_t | size ) |
Set a ID to a page's range expressed by size bytes
Definition at line 656 of file os_utils.cpp.
References BOTAN_UNUSED, and name.
Referenced by allocate_locked_pages().
void Botan::OS::page_prohibit_access | ( | void * | page | ) |
Set the MMU to prohibit access to this page
Definition at line 620 of file os_utils.cpp.
References BOTAN_UNUSED, and system_page_size().
Referenced by allocate_locked_pages(), Botan::Memory_Pool::deallocate(), Botan::Memory_Pool::Memory_Pool(), and Botan::Sodium::sodium_mprotect_noaccess().
bool Botan::OS::read_env_variable | ( | std::string & | value_out, |
std::string_view | var_name ) |
Read the value of an environment variable, setting it to value_out if it exists. Returns false and sets value_out to empty string if no such variable is set. If the process seems to be running in a privileged state (such as setuid) then always returns false and does not examine the environment.
Definition at line 442 of file os_utils.cpp.
References name, and running_in_privileged_state().
Referenced by Botan_FFI::ffi_error_exception_thrown(), and read_env_variable_sz().
size_t Botan::OS::read_env_variable_sz | ( | std::string_view | var_name, |
size_t | def_value = 0 ) |
Read the value of an environment variable and convert it to an integer. If not set or conversion fails, returns the default value.
If the process seems to be running in a privileged state (such as setuid) then always returns nullptr, similiar to glibc's secure_getenv.
Definition at line 475 of file os_utils.cpp.
References name, and read_env_variable().
Referenced by get_memory_locking_limit().
int Botan::OS::run_cpu_instruction_probe | ( | const std::function< int()> & | probe_fn | ) |
Run a probe instruction to test for support for a CPU instruction. Runs in system-specific env that catches illegal instructions; this function always fails if the OS doesn't provide this. Returns value of probe_fn, if it could run. If error occurs, returns negative number. This allows probe_fn to indicate errors of its own, if it wants. For example the instruction might not only be only available on some CPUs, but also buggy on some subset of these - the probe function can test to make sure the instruction works properly before indicating that the instruction is available.
If probe_fn throws an exception the result is undefined.
Return codes: -1 illegal instruction detected
Definition at line 716 of file os_utils.cpp.
References BOTAN_UNUSED.
bool Botan::OS::running_in_privileged_state | ( | ) |
Test if we are currently running with elevated permissions eg setuid, setgid, or with POSIX caps set.
Definition at line 176 of file os_utils.cpp.
References get_auxval(), and has_auxval().
Referenced by read_env_variable().
std::unique_ptr< OS::Echo_Suppression > Botan::OS::suppress_echo_on_terminal | ( | ) |
Suppress echo on the terminal Returns null if this operation is not supported on the current system.
Definition at line 756 of file os_utils.cpp.
size_t Botan::OS::system_page_size | ( | ) |
Return the size of a memory page, if that can be derived on the current system. Otherwise returns some default value (eg 4096)
Definition at line 361 of file os_utils.cpp.
References BOTAN_UNUSED.
Referenced by allocate_locked_pages(), free_locked_pages(), get_memory_locking_limit(), Botan::mlock_allocator::mlock_allocator(), page_allow_access(), and page_prohibit_access().