libfilezilla
Loading...
Searching...
No Matches
util.hpp
Go to the documentation of this file.
1#ifndef LIBFILEZILLA_UTIL_HEADER
2#define LIBFILEZILLA_UTIL_HEADER
3
4#include "libfilezilla.hpp"
5#include "time.hpp"
6
7#include <cstdint>
8
13namespace fz {
14
23void FZ_PUBLIC_SYMBOL sleep(duration const& d);
24
29void FZ_PUBLIC_SYMBOL yield();
30
35int64_t FZ_PUBLIC_SYMBOL random_number(int64_t min, int64_t max);
36
41std::vector<uint8_t> FZ_PUBLIC_SYMBOL random_bytes(size_t size);
42
43void FZ_PUBLIC_SYMBOL random_bytes(size_t size, uint8_t* destination);
44
45class buffer;
46void FZ_PUBLIC_SYMBOL random_bytes(size_t size, buffer& destination);
47
54uint64_t FZ_PUBLIC_SYMBOL bitscan(uint64_t v);
55
62uint64_t FZ_PUBLIC_SYMBOL bitscan_reverse(uint64_t v);
63
69bool FZ_PUBLIC_SYMBOL equal_consttime(std::basic_string_view<uint8_t> const& lhs, std::basic_string_view<uint8_t> const& rhs);
70
71template <typename First, typename Second,
72 std::enable_if_t<sizeof(typename First::value_type) == sizeof(uint8_t) &&
73 sizeof(typename Second::value_type) == sizeof(uint8_t)>* = nullptr>
74inline bool equal_consttime(First const& lhs, Second const& rhs)
75{
76 return equal_consttime(std::basic_string_view<uint8_t>(reinterpret_cast<uint8_t const*>(lhs.data()), lhs.size()),
77 std::basic_string_view<uint8_t>(reinterpret_cast<uint8_t const*>(rhs.data()), rhs.size()));
78}
79
94template<typename T, typename std::enable_if_t<std::is_final_v<T>>* = nullptr>
95T& move_assign_through_move_constructor(T* p, T&& op) noexcept
96{
97 p->~T();
98 new (p)T(std::move(op));
99 return *p;
100}
101
107void FZ_PUBLIC_SYMBOL wipe(void* p, size_t n);
108
113void FZ_PUBLIC_SYMBOL wipe(std::string & s);
114void FZ_PUBLIC_SYMBOL wipe(std::vector<uint8_t> & v);
115
120void FZ_PUBLIC_SYMBOL wipe_unused(std::string & s);
121void FZ_PUBLIC_SYMBOL wipe_unused(std::vector<uint8_t> & v);
122
123}
124
125#endif
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition buffer.hpp:27
The duration class represents a time interval in milliseconds.
Definition time.hpp:291
Sets some global macros and further includes string.hpp.
The namespace used by libfilezilla.
Definition apply.hpp:17
std::vector< uint8_t > random_bytes(size_t size)
Get random uniformly distributed bytes.
T & move_assign_through_move_constructor(T *p, T &&op) noexcept
Helper to move-assign guaranteeing same member destruction order as the destructor.
Definition util.hpp:95
void yield()
Relinquish control for a brief amount of time.
uint64_t bitscan(uint64_t v)
Returns index of the least-significant set bit.
int64_t random_number(int64_t min, int64_t max)
Get a secure random integer uniformly distributed in the closed interval [min, max].
void sleep(duration const &d)
Sleep current thread for the specified duration.
uint64_t bitscan_reverse(uint64_t v)
Returns index of the most-significant set bit.
bool equal_consttime(std::basic_string_view< uint8_t > const &lhs, std::basic_string_view< uint8_t > const &rhs)
Secure equality test in constant time.
Assorted classes dealing with time.