diff options
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/utils')
55 files changed, 0 insertions, 8672 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/utils/assert.cpp b/src/libs/3rdparty/botan/src/lib/utils/assert.cpp deleted file mode 100644 index 31a35374a6..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/assert.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* -* Runtime assertion checking -* (C) 2010,2012,2018 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/exceptn.h> -#include <sstream> - -namespace Botan { - -void throw_invalid_argument(const char* message, - const char* func, - const char* file) - { - std::ostringstream format; - format << message << " in " << func << ":" << file; - throw Invalid_Argument(format.str()); - } - -void throw_invalid_state(const char* expr, - const char* func, - const char* file) - { - std::ostringstream format; - format << "Invalid state: " << expr << " was false in " << func << ":" << file; - throw Invalid_State(format.str()); - } - -void assertion_failure(const char* expr_str, - const char* assertion_made, - const char* func, - const char* file, - int line) - { - std::ostringstream format; - - format << "False assertion "; - - if(assertion_made && assertion_made[0] != 0) - format << "'" << assertion_made << "' (expression " << expr_str << ") "; - else - format << expr_str << " "; - - if(func) - format << "in " << func << " "; - - format << "@" << file << ":" << line; - - throw Exception(format.str()); - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/assert.h b/src/libs/3rdparty/botan/src/lib/utils/assert.h deleted file mode 100644 index 20e15ac0ea..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/assert.h +++ /dev/null @@ -1,157 +0,0 @@ -/* -* Runtime assertion checking -* (C) 2010,2018 Jack Lloyd -* 2017 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_ASSERTION_CHECKING_H_ -#define BOTAN_ASSERTION_CHECKING_H_ - -#include <botan/build.h> -#include <botan/compiler.h> - -namespace Botan { - -/** -* Called when an assertion fails -* Throws an Exception object -*/ -BOTAN_NORETURN void BOTAN_PUBLIC_API(2,0) - assertion_failure(const char* expr_str, - const char* assertion_made, - const char* func, - const char* file, - int line); - -/** -* Called when an invalid argument is used -* Throws Invalid_Argument -*/ -BOTAN_NORETURN void BOTAN_UNSTABLE_API throw_invalid_argument(const char* message, - const char* func, - const char* file); - - -#define BOTAN_ARG_CHECK(expr, msg) \ - do { if(!(expr)) Botan::throw_invalid_argument(msg, BOTAN_CURRENT_FUNCTION, __FILE__); } while(0) - -/** -* Called when an invalid state is encountered -* Throws Invalid_State -*/ -BOTAN_NORETURN void BOTAN_UNSTABLE_API throw_invalid_state(const char* message, - const char* func, - const char* file); - - -#define BOTAN_STATE_CHECK(expr) \ - do { if(!(expr)) Botan::throw_invalid_state(#expr, BOTAN_CURRENT_FUNCTION, __FILE__); } while(0) - -/** -* Make an assertion -*/ -#define BOTAN_ASSERT(expr, assertion_made) \ - do { \ - if(!(expr)) \ - Botan::assertion_failure(#expr, \ - assertion_made, \ - BOTAN_CURRENT_FUNCTION, \ - __FILE__, \ - __LINE__); \ - } while(0) - -/** -* Make an assertion -*/ -#define BOTAN_ASSERT_NOMSG(expr) \ - do { \ - if(!(expr)) \ - Botan::assertion_failure(#expr, \ - "", \ - BOTAN_CURRENT_FUNCTION, \ - __FILE__, \ - __LINE__); \ - } while(0) - -/** -* Assert that value1 == value2 -*/ -#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made) \ - do { \ - if((expr1) != (expr2)) \ - Botan::assertion_failure(#expr1 " == " #expr2, \ - assertion_made, \ - BOTAN_CURRENT_FUNCTION, \ - __FILE__, \ - __LINE__); \ - } while(0) - -/** -* Assert that expr1 (if true) implies expr2 is also true -*/ -#define BOTAN_ASSERT_IMPLICATION(expr1, expr2, msg) \ - do { \ - if((expr1) && !(expr2)) \ - Botan::assertion_failure(#expr1 " implies " #expr2, \ - msg, \ - BOTAN_CURRENT_FUNCTION, \ - __FILE__, \ - __LINE__); \ - } while(0) - -/** -* Assert that a pointer is not null -*/ -#define BOTAN_ASSERT_NONNULL(ptr) \ - do { \ - if((ptr) == nullptr) \ - Botan::assertion_failure(#ptr " is not null", \ - "", \ - BOTAN_CURRENT_FUNCTION, \ - __FILE__, \ - __LINE__); \ - } while(0) - -#if defined(BOTAN_ENABLE_DEBUG_ASSERTS) - -#define BOTAN_DEBUG_ASSERT(expr) BOTAN_ASSERT_NOMSG(expr) - -#else - -#define BOTAN_DEBUG_ASSERT(expr) do {} while(0) - -#endif - -/** -* Mark variable as unused. Takes between 1 and 9 arguments and marks all as unused, -* e.g. BOTAN_UNUSED(a); or BOTAN_UNUSED(x, y, z); -*/ -#define _BOTAN_UNUSED_IMPL1(a) static_cast<void>(a) -#define _BOTAN_UNUSED_IMPL2(a, b) static_cast<void>(a); _BOTAN_UNUSED_IMPL1(b) -#define _BOTAN_UNUSED_IMPL3(a, b, c) static_cast<void>(a); _BOTAN_UNUSED_IMPL2(b, c) -#define _BOTAN_UNUSED_IMPL4(a, b, c, d) static_cast<void>(a); _BOTAN_UNUSED_IMPL3(b, c, d) -#define _BOTAN_UNUSED_IMPL5(a, b, c, d, e) static_cast<void>(a); _BOTAN_UNUSED_IMPL4(b, c, d, e) -#define _BOTAN_UNUSED_IMPL6(a, b, c, d, e, f) static_cast<void>(a); _BOTAN_UNUSED_IMPL5(b, c, d, e, f) -#define _BOTAN_UNUSED_IMPL7(a, b, c, d, e, f, g) static_cast<void>(a); _BOTAN_UNUSED_IMPL6(b, c, d, e, f, g) -#define _BOTAN_UNUSED_IMPL8(a, b, c, d, e, f, g, h) static_cast<void>(a); _BOTAN_UNUSED_IMPL7(b, c, d, e, f, g, h) -#define _BOTAN_UNUSED_IMPL9(a, b, c, d, e, f, g, h, i) static_cast<void>(a); _BOTAN_UNUSED_IMPL8(b, c, d, e, f, g, h, i) -#define _BOTAN_UNUSED_GET_IMPL(_1, _2, _3, _4, _5, _6, _7, _8, _9, IMPL_NAME, ...) IMPL_NAME - -#define BOTAN_UNUSED(...) _BOTAN_UNUSED_GET_IMPL(__VA_ARGS__, \ - _BOTAN_UNUSED_IMPL9, \ - _BOTAN_UNUSED_IMPL8, \ - _BOTAN_UNUSED_IMPL7, \ - _BOTAN_UNUSED_IMPL6, \ - _BOTAN_UNUSED_IMPL5, \ - _BOTAN_UNUSED_IMPL4, \ - _BOTAN_UNUSED_IMPL3, \ - _BOTAN_UNUSED_IMPL2, \ - _BOTAN_UNUSED_IMPL1, \ - unused dummy rest value \ - ) /* we got an one of _BOTAN_UNUSED_IMPL*, now call it */ (__VA_ARGS__) - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/bit_ops.h b/src/libs/3rdparty/botan/src/lib/utils/bit_ops.h deleted file mode 100644 index c7e4014923..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/bit_ops.h +++ /dev/null @@ -1,161 +0,0 @@ -/* -* Bit/Word Operations -* (C) 1999-2008 Jack Lloyd -* (C) Copyright Projet SECRET, INRIA, Rocquencourt -* (C) Bhaskar Biswas and Nicolas Sendrier -* (C) 2014 cryptosource GmbH -* (C) 2014 Falko Strenzke fstrenzke@cryptosource.de -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_BIT_OPS_H_ -#define BOTAN_BIT_OPS_H_ - -#include <botan/types.h> - -namespace Botan { - -/** -* Power of 2 test. T should be an unsigned integer type -* @param arg an integer value -* @return true iff arg is 2^n for some n > 0 -*/ -template<typename T> -inline bool is_power_of_2(T arg) - { - return ((arg != 0 && arg != 1) && ((arg & (arg-1)) == 0)); - } - -/** -* Return the index of the highest set bit -* T is an unsigned integer type -* @param n an integer value -* @return index of the highest set bit in n -*/ -template<typename T> -inline size_t high_bit(T n) - { - for(size_t i = 8*sizeof(T); i > 0; --i) - if((n >> (i - 1)) & 0x01) - return i; - return 0; - } - -/** -* Return the index of the lowest set bit -* T is an unsigned integer type -* @param n an integer value -* @return index of the lowest set bit in n -*/ -template<typename T> -inline size_t low_bit(T n) - { - for(size_t i = 0; i != 8*sizeof(T); ++i) - if((n >> i) & 0x01) - return (i + 1); - return 0; - } - -/** -* Return the number of significant bytes in n -* @param n an integer value -* @return number of significant bytes in n -*/ -template<typename T> -inline size_t significant_bytes(T n) - { - for(size_t i = 0; i != sizeof(T); ++i) - if(get_byte(i, n)) - return sizeof(T)-i; - return 0; - } - -/** -* Compute Hamming weights -* @param n an integer value -* @return number of bits in n set to 1 -*/ -template<typename T> -inline size_t hamming_weight(T n) - { - const uint8_t NIBBLE_WEIGHTS[] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; - - size_t weight = 0; - for(size_t i = 0; i != 2*sizeof(T); ++i) - weight += NIBBLE_WEIGHTS[(n >> (4*i)) & 0x0F]; - return weight; - } - -/** -* Count the trailing zero bits in n -* @param n an integer value -* @return maximum x st 2^x divides n -*/ -template<typename T> -inline size_t ctz(T n) - { - for(size_t i = 0; i != 8*sizeof(T); ++i) - if((n >> i) & 0x01) - return i; - return 8*sizeof(T); - } - -#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) - -template<> -inline size_t ctz(uint32_t n) - { - if(n == 0) - return 32; - return __builtin_ctz(n); - } - -template<> -inline size_t ctz(uint64_t n) - { - if(n == 0) - return 64; - return __builtin_ctzll(n); - } - -template<> -inline size_t high_bit(uint32_t x) - { - if(x == 0) - return 0; - return (32 - __builtin_clz(x)); - } - -template<> -inline size_t high_bit(uint64_t x) - { - if(x == 0) - return 0; - return (64 - __builtin_clzll(x)); - } - -#endif - -template<typename T> -size_t ceil_log2(T x) - { - if(x >> (sizeof(T)*8-1)) - return sizeof(T)*8; - - size_t result = 0; - T compare = 1; - - while(compare < x) - { - compare <<= 1; - result++; - } - - return result; - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/bswap.h b/src/libs/3rdparty/botan/src/lib/utils/bswap.h deleted file mode 100644 index 8d5731f1b0..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/bswap.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -* Byte Swapping Operations -* (C) 1999-2011 Jack Lloyd -* (C) 2007 Yves Jerschow -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_BYTE_SWAP_H_ -#define BOTAN_BYTE_SWAP_H_ - -#include <botan/types.h> -#include <botan/rotate.h> - -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC) - #include <stdlib.h> -#endif - -namespace Botan { - -/** -* Swap a 16 bit integer -*/ -inline uint16_t reverse_bytes(uint16_t val) - { - return rotl<8>(val); - } - -/** -* Swap a 32 bit integer -*/ -inline uint32_t reverse_bytes(uint32_t val) - { -#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) - return __builtin_bswap32(val); - -#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC) - return _byteswap_ulong(val); - -#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - - // GCC-style inline assembly for x86 or x86-64 - asm("bswapl %0" : "=r" (val) : "0" (val)); - return val; - -#else - - // Generic implementation - return (rotr<8>(val) & 0xFF00FF00) | (rotl<8>(val) & 0x00FF00FF); - -#endif - } - -/** -* Swap a 64 bit integer -*/ -inline uint64_t reverse_bytes(uint64_t val) - { -#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) - return __builtin_bswap64(val); - -#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC) - return _byteswap_uint64(val); - -#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_ARCH_IS_X86_64) - // GCC-style inline assembly for x86-64 - asm("bswapq %0" : "=r" (val) : "0" (val)); - return val; - -#else - /* Generic implementation. Defined in terms of 32-bit bswap so any - * optimizations in that version can help. - */ - - uint32_t hi = static_cast<uint32_t>(val >> 32); - uint32_t lo = static_cast<uint32_t>(val); - - hi = reverse_bytes(hi); - lo = reverse_bytes(lo); - - return (static_cast<uint64_t>(lo) << 32) | hi; -#endif - } - -/** -* Swap 4 Ts in an array -*/ -template<typename T> -inline void bswap_4(T x[4]) - { - x[0] = reverse_bytes(x[0]); - x[1] = reverse_bytes(x[1]); - x[2] = reverse_bytes(x[2]); - x[3] = reverse_bytes(x[3]); - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/calendar.cpp b/src/libs/3rdparty/botan/src/lib/utils/calendar.cpp deleted file mode 100644 index fe04f1d239..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/calendar.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* -* Calendar Functions -* (C) 1999-2010,2017 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/calendar.h> -#include <botan/exceptn.h> -#include <ctime> -#include <sstream> -#include <iomanip> -#include <stdlib.h> - -namespace Botan { - -namespace { - -std::tm do_gmtime(std::time_t time_val) - { - std::tm tm; - -#if defined(BOTAN_TARGET_OS_HAS_WIN32) - ::gmtime_s(&tm, &time_val); // Windows -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - ::gmtime_r(&time_val, &tm); // Unix/SUSv2 -#else - std::tm* tm_p = std::gmtime(&time_val); - if (tm_p == nullptr) - throw Encoding_Error("time_t_to_tm could not convert"); - tm = *tm_p; -#endif - - return tm; - } - -/* -Portable replacement for timegm, _mkgmtime, etc - -Algorithm due to Howard Hinnant - -See https://howardhinnant.github.io/date_algorithms.html#days_from_civil -for details and explaination. The code is slightly simplified by our assumption -that the date is at least 1970, which is sufficient for our purposes. -*/ -size_t days_since_epoch(uint32_t year, uint32_t month, uint32_t day) - { - if(month <= 2) - year -= 1; - const uint32_t era = year / 400; - const uint32_t yoe = year - era * 400; // [0, 399] - const uint32_t doy = (153*(month + (month > 2 ? -3 : 9)) + 2)/5 + day-1; // [0, 365] - const uint32_t doe = yoe * 365 + yoe/4 - yoe/100 + doy; // [0, 146096] - return era * 146097 + doe - 719468; - } - -} - -std::chrono::system_clock::time_point calendar_point::to_std_timepoint() const - { - if(get_year() < 1970) - throw Invalid_Argument("calendar_point::to_std_timepoint() does not support years before 1970"); - - // 32 bit time_t ends at January 19, 2038 - // https://msdn.microsoft.com/en-us/library/2093ets1.aspx - // Throw after 2037 if 32 bit time_t is used - if(get_year() > 2037 && sizeof(std::time_t) == 4) - { - throw Invalid_Argument("calendar_point::to_std_timepoint() does not support years after 2037 on this system"); - } - else if(get_year() >= 2400) - { - // This upper bound is somewhat arbitrary - throw Invalid_Argument("calendar_point::to_std_timepoint() does not support years after 2400"); - } - - const uint64_t seconds_64 = (days_since_epoch(get_year(), get_month(), get_day()) * 86400) + - (get_hour() * 60 * 60) + (get_minutes() * 60) + get_seconds(); - - const time_t seconds_time_t = static_cast<time_t>(seconds_64); - - if(seconds_64 - seconds_time_t != 0) - { - throw Invalid_Argument("calendar_point::to_std_timepoint time_t overflow"); - } - - return std::chrono::system_clock::from_time_t(seconds_time_t); - } - -std::string calendar_point::to_string() const - { - // desired format: <YYYY>-<MM>-<dd>T<HH>:<mm>:<ss> - std::stringstream output; - output << std::setfill('0') - << std::setw(4) << get_year() << "-" - << std::setw(2) << get_month() << "-" - << std::setw(2) << get_day() << "T" - << std::setw(2) << get_hour() << ":" - << std::setw(2) << get_minutes() << ":" - << std::setw(2) << get_seconds(); - return output.str(); - } - - -calendar_point calendar_value( - const std::chrono::system_clock::time_point& time_point) - { - std::tm tm = do_gmtime(std::chrono::system_clock::to_time_t(time_point)); - - return calendar_point(tm.tm_year + 1900, - tm.tm_mon + 1, - tm.tm_mday, - tm.tm_hour, - tm.tm_min, - tm.tm_sec); - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/calendar.h b/src/libs/3rdparty/botan/src/lib/utils/calendar.h deleted file mode 100644 index 83759070b8..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/calendar.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -* Calendar Functions -* (C) 1999-2009,2015 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_CALENDAR_H_ -#define BOTAN_CALENDAR_H_ - -#include <botan/types.h> -#include <chrono> -#include <string> - -namespace Botan { - -/** -* Struct representing a particular date and time -*/ -class BOTAN_PUBLIC_API(2,0) calendar_point - { - public: - - /** The year */ - uint32_t get_year() const { return year; } - - /** The month, 1 through 12 for Jan to Dec */ - uint32_t get_month() const { return month; } - - /** The day of the month, 1 through 31 (or 28 or 30 based on month */ - uint32_t get_day() const { return day; } - - /** Hour in 24-hour form, 0 to 23 */ - uint32_t get_hour() const { return hour; } - - /** Minutes in the hour, 0 to 60 */ - uint32_t get_minutes() const { return minutes; } - - /** Seconds in the minute, 0 to 60, but might be slightly - larger to deal with leap seconds on some systems - */ - uint32_t get_seconds() const { return seconds; } - - /** - * Initialize a calendar_point - * @param y the year - * @param mon the month - * @param d the day - * @param h the hour - * @param min the minute - * @param sec the second - */ - calendar_point(uint32_t y, uint32_t mon, uint32_t d, uint32_t h, uint32_t min, uint32_t sec) : - year(y), month(mon), day(d), hour(h), minutes(min), seconds(sec) {} - - /** - * Returns an STL timepoint object - */ - std::chrono::system_clock::time_point to_std_timepoint() const; - - /** - * Returns a human readable string of the struct's components. - * Formatting might change over time. Currently it is RFC339 'iso-date-time'. - */ - std::string to_string() const; - - BOTAN_DEPRECATED_PUBLIC_MEMBER_VARIABLES: - /* - The member variables are public for historical reasons. Use the get_xxx() functions - defined above. These members will be made private in a future major release. - */ - uint32_t year; - uint32_t month; - uint32_t day; - uint32_t hour; - uint32_t minutes; - uint32_t seconds; - }; - -/** -* Convert a time_point to a calendar_point -* @param time_point a time point from the system clock -* @return calendar_point object representing this time point -*/ -BOTAN_PUBLIC_API(2,0) calendar_point calendar_value( - const std::chrono::system_clock::time_point& time_point); - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/charset.cpp b/src/libs/3rdparty/botan/src/lib/utils/charset.cpp deleted file mode 100644 index ca32c652db..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/charset.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* -* Character Set Handling -* (C) 1999-2007 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/charset.h> -#include <botan/exceptn.h> -#include <botan/loadstor.h> -#include <cctype> - -namespace Botan { - -namespace { - -void append_utf8_for(std::string& s, uint32_t c) - { - if(c >= 0xD800 && c < 0xE000) - throw Decoding_Error("Invalid Unicode character"); - - if(c <= 0x7F) - { - const uint8_t b0 = static_cast<uint8_t>(c); - s.push_back(static_cast<char>(b0)); - } - else if(c <= 0x7FF) - { - const uint8_t b0 = 0xC0 | static_cast<uint8_t>(c >> 6); - const uint8_t b1 = 0x80 | static_cast<uint8_t>(c & 0x3F); - s.push_back(static_cast<char>(b0)); - s.push_back(static_cast<char>(b1)); - } - else if(c <= 0xFFFF) - { - const uint8_t b0 = 0xE0 | static_cast<uint8_t>(c >> 12); - const uint8_t b1 = 0x80 | static_cast<uint8_t>((c >> 6) & 0x3F); - const uint8_t b2 = 0x80 | static_cast<uint8_t>(c & 0x3F); - s.push_back(static_cast<char>(b0)); - s.push_back(static_cast<char>(b1)); - s.push_back(static_cast<char>(b2)); - } - else if(c <= 0x10FFFF) - { - const uint8_t b0 = 0xF0 | static_cast<uint8_t>(c >> 18); - const uint8_t b1 = 0x80 | static_cast<uint8_t>((c >> 12) & 0x3F); - const uint8_t b2 = 0x80 | static_cast<uint8_t>((c >> 6) & 0x3F); - const uint8_t b3 = 0x80 | static_cast<uint8_t>(c & 0x3F); - s.push_back(static_cast<char>(b0)); - s.push_back(static_cast<char>(b1)); - s.push_back(static_cast<char>(b2)); - s.push_back(static_cast<char>(b3)); - } - else - throw Decoding_Error("Invalid Unicode character"); - - } - -} - -std::string ucs2_to_utf8(const uint8_t ucs2[], size_t len) - { - if(len % 2 != 0) - throw Decoding_Error("Invalid length for UCS-2 string"); - - const size_t chars = len / 2; - - std::string s; - for(size_t i = 0; i != chars; ++i) - { - const uint16_t c = load_be<uint16_t>(ucs2, i); - append_utf8_for(s, c); - } - - return s; - } - -std::string ucs4_to_utf8(const uint8_t ucs4[], size_t len) - { - if(len % 4 != 0) - throw Decoding_Error("Invalid length for UCS-4 string"); - - const size_t chars = len / 4; - - std::string s; - for(size_t i = 0; i != chars; ++i) - { - const uint32_t c = load_be<uint32_t>(ucs4, i); - append_utf8_for(s, c); - } - - return s; - } - -/* -* Convert from UTF-8 to ISO 8859-1 -*/ -std::string utf8_to_latin1(const std::string& utf8) - { - std::string iso8859; - - size_t position = 0; - while(position != utf8.size()) - { - const uint8_t c1 = static_cast<uint8_t>(utf8[position++]); - - if(c1 <= 0x7F) - { - iso8859 += static_cast<char>(c1); - } - else if(c1 >= 0xC0 && c1 <= 0xC7) - { - if(position == utf8.size()) - throw Decoding_Error("UTF-8: sequence truncated"); - - const uint8_t c2 = static_cast<uint8_t>(utf8[position++]); - const uint8_t iso_char = ((c1 & 0x07) << 6) | (c2 & 0x3F); - - if(iso_char <= 0x7F) - throw Decoding_Error("UTF-8: sequence longer than needed"); - - iso8859 += static_cast<char>(iso_char); - } - else - throw Decoding_Error("UTF-8: Unicode chars not in Latin1 used"); - } - - return iso8859; - } - -namespace Charset { - -namespace { - -/* -* Convert from UCS-2 to ISO 8859-1 -*/ -std::string ucs2_to_latin1(const std::string& ucs2) - { - if(ucs2.size() % 2 == 1) - throw Decoding_Error("UCS-2 string has an odd number of bytes"); - - std::string latin1; - - for(size_t i = 0; i != ucs2.size(); i += 2) - { - const uint8_t c1 = ucs2[i]; - const uint8_t c2 = ucs2[i+1]; - - if(c1 != 0) - throw Decoding_Error("UCS-2 has non-Latin1 characters"); - - latin1 += static_cast<char>(c2); - } - - return latin1; - } - -/* -* Convert from ISO 8859-1 to UTF-8 -*/ -std::string latin1_to_utf8(const std::string& iso8859) - { - std::string utf8; - for(size_t i = 0; i != iso8859.size(); ++i) - { - const uint8_t c = static_cast<uint8_t>(iso8859[i]); - - if(c <= 0x7F) - utf8 += static_cast<char>(c); - else - { - utf8 += static_cast<char>((0xC0 | (c >> 6))); - utf8 += static_cast<char>((0x80 | (c & 0x3F))); - } - } - return utf8; - } - -} - -/* -* Perform character set transcoding -*/ -std::string transcode(const std::string& str, - Character_Set to, Character_Set from) - { - if(to == LOCAL_CHARSET) - to = LATIN1_CHARSET; - if(from == LOCAL_CHARSET) - from = LATIN1_CHARSET; - - if(to == from) - return str; - - if(from == LATIN1_CHARSET && to == UTF8_CHARSET) - return latin1_to_utf8(str); - if(from == UTF8_CHARSET && to == LATIN1_CHARSET) - return utf8_to_latin1(str); - if(from == UCS2_CHARSET && to == LATIN1_CHARSET) - return ucs2_to_latin1(str); - - throw Invalid_Argument("Unknown transcoding operation from " + - std::to_string(from) + " to " + std::to_string(to)); - } - -/* -* Check if a character represents a digit -*/ -bool is_digit(char c) - { - if(c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || - c == '5' || c == '6' || c == '7' || c == '8' || c == '9') - return true; - return false; - } - -/* -* Check if a character represents whitespace -*/ -bool is_space(char c) - { - if(c == ' ' || c == '\t' || c == '\n' || c == '\r') - return true; - return false; - } - -/* -* Convert a character to a digit -*/ -uint8_t char2digit(char c) - { - switch(c) - { - case '0': return 0; - case '1': return 1; - case '2': return 2; - case '3': return 3; - case '4': return 4; - case '5': return 5; - case '6': return 6; - case '7': return 7; - case '8': return 8; - case '9': return 9; - } - - throw Invalid_Argument("char2digit: Input is not a digit character"); - } - -/* -* Convert a digit to a character -*/ -char digit2char(uint8_t b) - { - switch(b) - { - case 0: return '0'; - case 1: return '1'; - case 2: return '2'; - case 3: return '3'; - case 4: return '4'; - case 5: return '5'; - case 6: return '6'; - case 7: return '7'; - case 8: return '8'; - case 9: return '9'; - } - - throw Invalid_Argument("digit2char: Input is not a digit"); - } - -/* -* Case-insensitive character comparison -*/ -bool caseless_cmp(char a, char b) - { - return (std::tolower(static_cast<unsigned char>(a)) == - std::tolower(static_cast<unsigned char>(b))); - } - -} - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/charset.h b/src/libs/3rdparty/botan/src/lib/utils/charset.h deleted file mode 100644 index 4913f0a5aa..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/charset.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -* Character Set Handling -* (C) 1999-2007 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_CHARSET_H_ -#define BOTAN_CHARSET_H_ - -#include <botan/types.h> -#include <string> - -namespace Botan { - -/** -* Convert a sequence of UCS-2 (big endian) characters to a UTF-8 string -* This is used for ASN.1 BMPString type -* @param ucs2 the sequence of UCS-2 characters -* @param len length of ucs2 in bytes, must be a multiple of 2 -*/ -std::string BOTAN_UNSTABLE_API ucs2_to_utf8(const uint8_t ucs2[], size_t len); - -/** -* Convert a sequence of UCS-4 (big endian) characters to a UTF-8 string -* This is used for ASN.1 UniversalString type -* @param ucs4 the sequence of UCS-4 characters -* @param len length of ucs4 in bytes, must be a multiple of 4 -*/ -std::string BOTAN_UNSTABLE_API ucs4_to_utf8(const uint8_t ucs4[], size_t len); - -/** -* Convert a UTF-8 string to Latin-1 -* If a character outside the Latin-1 range is encountered, an exception is thrown. -*/ -std::string BOTAN_UNSTABLE_API utf8_to_latin1(const std::string& utf8); - -/** -* The different charsets (nominally) supported by Botan. -*/ -enum Character_Set { - LOCAL_CHARSET, - UCS2_CHARSET, - UTF8_CHARSET, - LATIN1_CHARSET -}; - -namespace Charset { - -/* -* Character set conversion - avoid this. -* For specific conversions, use the functions above like -* ucs2_to_utf8 and utf8_to_latin1 -* -* If you need something more complex than that, use a real library -* such as iconv, Boost.Locale, or ICU -*/ -std::string BOTAN_PUBLIC_API(2,0) - BOTAN_DEPRECATED("Avoid. See comment in header.") - transcode(const std::string& str, - Character_Set to, - Character_Set from); - -/* -* Simple character classifier functions -*/ -bool BOTAN_PUBLIC_API(2,0) is_digit(char c); -bool BOTAN_PUBLIC_API(2,0) is_space(char c); -bool BOTAN_PUBLIC_API(2,0) caseless_cmp(char x, char y); - -uint8_t BOTAN_PUBLIC_API(2,0) char2digit(char c); -char BOTAN_PUBLIC_API(2,0) digit2char(uint8_t b); - -} - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/codec_base.h b/src/libs/3rdparty/botan/src/lib/utils/codec_base.h deleted file mode 100644 index e7dbc33e4c..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/codec_base.h +++ /dev/null @@ -1,165 +0,0 @@ -/* -* Base Encoding and Decoding -* (C) 2018 Erwan Chaussy -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_BASE_CODEC_H_ -#define BOTAN_BASE_CODEC_H_ - -#include <botan/secmem.h> -#include <vector> -#include <string> - -namespace Botan { - -/** -* Perform encoding using the base provided -* @param base object giving access to the encodings specifications -* @param output an array of at least base.encode_max_output bytes -* @param input is some binary data -* @param input_length length of input in bytes -* @param input_consumed is an output parameter which says how many -* bytes of input were actually consumed. If less than -* input_length, then the range input[consumed:length] -* should be passed in later along with more input. -* @param final_inputs true iff this is the last input, in which case - padding chars will be applied if needed -* @return number of bytes written to output -*/ -template <class Base> -size_t base_encode(Base&& base, - char output[], - const uint8_t input[], - size_t input_length, - size_t& input_consumed, - bool final_inputs) - { - input_consumed = 0; - - const size_t encoding_bytes_in = base.encoding_bytes_in(); - const size_t encoding_bytes_out = base.encoding_bytes_out(); - - size_t input_remaining = input_length; - size_t output_produced = 0; - - while(input_remaining >= encoding_bytes_in) - { - base.encode(output + output_produced, input + input_consumed); - - input_consumed += encoding_bytes_in; - output_produced += encoding_bytes_out; - input_remaining -= encoding_bytes_in; - } - - if(final_inputs && input_remaining) - { - std::vector<uint8_t> remainder(encoding_bytes_in, 0); - for(size_t i = 0; i != input_remaining; ++i) - { remainder[i] = input[input_consumed + i]; } - - base.encode(output + output_produced, remainder.data()); - - const size_t bits_consumed = base.bits_consumed(); - const size_t remaining_bits_before_padding = base.remaining_bits_before_padding(); - - size_t empty_bits = 8 * (encoding_bytes_in - input_remaining); - size_t index = output_produced + encoding_bytes_out - 1; - while(empty_bits >= remaining_bits_before_padding) - { - output[index--] = '='; - empty_bits -= bits_consumed; - } - - input_consumed += input_remaining; - output_produced += encoding_bytes_out; - } - - return output_produced; - } - -/** -* Perform decoding using the base provided -* @param base object giving access to the encodings specifications -* @param output an array of at least base.decode_max_output bytes -* @param input some base input -* @param input_length length of input in bytes -* @param input_consumed is an output parameter which says how many -* bytes of input were actually consumed. If less than -* input_length, then the range input[consumed:length] -* should be passed in later along with more input. -* @param final_inputs true iff this is the last input, in which case - padding is allowed -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -template <typename Base> -size_t base_decode(Base&& base, - uint8_t output[], - const char input[], - size_t input_length, - size_t& input_consumed, - bool final_inputs, - bool ignore_ws = true) - { - const size_t decoding_bytes_in = base.decoding_bytes_in(); - const size_t decoding_bytes_out = base.decoding_bytes_out(); - - uint8_t* out_ptr = output; - std::vector<uint8_t> decode_buf(decoding_bytes_in, 0); - size_t decode_buf_pos = 0; - size_t final_truncate = 0; - - clear_mem(output, base.decode_max_output(input_length)); - - for(size_t i = 0; i != input_length; ++i) - { - const uint8_t bin = base.lookup_binary_value(input[i]); - - if(base.check_bad_char(bin, input[i], ignore_ws)) // May throw Invalid_Argument - { - decode_buf[decode_buf_pos] = bin; - ++decode_buf_pos; - } - - /* - * If we're at the end of the input, pad with 0s and truncate - */ - if(final_inputs && (i == input_length - 1)) - { - if(decode_buf_pos) - { - for(size_t j = decode_buf_pos; j < decoding_bytes_in; ++j) - { decode_buf[j] = 0; } - - final_truncate = decoding_bytes_in - decode_buf_pos; - decode_buf_pos = decoding_bytes_in; - } - } - - if(decode_buf_pos == decoding_bytes_in) - { - base.decode(out_ptr, decode_buf.data()); - - out_ptr += decoding_bytes_out; - decode_buf_pos = 0; - input_consumed = i+1; - } - } - - while(input_consumed < input_length && - base.lookup_binary_value(input[input_consumed]) == 0x80) - { - ++input_consumed; - } - - size_t written = (out_ptr - output) - base.bytes_to_remove(final_truncate); - - return written; - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/compiler.h b/src/libs/3rdparty/botan/src/lib/utils/compiler.h deleted file mode 100644 index 202b5cb755..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/compiler.h +++ /dev/null @@ -1,203 +0,0 @@ -/* -* Define useful compiler-specific macros -* (C) 2016 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -/* This header is included in both C++ and C (via ffi.h) and should only - contain macro definitions. -*/ - -#ifndef BOTAN_UTIL_COMPILER_FLAGS_H_ -#define BOTAN_UTIL_COMPILER_FLAGS_H_ - -/* Should we use GCC-style inline assembler? */ -#if !defined(BOTAN_USE_GCC_INLINE_ASM) && (defined(__GNUC__) || defined(__xlc__) || defined(__SUNPRO_CC)) - #define BOTAN_USE_GCC_INLINE_ASM 1 -#endif - -/** -* Used to annotate API exports which are public and supported. -* These APIs will not be broken/removed unless strictly required for -* functionality or security, and only in new major versions. -* @param maj The major version this public API was released in -* @param min The minor version this public API was released in -*/ -#define BOTAN_PUBLIC_API(maj,min) BOTAN_DLL - -/** -* Used to annotate API exports which are public and can be used by -* applications if needed, but which are intentionally not documented, -* and which may change incompatibly in a future major version. -*/ -#define BOTAN_UNSTABLE_API BOTAN_DLL - -/** -* Used to annotate API exports which are exported but only for the -* purposes of testing. They should not be used by applications and -* may be removed or changed without notice. -*/ -#define BOTAN_TEST_API BOTAN_DLL - -/* -* Define BOTAN_GCC_VERSION -*/ -#ifdef __GNUC__ - #define BOTAN_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__) -#else - #define BOTAN_GCC_VERSION 0 -#endif - -/* -* Define BOTAN_CLANG_VERSION -*/ -#ifdef __clang__ - #define BOTAN_CLANG_VERSION (__clang_major__ * 10 + __clang_minor__) -#else - #define BOTAN_CLANG_VERSION 0 -#endif - -/* -* Define special macro when building under MSVC 2013 since there are -* many compiler workarounds required for that version. -*/ -#if defined(_MSC_VER) && (_MSC_VER < 1900) - #define BOTAN_BUILD_COMPILER_IS_MSVC_2013 -#endif - -/* -* Define BOTAN_FUNC_ISA -*/ -#if (defined(__GNUG__) && !defined(__clang__)) || (BOTAN_CLANG_VERSION > 38) - #define BOTAN_FUNC_ISA(isa) __attribute__ ((target(isa))) -#else - #define BOTAN_FUNC_ISA(isa) -#endif - -/* -* Define BOTAN_WARN_UNUSED_RESULT -*/ -#if defined(__GNUG__) || defined(__clang__) - #define BOTAN_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) -#else - #define BOTAN_WARN_UNUSED_RESULT -#endif - -/* -* Define BOTAN_MALLOC_FN -*/ -#if defined(__GNUG__) || defined(__clang__) - #define BOTAN_MALLOC_FN __attribute__ ((malloc)) -#elif defined(_MSC_VER) - #define BOTAN_MALLOC_FN __declspec(restrict) -#else - #define BOTAN_MALLOC_FN -#endif - -/* -* Define BOTAN_DEPRECATED -*/ -#if !defined(BOTAN_NO_DEPRECATED_WARNINGS) - - #if defined(__clang__) - #define BOTAN_DEPRECATED(msg) __attribute__ ((deprecated)) - - #elif defined(_MSC_VER) - #define BOTAN_DEPRECATED(msg) __declspec(deprecated(msg)) - - #elif defined(__GNUG__) - // msg supported since GCC 4.5, earliest we support is 4.8 - #define BOTAN_DEPRECATED(msg) __attribute__ ((deprecated(msg))) - #endif - -#endif - -#if !defined(BOTAN_DEPRECATED) - #define BOTAN_DEPRECATED(msg) -#endif - -/* -* Define BOTAN_NORETURN -*/ -#if !defined(BOTAN_NORETURN) - - #if defined (__clang__) || defined (__GNUG__) - #define BOTAN_NORETURN __attribute__ ((__noreturn__)) - - #elif defined (_MSC_VER) - #define BOTAN_NORETURN __declspec(noreturn) - - #else - #define BOTAN_NORETURN - #endif - -#endif - -/* -* Define BOTAN_CURRENT_FUNCTION -*/ -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - #define BOTAN_CURRENT_FUNCTION __FUNCTION__ -#else - #define BOTAN_CURRENT_FUNCTION __func__ -#endif - -/* -* Define BOTAN_NOEXCEPT (for MSVC 2013) -*/ -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - // noexcept is not supported in VS 2013 - #include <yvals.h> - #define BOTAN_NOEXCEPT _NOEXCEPT -#else - #define BOTAN_NOEXCEPT noexcept -#endif - -/* -* Define BOTAN_CONSTEXPR (for MSVC 2013) -*/ -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - #define BOTAN_CONSTEXPR /**/ -#else - #define BOTAN_CONSTEXPR constexpr -#endif - -/* -* Define BOTAN_ALIGNAS (for MSVC 2013) -*/ -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - #define BOTAN_ALIGNAS(n) /**/ -#else - #define BOTAN_ALIGNAS(n) alignas(n) -#endif - -/* -* Define BOTAN_PARALLEL_FOR -*/ -#if !defined(BOTAN_PARALLEL_FOR) - -#if defined(BOTAN_TARGET_HAS_OPENMP) - #define BOTAN_PARALLEL_FOR _Pragma("omp parallel for") for -#else - #define BOTAN_PARALLEL_FOR for -#endif - -#endif - -/* -* Define BOTAN_PARALLEL_SIMD_FOR -*/ -#if !defined(BOTAN_PARALLEL_SIMD_FOR) - -#if defined(BOTAN_TARGET_HAS_OPENMP) - #define BOTAN_PARALLEL_SIMD_FOR _Pragma("omp simd") for -#elif defined(BOTAN_BUILD_COMPILER_IS_GCC) && (BOTAN_GCC_VERSION >= 490) - #define BOTAN_PARALLEL_SIMD_FOR _Pragma("GCC ivdep") for -#else - #define BOTAN_PARALLEL_SIMD_FOR for -#endif - -#endif - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.cpp b/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.cpp deleted file mode 100644 index d2d08dd435..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/* -* Runtime CPU detection -* (C) 2009,2010,2013,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/cpuid.h> -#include <botan/types.h> -#include <botan/exceptn.h> -#include <botan/parsing.h> -#include <ostream> - -namespace Botan { - -uint64_t CPUID::g_processor_features = 0; -size_t CPUID::g_cache_line_size = BOTAN_TARGET_CPU_DEFAULT_CACHE_LINE_SIZE; -CPUID::Endian_status CPUID::g_endian_status = ENDIAN_UNKNOWN; - -bool CPUID::has_simd_32() - { -#if defined(BOTAN_TARGET_SUPPORTS_SSE2) - return CPUID::has_sse2(); -#elif defined(BOTAN_TARGET_SUPPORTS_ALTIVEC) - return CPUID::has_altivec(); -#elif defined(BOTAN_TARGET_SUPPORTS_NEON) - return CPUID::has_neon(); -#else - return true; -#endif - } - -//static -std::string CPUID::to_string() - { - std::vector<std::string> flags; - -#define CPUID_PRINT(flag) do { if(has_##flag()) { flags.push_back(#flag); } } while(0) - -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - CPUID_PRINT(sse2); - CPUID_PRINT(ssse3); - CPUID_PRINT(sse41); - CPUID_PRINT(sse42); - CPUID_PRINT(avx2); - CPUID_PRINT(avx512f); - - CPUID_PRINT(rdtsc); - CPUID_PRINT(bmi1); - CPUID_PRINT(bmi2); - CPUID_PRINT(adx); - - CPUID_PRINT(aes_ni); - CPUID_PRINT(clmul); - CPUID_PRINT(rdrand); - CPUID_PRINT(rdseed); - CPUID_PRINT(intel_sha); -#endif - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - CPUID_PRINT(altivec); - CPUID_PRINT(ppc_crypto); -#endif - -#if defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - CPUID_PRINT(neon); - CPUID_PRINT(arm_sve); - - CPUID_PRINT(arm_sha1); - CPUID_PRINT(arm_sha2); - CPUID_PRINT(arm_aes); - CPUID_PRINT(arm_pmull); - CPUID_PRINT(arm_sha2_512); - CPUID_PRINT(arm_sha3); - CPUID_PRINT(arm_sm3); - CPUID_PRINT(arm_sm4); -#endif - -#undef CPUID_PRINT - - return string_join(flags, ' '); - } - -//static -void CPUID::print(std::ostream& o) - { - o << "CPUID flags: " << CPUID::to_string() << "\n"; - } - -//static -void CPUID::initialize() - { - g_processor_features = 0; - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) || \ - defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) || \ - defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - - g_processor_features = CPUID::detect_cpu_features(&g_cache_line_size); - -#endif - - g_endian_status = runtime_check_endian(); - g_processor_features |= CPUID::CPUID_INITIALIZED_BIT; - } - -//static -CPUID::Endian_status CPUID::runtime_check_endian() - { - // Check runtime endian - const uint32_t endian32 = 0x01234567; - const uint8_t* e8 = reinterpret_cast<const uint8_t*>(&endian32); - - Endian_status endian = ENDIAN_UNKNOWN; - - if(e8[0] == 0x01 && e8[1] == 0x23 && e8[2] == 0x45 && e8[3] == 0x67) - { - endian = ENDIAN_BIG; - } - else if(e8[0] == 0x67 && e8[1] == 0x45 && e8[2] == 0x23 && e8[3] == 0x01) - { - endian = ENDIAN_LITTLE; - } - else - { - throw Internal_Error("Unexpected endian at runtime, neither big nor little"); - } - - // If we were compiled with a known endian, verify it matches at runtime -#if defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN) - BOTAN_ASSERT(endian == ENDIAN_LITTLE, "Build and runtime endian match"); -#elif defined(BOTAN_TARGET_CPU_IS_BIG_ENDIAN) - BOTAN_ASSERT(endian == ENDIAN_BIG, "Build and runtime endian match"); -#endif - - return endian; - } - -std::vector<Botan::CPUID::CPUID_bits> -CPUID::bit_from_string(const std::string& tok) - { -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - if(tok == "sse2" || tok == "simd") - return {Botan::CPUID::CPUID_SSE2_BIT}; - if(tok == "ssse3") - return {Botan::CPUID::CPUID_SSSE3_BIT}; - if(tok == "aesni") - return {Botan::CPUID::CPUID_AESNI_BIT}; - if(tok == "clmul") - return {Botan::CPUID::CPUID_CLMUL_BIT}; - if(tok == "avx2") - return {Botan::CPUID::CPUID_AVX2_BIT}; - if(tok == "sha") - return {Botan::CPUID::CPUID_SHA_BIT}; - if(tok == "bmi2") - return {Botan::CPUID::CPUID_BMI2_BIT}; - if(tok == "adx") - return {Botan::CPUID::CPUID_ADX_BIT}; - if(tok == "intel_sha") - return {Botan::CPUID::CPUID_SHA_BIT}; - -#elif defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - if(tok == "altivec" || tok == "simd") - return {Botan::CPUID::CPUID_ALTIVEC_BIT}; - if(tok == "ppc_crypto") - return {Botan::CPUID::CPUID_PPC_CRYPTO_BIT}; - -#elif defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - if(tok == "neon" || tok == "simd") - return {Botan::CPUID::CPUID_ARM_NEON_BIT}; - if(tok == "armv8sha1") - return {Botan::CPUID::CPUID_ARM_SHA1_BIT}; - if(tok == "armv8sha2") - return {Botan::CPUID::CPUID_ARM_SHA2_BIT}; - if(tok == "armv8aes") - return {Botan::CPUID::CPUID_ARM_AES_BIT}; - if(tok == "armv8pmull") - return {Botan::CPUID::CPUID_ARM_PMULL_BIT}; - if(tok == "armv8sha3") - return {Botan::CPUID::CPUID_ARM_SHA3_BIT}; - if(tok == "armv8sha2_512") - return {Botan::CPUID::CPUID_ARM_SHA2_512_BIT}; - if(tok == "armv8sm3") - return {Botan::CPUID::CPUID_ARM_SM3_BIT}; - if(tok == "armv8sm4") - return {Botan::CPUID::CPUID_ARM_SM4_BIT}; - -#else - BOTAN_UNUSED(tok); -#endif - - return {}; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.h b/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.h deleted file mode 100644 index 95f6d687bb..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid.h +++ /dev/null @@ -1,363 +0,0 @@ -/* -* Runtime CPU detection -* (C) 2009,2010,2013,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_CPUID_H_ -#define BOTAN_CPUID_H_ - -#include <botan/types.h> -#include <vector> -#include <string> -#include <iosfwd> - -namespace Botan { - -/** -* A class handling runtime CPU feature detection. It is limited to -* just the features necessary to implement CPU specific code in Botan, -* rather than being a general purpose utility. -* -* This class supports: -* -* - x86 features using CPUID. x86 is also the only processor with -* accurate cache line detection currently. -* -* - PowerPC AltiVec detection on Linux, NetBSD, OpenBSD, and Darwin -* -* - ARM NEON and crypto extensions detection. On Linux and Android -* systems which support getauxval, that is used to access CPU -* feature information. Otherwise a relatively portable but -* thread-unsafe mechanism involving executing probe functions which -* catching SIGILL signal is used. -*/ -class BOTAN_PUBLIC_API(2,1) CPUID final - { - public: - /** - * Probe the CPU and see what extensions are supported - */ - static void initialize(); - - static bool has_simd_32(); - - /** - * Deprecated equivalent to - * o << "CPUID flags: " << CPUID::to_string() << "\n"; - */ - BOTAN_DEPRECATED("Use CPUID::to_string") - static void print(std::ostream& o); - - /** - * Return a possibly empty string containing list of known CPU - * extensions. Each name will be seperated by a space, and the ordering - * will be arbitrary. This list only contains values that are useful to - * Botan (for example FMA instructions are not checked). - * - * Example outputs "sse2 ssse3 rdtsc", "neon arm_aes", "altivec" - */ - static std::string to_string(); - - /** - * Return a best guess of the cache line size - */ - static size_t cache_line_size() - { - if(g_processor_features == 0) - { - initialize(); - } - return g_cache_line_size; - } - - static bool is_little_endian() - { - return endian_status() == ENDIAN_LITTLE; - } - - static bool is_big_endian() - { - return endian_status() == ENDIAN_BIG; - } - - enum CPUID_bits : uint64_t { -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - // These values have no relation to cpuid bitfields - - // SIMD instruction sets - CPUID_SSE2_BIT = (1ULL << 0), - CPUID_SSSE3_BIT = (1ULL << 1), - CPUID_SSE41_BIT = (1ULL << 2), - CPUID_SSE42_BIT = (1ULL << 3), - CPUID_AVX2_BIT = (1ULL << 4), - CPUID_AVX512F_BIT = (1ULL << 5), - - // Misc useful instructions - CPUID_RDTSC_BIT = (1ULL << 10), - CPUID_BMI2_BIT = (1ULL << 11), - CPUID_ADX_BIT = (1ULL << 12), - CPUID_BMI1_BIT = (1ULL << 13), - - // Crypto-specific ISAs - CPUID_AESNI_BIT = (1ULL << 16), - CPUID_CLMUL_BIT = (1ULL << 17), - CPUID_RDRAND_BIT = (1ULL << 18), - CPUID_RDSEED_BIT = (1ULL << 19), - CPUID_SHA_BIT = (1ULL << 20), -#endif - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - CPUID_ALTIVEC_BIT = (1ULL << 0), - CPUID_PPC_CRYPTO_BIT = (1ULL << 1), -#endif - -#if defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - CPUID_ARM_NEON_BIT = (1ULL << 0), - CPUID_ARM_SVE_BIT = (1ULL << 1), - CPUID_ARM_AES_BIT = (1ULL << 16), - CPUID_ARM_PMULL_BIT = (1ULL << 17), - CPUID_ARM_SHA1_BIT = (1ULL << 18), - CPUID_ARM_SHA2_BIT = (1ULL << 19), - CPUID_ARM_SHA3_BIT = (1ULL << 20), - CPUID_ARM_SHA2_512_BIT = (1ULL << 21), - CPUID_ARM_SM3_BIT = (1ULL << 22), - CPUID_ARM_SM4_BIT = (1ULL << 23), -#endif - - CPUID_INITIALIZED_BIT = (1ULL << 63) - }; - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - /** - * Check if the processor supports AltiVec/VMX - */ - static bool has_altivec() - { return has_cpuid_bit(CPUID_ALTIVEC_BIT); } - - /** - * Check if the processor supports POWER8 crypto extensions - */ - static bool has_ppc_crypto() - { return has_cpuid_bit(CPUID_PPC_CRYPTO_BIT); } - -#endif - -#if defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - /** - * Check if the processor supports NEON SIMD - */ - static bool has_neon() - { return has_cpuid_bit(CPUID_ARM_NEON_BIT); } - - /** - * Check if the processor supports ARMv8 SVE - */ - static bool has_arm_sve() - { return has_cpuid_bit(CPUID_ARM_SVE_BIT); } - - /** - * Check if the processor supports ARMv8 SHA1 - */ - static bool has_arm_sha1() - { return has_cpuid_bit(CPUID_ARM_SHA1_BIT); } - - /** - * Check if the processor supports ARMv8 SHA2 - */ - static bool has_arm_sha2() - { return has_cpuid_bit(CPUID_ARM_SHA2_BIT); } - - /** - * Check if the processor supports ARMv8 AES - */ - static bool has_arm_aes() - { return has_cpuid_bit(CPUID_ARM_AES_BIT); } - - /** - * Check if the processor supports ARMv8 PMULL - */ - static bool has_arm_pmull() - { return has_cpuid_bit(CPUID_ARM_PMULL_BIT); } - - /** - * Check if the processor supports ARMv8 SHA-512 - */ - static bool has_arm_sha2_512() - { return has_cpuid_bit(CPUID_ARM_SHA2_512_BIT); } - - /** - * Check if the processor supports ARMv8 SHA-3 - */ - static bool has_arm_sha3() - { return has_cpuid_bit(CPUID_ARM_SHA3_BIT); } - - /** - * Check if the processor supports ARMv8 SM3 - */ - static bool has_arm_sm3() - { return has_cpuid_bit(CPUID_ARM_SM3_BIT); } - - /** - * Check if the processor supports ARMv8 SM4 - */ - static bool has_arm_sm4() - { return has_cpuid_bit(CPUID_ARM_SM4_BIT); } - -#endif - -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - - /** - * Check if the processor supports RDTSC - */ - static bool has_rdtsc() - { return has_cpuid_bit(CPUID_RDTSC_BIT); } - - /** - * Check if the processor supports SSE2 - */ - static bool has_sse2() - { return has_cpuid_bit(CPUID_SSE2_BIT); } - - /** - * Check if the processor supports SSSE3 - */ - static bool has_ssse3() - { return has_cpuid_bit(CPUID_SSSE3_BIT); } - - /** - * Check if the processor supports SSE4.1 - */ - static bool has_sse41() - { return has_cpuid_bit(CPUID_SSE41_BIT); } - - /** - * Check if the processor supports SSE4.2 - */ - static bool has_sse42() - { return has_cpuid_bit(CPUID_SSE42_BIT); } - - /** - * Check if the processor supports AVX2 - */ - static bool has_avx2() - { return has_cpuid_bit(CPUID_AVX2_BIT); } - - /** - * Check if the processor supports AVX-512F - */ - static bool has_avx512f() - { return has_cpuid_bit(CPUID_AVX512F_BIT); } - - /** - * Check if the processor supports BMI1 - */ - static bool has_bmi1() - { return has_cpuid_bit(CPUID_BMI1_BIT); } - - /** - * Check if the processor supports BMI2 - */ - static bool has_bmi2() - { return has_cpuid_bit(CPUID_BMI2_BIT); } - - /** - * Check if the processor supports AES-NI - */ - static bool has_aes_ni() - { return has_cpuid_bit(CPUID_AESNI_BIT); } - - /** - * Check if the processor supports CLMUL - */ - static bool has_clmul() - { return has_cpuid_bit(CPUID_CLMUL_BIT); } - - /** - * Check if the processor supports Intel SHA extension - */ - static bool has_intel_sha() - { return has_cpuid_bit(CPUID_SHA_BIT); } - - /** - * Check if the processor supports ADX extension - */ - static bool has_adx() - { return has_cpuid_bit(CPUID_ADX_BIT); } - - /** - * Check if the processor supports RDRAND - */ - static bool has_rdrand() - { return has_cpuid_bit(CPUID_RDRAND_BIT); } - - /** - * Check if the processor supports RDSEED - */ - static bool has_rdseed() - { return has_cpuid_bit(CPUID_RDSEED_BIT); } -#endif - - /* - * Clear a CPUID bit - * Call CPUID::initialize to reset - * - * This is only exposed for testing, don't use unless you know - * what you are doing. - */ - static void clear_cpuid_bit(CPUID_bits bit) - { - const uint64_t mask = ~(static_cast<uint64_t>(bit)); - g_processor_features &= mask; - } - - /* - * Don't call this function, use CPUID::has_xxx above - * It is only exposed for the tests. - */ - static bool has_cpuid_bit(CPUID_bits elem) - { - if(g_processor_features == 0) - initialize(); - - const uint64_t elem64 = static_cast<uint64_t>(elem); - return ((g_processor_features & elem64) == elem64); - } - - static std::vector<CPUID::CPUID_bits> bit_from_string(const std::string& tok); - private: - enum Endian_status : uint32_t { - ENDIAN_UNKNOWN = 0x00000000, - ENDIAN_BIG = 0x01234567, - ENDIAN_LITTLE = 0x67452301, - }; - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) || \ - defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) || \ - defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - - static uint64_t detect_cpu_features(size_t* cache_line_size); - -#endif - - static Endian_status runtime_check_endian(); - - static Endian_status endian_status() - { - if(g_endian_status == ENDIAN_UNKNOWN) - { - g_endian_status = runtime_check_endian(); - } - return g_endian_status; - } - - static uint64_t g_processor_features; - static size_t g_cache_line_size; - static Endian_status g_endian_status; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_arm.cpp b/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_arm.cpp deleted file mode 100644 index beb80f7d06..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_arm.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/* -* Runtime CPU detection for ARM -* (C) 2009,2010,2013,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/cpuid.h> - -#if defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - -#if defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) - #include <sys/auxv.h> - -#elif defined(BOTAN_TARGET_OS_IS_IOS) - #include <sys/types.h> - #include <sys/sysctl.h> - -#else - #include <botan/internal/os_utils.h> - -#endif - -#endif - -namespace Botan { - -#if defined(BOTAN_TARGET_CPU_IS_ARM_FAMILY) - -#if defined(BOTAN_TARGET_OS_IS_IOS) - -namespace { - -uint64_t flags_by_ios_machine_type(const std::string& machine) - { - /* - * This relies on a map of known machine names to features. This - * will quickly grow out of date as new products are introduced, but - * is apparently the best we can do for iOS. - */ - - struct version_info { - std::string name; - size_t min_version_neon; - size_t min_version_armv8; - }; - - static const version_info min_versions[] = { - { "iPhone", 2, 6 }, - { "iPad", 1, 4 }, - { "iPod", 4, 7 }, - { "AppleTV", 2, 5 }, - }; - - if(machine.size() < 3) - return 0; - - auto comma = machine.find(','); - - // Simulator, or something we don't know about - if(comma == std::string::npos) - return 0; - - std::string product = machine.substr(0, comma); - - size_t version = 0; - size_t place = 1; - while(product.size() > 1 && ::isdigit(product.back())) - { - const size_t digit = product.back() - '0'; - version += digit * place; - place *= 10; - product.pop_back(); - } - - if(version == 0) - return 0; - - for(const version_info& info : min_versions) - { - if(info.name != product) - continue; - - if(version >= info.min_version_armv8) - { - return CPUID::CPUID_ARM_AES_BIT | - CPUID::CPUID_ARM_PMULL_BIT | - CPUID::CPUID_ARM_SHA1_BIT | - CPUID::CPUID_ARM_SHA2_BIT | - CPUID::CPUID_ARM_NEON_BIT; - } - - if(version >= info.min_version_neon) - return CPUID::CPUID_ARM_NEON_BIT; - } - - // Some other product we don't know about - return 0; - } - -} - -#endif - -uint64_t CPUID::detect_cpu_features(size_t* cache_line_size) - { - uint64_t detected_features = 0; - -#if defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) - /* - * On systems with getauxval these bits should normally be defined - * in bits/auxv.h but some buggy? glibc installs seem to miss them. - * These following values are all fixed, for the Linux ELF format, - * so we just hardcode them in ARM_hwcap_bit enum. - */ - - enum ARM_hwcap_bit { -#if defined(BOTAN_TARGET_ARCH_IS_ARM32) - NEON_bit = (1 << 12), - AES_bit = (1 << 0), - PMULL_bit = (1 << 1), - SHA1_bit = (1 << 2), - SHA2_bit = (1 << 3), - - ARCH_hwcap_neon = 16, // AT_HWCAP - ARCH_hwcap_crypto = 26, // AT_HWCAP2 -#elif defined(BOTAN_TARGET_ARCH_IS_ARM64) - NEON_bit = (1 << 1), - AES_bit = (1 << 3), - PMULL_bit = (1 << 4), - SHA1_bit = (1 << 5), - SHA2_bit = (1 << 6), - SHA3_bit = (1 << 17), - SM3_bit = (1 << 18), - SM4_bit = (1 << 19), - SHA2_512_bit = (1 << 21), - SVE_bit = (1 << 22), - - ARCH_hwcap_neon = 16, // AT_HWCAP - ARCH_hwcap_crypto = 16, // AT_HWCAP -#endif - }; - -#if defined(AT_DCACHEBSIZE) - const unsigned long dcache_line = ::getauxval(AT_DCACHEBSIZE); - - // plausibility check - if(dcache_line == 32 || dcache_line == 64 || dcache_line == 128) - *cache_line_size = static_cast<size_t>(dcache_line); -#endif - - const unsigned long hwcap_neon = ::getauxval(ARM_hwcap_bit::ARCH_hwcap_neon); - if(hwcap_neon & ARM_hwcap_bit::NEON_bit) - detected_features |= CPUID::CPUID_ARM_NEON_BIT; - - /* - On aarch64 this ends up calling getauxval twice with AT_HWCAP - It doesn't seem worth optimizing this out, since getauxval is - just reading a field in the ELF header. - */ - const unsigned long hwcap_crypto = ::getauxval(ARM_hwcap_bit::ARCH_hwcap_crypto); - if(hwcap_crypto & ARM_hwcap_bit::AES_bit) - detected_features |= CPUID::CPUID_ARM_AES_BIT; - if(hwcap_crypto & ARM_hwcap_bit::PMULL_bit) - detected_features |= CPUID::CPUID_ARM_PMULL_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SHA1_bit) - detected_features |= CPUID::CPUID_ARM_SHA1_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SHA2_bit) - detected_features |= CPUID::CPUID_ARM_SHA2_BIT; - -#if defined(BOTAN_TARGET_ARCH_IS_ARM64) - if(hwcap_crypto & ARM_hwcap_bit::SHA3_bit) - detected_features |= CPUID::CPUID_ARM_SHA3_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SM3_bit) - detected_features |= CPUID::CPUID_ARM_SM3_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SM4_bit) - detected_features |= CPUID::CPUID_ARM_SM4_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SHA2_512_bit) - detected_features |= CPUID::CPUID_ARM_SHA2_512_BIT; - if(hwcap_crypto & ARM_hwcap_bit::SVE_bit) - detected_features |= CPUID::CPUID_ARM_SVE_BIT; -#endif - -#elif defined(BOTAN_TARGET_OS_IS_IOS) - - char machine[64] = { 0 }; - size_t size = sizeof(machine) - 1; - ::sysctlbyname("hw.machine", machine, &size, nullptr, 0); - - detected_features = flags_by_ios_machine_type(machine); - -#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_ARCH_IS_ARM64) - - /* - No getauxval API available, fall back on probe functions. We only - bother with Aarch64 here to simplify the code and because going to - extreme contortions to support detect NEON on devices that probably - don't support it doesn't seem worthwhile. - - NEON registers v0-v7 are caller saved in Aarch64 - */ - - auto neon_probe = []() -> int { asm("and v0.16b, v0.16b, v0.16b"); return 1; }; - auto aes_probe = []() -> int { asm(".word 0x4e284800"); return 1; }; - auto pmull_probe = []() -> int { asm(".word 0x0ee0e000"); return 1; }; - auto sha1_probe = []() -> int { asm(".word 0x5e280800"); return 1; }; - auto sha2_probe = []() -> int { asm(".word 0x5e282800"); return 1; }; - - // Only bother running the crypto detection if we found NEON - - if(OS::run_cpu_instruction_probe(neon_probe) == 1) - { - detected_features |= CPUID::CPUID_ARM_NEON_BIT; - - if(OS::run_cpu_instruction_probe(aes_probe) == 1) - detected_features |= CPUID::CPUID_ARM_AES_BIT; - if(OS::run_cpu_instruction_probe(pmull_probe) == 1) - detected_features |= CPUID::CPUID_ARM_PMULL_BIT; - if(OS::run_cpu_instruction_probe(sha1_probe) == 1) - detected_features |= CPUID::CPUID_ARM_SHA1_BIT; - if(OS::run_cpu_instruction_probe(sha2_probe) == 1) - detected_features |= CPUID::CPUID_ARM_SHA2_BIT; - } - -#endif - - return detected_features; - } - -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_ppc.cpp b/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_ppc.cpp deleted file mode 100644 index 43b6847852..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_ppc.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* -* Runtime CPU detection for POWER/PowerPC -* (C) 2009,2010,2013,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/cpuid.h> -#include <botan/internal/os_utils.h> - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - -/* -* On Darwin and OpenBSD ppc, use sysctl to detect AltiVec -*/ -#if defined(BOTAN_TARGET_OS_IS_DARWIN) - #include <sys/sysctl.h> -#elif defined(BOTAN_TARGET_OS_IS_OPENBSD) - #include <sys/param.h> - #include <sys/sysctl.h> - #include <machine/cpu.h> -#elif defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) - #include <sys/auxv.h> -#endif - -#endif - -namespace Botan { - -#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) - -/* -* PowerPC specific block: check for AltiVec using either -* sysctl or by reading processor version number register. -*/ -uint64_t CPUID::detect_cpu_features(size_t* cache_line_size) - { - BOTAN_UNUSED(cache_line_size); - -#if defined(BOTAN_TARGET_OS_IS_DARWIN) || defined(BOTAN_TARGET_OS_IS_OPENBSD) - // On Darwin/OS X and OpenBSD, use sysctl - - int sels[2] = { -#if defined(BOTAN_TARGET_OS_IS_OPENBSD) - CTL_MACHDEP, CPU_ALTIVEC -#else - CTL_HW, HW_VECTORUNIT -#endif - }; - - int vector_type = 0; - size_t length = sizeof(vector_type); - int error = ::sysctl(sels, 2, &vector_type, &length, NULL, 0); - - if(error == 0 && vector_type > 0) - return CPUID::CPUID_ALTIVEC_BIT; - -#elif defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) && defined(BOTAN_TARGET_ARCH_IS_PPC64) - - enum PPC_hwcap_bit { - ALTIVEC_bit = (1 << 28), - CRYPTO_bit = (1 << 25), - - ARCH_hwcap_altivec = 16, // AT_HWCAP - ARCH_hwcap_crypto = 26, // AT_HWCAP2 - }; - - uint64_t detected_features = 0; - - const unsigned long hwcap_altivec = ::getauxval(PPC_hwcap_bit::ARCH_hwcap_altivec); - if(hwcap_altivec & PPC_hwcap_bit::ALTIVEC_bit) - detected_features |= CPUID::CPUID_ALTIVEC_BIT; - - const unsigned long hwcap_crypto = ::getauxval(PPC_hwcap_bit::ARCH_hwcap_crypto); - if(hwcap_crypto & PPC_hwcap_bit::CRYPTO_bit) - detected_features |= CPUID::CPUID_PPC_CRYPTO_BIT; - - return detected_features; - -#else - - /* - On PowerPC, MSR 287 is PVR, the Processor Version Number - Normally it is only accessible to ring 0, but Linux and NetBSD - (others, too, maybe?) will trap and emulate it for us. - */ - - int pvr = OS::run_cpu_instruction_probe([]() -> int { - uint32_t pvr = 0; - asm volatile("mfspr %0, 287" : "=r" (pvr)); - // Top 16 bits suffice to identify the model - return static_cast<int>(pvr >> 16); - }); - - if(pvr > 0) - { - const uint16_t ALTIVEC_PVR[] = { - 0x003E, // IBM POWER6 - 0x003F, // IBM POWER7 - 0x004A, // IBM POWER7p - 0x004D, // IBM POWER8 - 0x004B, // IBM POWER8E - 0x000C, // G4-7400 - 0x0039, // G5 970 - 0x003C, // G5 970FX - 0x0044, // G5 970MP - 0x0070, // Cell PPU - 0, // end - }; - - for(size_t i = 0; ALTIVEC_PVR[i]; ++i) - { - if(pvr == ALTIVEC_PVR[i]) - return CPUID::CPUID_ALTIVEC_BIT; - } - - return 0; - } - - // TODO try direct instruction probing - -#endif - - return 0; - } - -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_x86.cpp b/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_x86.cpp deleted file mode 100644 index 5387a801ec..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/cpuid_x86.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* -* Runtime CPU detection for x86 -* (C) 2009,2010,2013,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/cpuid.h> -#include <botan/mem_ops.h> -#include <botan/loadstor.h> - -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC) - #include <intrin.h> -#elif defined(BOTAN_BUILD_COMPILER_IS_INTEL) - #include <ia32intrin.h> -#elif defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) - #include <cpuid.h> -#endif - -#endif - -namespace Botan { - -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - -uint64_t CPUID::detect_cpu_features(size_t* cache_line_size) - { -#if defined(BOTAN_BUILD_COMPILER_IS_MSVC) - #define X86_CPUID(type, out) do { __cpuid((int*)out, type); } while(0) - #define X86_CPUID_SUBLEVEL(type, level, out) do { __cpuidex((int*)out, type, level); } while(0) - -#elif defined(BOTAN_BUILD_COMPILER_IS_INTEL) - #define X86_CPUID(type, out) do { __cpuid(out, type); } while(0) - #define X86_CPUID_SUBLEVEL(type, level, out) do { __cpuidex((int*)out, type, level); } while(0) - -#elif defined(BOTAN_TARGET_ARCH_IS_X86_64) && defined(BOTAN_USE_GCC_INLINE_ASM) - #define X86_CPUID(type, out) \ - asm("cpuid\n\t" : "=a" (out[0]), "=b" (out[1]), "=c" (out[2]), "=d" (out[3]) \ - : "0" (type)) - - #define X86_CPUID_SUBLEVEL(type, level, out) \ - asm("cpuid\n\t" : "=a" (out[0]), "=b" (out[1]), "=c" (out[2]), "=d" (out[3]) \ - : "0" (type), "2" (level)) - -#elif defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) - #define X86_CPUID(type, out) do { __get_cpuid(type, out, out+1, out+2, out+3); } while(0) - - #define X86_CPUID_SUBLEVEL(type, level, out) \ - do { __cpuid_count(type, level, out[0], out[1], out[2], out[3]); } while(0) -#else - #warning "No way of calling x86 cpuid instruction for this compiler" - #define X86_CPUID(type, out) do { clear_mem(out, 4); } while(0) - #define X86_CPUID_SUBLEVEL(type, level, out) do { clear_mem(out, 4); } while(0) -#endif - - uint64_t features_detected = 0; - uint32_t cpuid[4] = { 0 }; - - // CPUID 0: vendor identification, max sublevel - X86_CPUID(0, cpuid); - - const uint32_t max_supported_sublevel = cpuid[0]; - - const uint32_t INTEL_CPUID[3] = { 0x756E6547, 0x6C65746E, 0x49656E69 }; - const uint32_t AMD_CPUID[3] = { 0x68747541, 0x444D4163, 0x69746E65 }; - const bool is_intel = same_mem(cpuid + 1, INTEL_CPUID, 3); - const bool is_amd = same_mem(cpuid + 1, AMD_CPUID, 3); - - if(max_supported_sublevel >= 1) - { - // CPUID 1: feature bits - X86_CPUID(1, cpuid); - const uint64_t flags0 = (static_cast<uint64_t>(cpuid[2]) << 32) | cpuid[3]; - - enum x86_CPUID_1_bits : uint64_t { - RDTSC = (1ULL << 4), - SSE2 = (1ULL << 26), - CLMUL = (1ULL << 33), - SSSE3 = (1ULL << 41), - SSE41 = (1ULL << 51), - SSE42 = (1ULL << 52), - AESNI = (1ULL << 57), - RDRAND = (1ULL << 62) - }; - - if(flags0 & x86_CPUID_1_bits::RDTSC) - features_detected |= CPUID::CPUID_RDTSC_BIT; - if(flags0 & x86_CPUID_1_bits::SSE2) - features_detected |= CPUID::CPUID_SSE2_BIT; - if(flags0 & x86_CPUID_1_bits::CLMUL) - features_detected |= CPUID::CPUID_CLMUL_BIT; - if(flags0 & x86_CPUID_1_bits::SSSE3) - features_detected |= CPUID::CPUID_SSSE3_BIT; - if(flags0 & x86_CPUID_1_bits::SSE41) - features_detected |= CPUID::CPUID_SSE41_BIT; - if(flags0 & x86_CPUID_1_bits::SSE42) - features_detected |= CPUID::CPUID_SSE42_BIT; - if(flags0 & x86_CPUID_1_bits::AESNI) - features_detected |= CPUID::CPUID_AESNI_BIT; - if(flags0 & x86_CPUID_1_bits::RDRAND) - features_detected |= CPUID::CPUID_RDRAND_BIT; - } - - if(is_intel) - { - // Intel cache line size is in cpuid(1) output - *cache_line_size = 8 * get_byte(2, cpuid[1]); - } - else if(is_amd) - { - // AMD puts it in vendor zone - X86_CPUID(0x80000005, cpuid); - *cache_line_size = get_byte(3, cpuid[2]); - } - - if(max_supported_sublevel >= 7) - { - clear_mem(cpuid, 4); - X86_CPUID_SUBLEVEL(7, 0, cpuid); - - enum x86_CPUID_7_bits : uint64_t { - BMI1 = (1ULL << 3), - AVX2 = (1ULL << 5), - BMI2 = (1ULL << 8), - AVX512F = (1ULL << 16), - RDSEED = (1ULL << 18), - ADX = (1ULL << 19), - SHA = (1ULL << 29), - }; - uint64_t flags7 = (static_cast<uint64_t>(cpuid[2]) << 32) | cpuid[1]; - - if(flags7 & x86_CPUID_7_bits::AVX2) - features_detected |= CPUID::CPUID_AVX2_BIT; - if(flags7 & x86_CPUID_7_bits::BMI1) - { - features_detected |= CPUID::CPUID_BMI1_BIT; - /* - We only set the BMI2 bit if BMI1 is also supported, so BMI2 - code can safely use both extensions. No known processor - implements BMI2 but not BMI1. - */ - if(flags7 & x86_CPUID_7_bits::BMI2) - features_detected |= CPUID::CPUID_BMI2_BIT; - } - - if(flags7 & x86_CPUID_7_bits::AVX512F) - features_detected |= CPUID::CPUID_AVX512F_BIT; - if(flags7 & x86_CPUID_7_bits::RDSEED) - features_detected |= CPUID::CPUID_RDSEED_BIT; - if(flags7 & x86_CPUID_7_bits::ADX) - features_detected |= CPUID::CPUID_ADX_BIT; - if(flags7 & x86_CPUID_7_bits::SHA) - features_detected |= CPUID::CPUID_SHA_BIT; - } - -#undef X86_CPUID -#undef X86_CPUID_SUBLEVEL - - /* - * If we don't have access to CPUID, we can still safely assume that - * any x86-64 processor has SSE2 and RDTSC - */ -#if defined(BOTAN_TARGET_ARCH_IS_X86_64) - if(features_detected == 0) - { - features_detected |= CPUID::CPUID_SSE2_BIT; - features_detected |= CPUID::CPUID_RDTSC_BIT; - } -#endif - - return features_detected; - } - -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/cpuid/info.txt b/src/libs/3rdparty/botan/src/lib/utils/cpuid/info.txt deleted file mode 100644 index 987d7eae4d..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/cpuid/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -CPUID -> 20170917 -</defines> - -<header:public> -cpuid.h -</header:public> diff --git a/src/libs/3rdparty/botan/src/lib/utils/ct_utils.h b/src/libs/3rdparty/botan/src/lib/utils/ct_utils.h deleted file mode 100644 index f4f8818713..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/ct_utils.h +++ /dev/null @@ -1,215 +0,0 @@ -/* -* Functions for constant time operations on data and testing of -* constant time annotations using valgrind. -* -* For more information about constant time programming see -* Wagner, Molnar, et al "The Program Counter Security Model" -* -* (C) 2010 Falko Strenzke -* (C) 2015,2016 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_TIMING_ATTACK_CM_H_ -#define BOTAN_TIMING_ATTACK_CM_H_ - -#include <botan/secmem.h> -#include <type_traits> -#include <vector> - -#if defined(BOTAN_HAS_VALGRIND) - #include <valgrind/memcheck.h> -#endif - -namespace Botan { - -namespace CT { - -/** -* Use valgrind to mark the contents of memory as being undefined. -* Valgrind will accept operations which manipulate undefined values, -* but will warn if an undefined value is used to decided a conditional -* jump or a load/store address. So if we poison all of our inputs we -* can confirm that the operations in question are truly const time -* when compiled by whatever compiler is in use. -* -* Even better, the VALGRIND_MAKE_MEM_* macros work even when the -* program is not run under valgrind (though with a few cycles of -* overhead, which is unfortunate in final binaries as these -* annotations tend to be used in fairly important loops). -* -* This approach was first used in ctgrind (https://github.com/agl/ctgrind) -* but calling the valgrind mecheck API directly works just as well and -* doesn't require a custom patched valgrind. -*/ -template<typename T> -inline void poison(const T* p, size_t n) - { -#if defined(BOTAN_HAS_VALGRIND) - VALGRIND_MAKE_MEM_UNDEFINED(p, n * sizeof(T)); -#else - BOTAN_UNUSED(p); - BOTAN_UNUSED(n); -#endif - } - -template<typename T> -inline void unpoison(const T* p, size_t n) - { -#if defined(BOTAN_HAS_VALGRIND) - VALGRIND_MAKE_MEM_DEFINED(p, n * sizeof(T)); -#else - BOTAN_UNUSED(p); - BOTAN_UNUSED(n); -#endif - } - -template<typename T> -inline void unpoison(T& p) - { -#if defined(BOTAN_HAS_VALGRIND) - VALGRIND_MAKE_MEM_DEFINED(&p, sizeof(T)); -#else - BOTAN_UNUSED(p); -#endif - } - -/* Mask generation */ - -template<typename T> -inline T expand_top_bit(T a) - { - static_assert(std::is_unsigned<T>::value, "unsigned integer type required"); - return static_cast<T>(0) - (a >> (sizeof(T)*8-1)); - } - -template<typename T> -inline T is_zero(T x) - { - static_assert(std::is_unsigned<T>::value, "unsigned integer type required"); - return expand_top_bit<T>(~x & (x - 1)); - } - -/* -* T should be an unsigned machine integer type -* Expand to a mask used for other operations -* @param in an integer -* @return If n is zero, returns zero. Otherwise -* returns a T with all bits set for use as a mask with -* select. -*/ -template<typename T> -inline T expand_mask(T x) - { - static_assert(std::is_unsigned<T>::value, "unsigned integer type required"); - return ~is_zero(x); - } - -template<typename T> -inline T select(T mask, T from0, T from1) - { - static_assert(std::is_unsigned<T>::value, "unsigned integer type required"); - return static_cast<T>((from0 & mask) | (from1 & ~mask)); - } - -template<typename T> -inline T select2(T mask0, T val0, T mask1, T val1, T val2) - { - return select<T>(mask0, val0, select<T>(mask1, val1, val2)); - } - -template<typename T> -inline T select3(T mask0, T val0, T mask1, T val1, T mask2, T val2, T val3) - { - return select2<T>(mask0, val0, mask1, val1, select<T>(mask2, val2, val3)); - } - -template<typename PredT, typename ValT> -inline ValT val_or_zero(PredT pred_val, ValT val) - { - return select(CT::expand_mask<ValT>(pred_val), val, static_cast<ValT>(0)); - } - -template<typename T> -inline T is_equal(T x, T y) - { - return is_zero<T>(x ^ y); - } - -template<typename T> -inline T is_less(T a, T b) - { - return expand_top_bit<T>(a ^ ((a^b) | ((a-b)^a))); - } - -template<typename T> -inline T is_lte(T a, T b) - { - return CT::is_less(a, b) | CT::is_equal(a, b); - } - -template<typename C, typename T> -inline T conditional_return(C condvar, T left, T right) - { - const T val = CT::select(CT::expand_mask<T>(condvar), left, right); - CT::unpoison(val); - return val; - } - -template<typename T> -inline T conditional_copy_mem(T value, - T* to, - const T* from0, - const T* from1, - size_t elems) - { - const T mask = CT::expand_mask(value); - - for(size_t i = 0; i != elems; ++i) - { - to[i] = CT::select(mask, from0[i], from1[i]); - } - - return mask; - } - -template<typename T> -inline void cond_zero_mem(T cond, - T* array, - size_t elems) - { - const T mask = CT::expand_mask(cond); - const T zero(0); - - for(size_t i = 0; i != elems; ++i) - { - array[i] = CT::select(mask, zero, array[i]); - } - } - -inline secure_vector<uint8_t> strip_leading_zeros(const uint8_t in[], size_t length) - { - size_t leading_zeros = 0; - - uint8_t only_zeros = 0xFF; - - for(size_t i = 0; i != length; ++i) - { - only_zeros = only_zeros & CT::is_zero<uint8_t>(in[i]); - leading_zeros += CT::select<uint8_t>(only_zeros, 1, 0); - } - - return secure_vector<uint8_t>(in + leading_zeros, in + length); - } - -inline secure_vector<uint8_t> strip_leading_zeros(const secure_vector<uint8_t>& in) - { - return strip_leading_zeros(in.data(), in.size()); - } - -} - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/data_src.cpp b/src/libs/3rdparty/botan/src/lib/utils/data_src.cpp deleted file mode 100644 index c5689534ff..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/data_src.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/* -* DataSource -* (C) 1999-2007 Jack Lloyd -* 2005 Matthew Gregan -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/data_src.h> -#include <botan/exceptn.h> -#include <algorithm> -#include <istream> - -#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM) - #include <fstream> -#endif - -namespace Botan { - -/* -* Read a single byte from the DataSource -*/ -size_t DataSource::read_byte(uint8_t& out) - { - return read(&out, 1); - } - -/* -* Peek a single byte from the DataSource -*/ -size_t DataSource::peek_byte(uint8_t& out) const - { - return peek(&out, 1, 0); - } - -/* -* Discard the next N bytes of the data -*/ -size_t DataSource::discard_next(size_t n) - { - uint8_t buf[64] = { 0 }; - size_t discarded = 0; - - while(n) - { - const size_t got = this->read(buf, std::min(n, sizeof(buf))); - discarded += got; - n -= got; - - if(got == 0) - break; - } - - return discarded; - } - -/* -* Read from a memory buffer -*/ -size_t DataSource_Memory::read(uint8_t out[], size_t length) - { - const size_t got = std::min<size_t>(m_source.size() - m_offset, length); - copy_mem(out, m_source.data() + m_offset, got); - m_offset += got; - return got; - } - -bool DataSource_Memory::check_available(size_t n) - { - return (n <= (m_source.size() - m_offset)); - } - -/* -* Peek into a memory buffer -*/ -size_t DataSource_Memory::peek(uint8_t out[], size_t length, - size_t peek_offset) const - { - const size_t bytes_left = m_source.size() - m_offset; - if(peek_offset >= bytes_left) return 0; - - const size_t got = std::min(bytes_left - peek_offset, length); - copy_mem(out, &m_source[m_offset + peek_offset], got); - return got; - } - -/* -* Check if the memory buffer is empty -*/ -bool DataSource_Memory::end_of_data() const - { - return (m_offset == m_source.size()); - } - -/* -* DataSource_Memory Constructor -*/ -DataSource_Memory::DataSource_Memory(const std::string& in) : - m_source(cast_char_ptr_to_uint8(in.data()), - cast_char_ptr_to_uint8(in.data()) + in.length()), - m_offset(0) - { - } - -/* -* Read from a stream -*/ -size_t DataSource_Stream::read(uint8_t out[], size_t length) - { - m_source.read(cast_uint8_ptr_to_char(out), length); - if(m_source.bad()) - throw Stream_IO_Error("DataSource_Stream::read: Source failure"); - - const size_t got = static_cast<size_t>(m_source.gcount()); - m_total_read += got; - return got; - } - -bool DataSource_Stream::check_available(size_t n) - { - const std::streampos orig_pos = m_source.tellg(); - m_source.seekg(0, std::ios::end); - const size_t avail = static_cast<size_t>(m_source.tellg() - orig_pos); - m_source.seekg(orig_pos); - return (avail >= n); - } - -/* -* Peek into a stream -*/ -size_t DataSource_Stream::peek(uint8_t out[], size_t length, size_t offset) const - { - if(end_of_data()) - throw Invalid_State("DataSource_Stream: Cannot peek when out of data"); - - size_t got = 0; - - if(offset) - { - secure_vector<uint8_t> buf(offset); - m_source.read(cast_uint8_ptr_to_char(buf.data()), buf.size()); - if(m_source.bad()) - throw Stream_IO_Error("DataSource_Stream::peek: Source failure"); - got = static_cast<size_t>(m_source.gcount()); - } - - if(got == offset) - { - m_source.read(cast_uint8_ptr_to_char(out), length); - if(m_source.bad()) - throw Stream_IO_Error("DataSource_Stream::peek: Source failure"); - got = static_cast<size_t>(m_source.gcount()); - } - - if(m_source.eof()) - m_source.clear(); - m_source.seekg(m_total_read, std::ios::beg); - - return got; - } - -/* -* Check if the stream is empty or in error -*/ -bool DataSource_Stream::end_of_data() const - { - return (!m_source.good()); - } - -/* -* Return a human-readable ID for this stream -*/ -std::string DataSource_Stream::id() const - { - return m_identifier; - } - -#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM) - -/* -* DataSource_Stream Constructor -*/ -DataSource_Stream::DataSource_Stream(const std::string& path, - bool use_binary) : - m_identifier(path), - m_source_memory(new std::ifstream(path, use_binary ? std::ios::binary : std::ios::in)), - m_source(*m_source_memory), - m_total_read(0) - { - if(!m_source.good()) - { - throw Stream_IO_Error("DataSource: Failure opening file " + path); - } - } - -#endif - -/* -* DataSource_Stream Constructor -*/ -DataSource_Stream::DataSource_Stream(std::istream& in, - const std::string& name) : - m_identifier(name), - m_source(in), - m_total_read(0) - { - } - -DataSource_Stream::~DataSource_Stream() - { - // for ~unique_ptr - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/data_src.h b/src/libs/3rdparty/botan/src/lib/utils/data_src.h deleted file mode 100644 index 09c1bffdf7..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/data_src.h +++ /dev/null @@ -1,181 +0,0 @@ -/* -* DataSource -* (C) 1999-2007 Jack Lloyd -* 2012 Markus Wanner -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_DATA_SRC_H_ -#define BOTAN_DATA_SRC_H_ - -#include <botan/secmem.h> -#include <string> -#include <iosfwd> - -namespace Botan { - -/** -* This class represents an abstract data source object. -*/ -class BOTAN_PUBLIC_API(2,0) DataSource - { - public: - /** - * Read from the source. Moves the internal offset so that every - * call to read will return a new portion of the source. - * - * @param out the byte array to write the result to - * @param length the length of the byte array out - * @return length in bytes that was actually read and put - * into out - */ - virtual size_t read(uint8_t out[], size_t length) BOTAN_WARN_UNUSED_RESULT = 0; - - virtual bool check_available(size_t n) = 0; - - /** - * Read from the source but do not modify the internal - * offset. Consecutive calls to peek() will return portions of - * the source starting at the same position. - * - * @param out the byte array to write the output to - * @param length the length of the byte array out - * @param peek_offset the offset into the stream to read at - * @return length in bytes that was actually read and put - * into out - */ - virtual size_t peek(uint8_t out[], size_t length, size_t peek_offset) const BOTAN_WARN_UNUSED_RESULT = 0; - - /** - * Test whether the source still has data that can be read. - * @return true if there is no more data to read, false otherwise - */ - virtual bool end_of_data() const = 0; - /** - * return the id of this data source - * @return std::string representing the id of this data source - */ - virtual std::string id() const { return ""; } - - /** - * Read one byte. - * @param out the byte to read to - * @return length in bytes that was actually read and put - * into out - */ - size_t read_byte(uint8_t& out); - - /** - * Peek at one byte. - * @param out an output byte - * @return length in bytes that was actually read and put - * into out - */ - size_t peek_byte(uint8_t& out) const; - - /** - * Discard the next N bytes of the data - * @param N the number of bytes to discard - * @return number of bytes actually discarded - */ - size_t discard_next(size_t N); - - /** - * @return number of bytes read so far. - */ - virtual size_t get_bytes_read() const = 0; - - DataSource() = default; - virtual ~DataSource() = default; - DataSource& operator=(const DataSource&) = delete; - DataSource(const DataSource&) = delete; - }; - -/** -* This class represents a Memory-Based DataSource -*/ -class BOTAN_PUBLIC_API(2,0) DataSource_Memory final : public DataSource - { - public: - size_t read(uint8_t[], size_t) override; - size_t peek(uint8_t[], size_t, size_t) const override; - bool check_available(size_t n) override; - bool end_of_data() const override; - - /** - * Construct a memory source that reads from a string - * @param in the string to read from - */ - explicit DataSource_Memory(const std::string& in); - - /** - * Construct a memory source that reads from a byte array - * @param in the byte array to read from - * @param length the length of the byte array - */ - DataSource_Memory(const uint8_t in[], size_t length) : - m_source(in, in + length), m_offset(0) {} - - /** - * Construct a memory source that reads from a secure_vector - * @param in the MemoryRegion to read from - */ - explicit DataSource_Memory(const secure_vector<uint8_t>& in) : - m_source(in), m_offset(0) {} - - /** - * Construct a memory source that reads from a std::vector - * @param in the MemoryRegion to read from - */ - explicit DataSource_Memory(const std::vector<uint8_t>& in) : - m_source(in.begin(), in.end()), m_offset(0) {} - - size_t get_bytes_read() const override { return m_offset; } - private: - secure_vector<uint8_t> m_source; - size_t m_offset; - }; - -/** -* This class represents a Stream-Based DataSource. -*/ -class BOTAN_PUBLIC_API(2,0) DataSource_Stream final : public DataSource - { - public: - size_t read(uint8_t[], size_t) override; - size_t peek(uint8_t[], size_t, size_t) const override; - bool check_available(size_t n) override; - bool end_of_data() const override; - std::string id() const override; - - DataSource_Stream(std::istream&, - const std::string& id = "<std::istream>"); - -#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM) - /** - * Construct a Stream-Based DataSource from filesystem path - * @param file the path to the file - * @param use_binary whether to treat the file as binary or not - */ - DataSource_Stream(const std::string& file, bool use_binary = false); -#endif - - DataSource_Stream(const DataSource_Stream&) = delete; - - DataSource_Stream& operator=(const DataSource_Stream&) = delete; - - ~DataSource_Stream(); - - size_t get_bytes_read() const override { return m_total_read; } - private: - const std::string m_identifier; - - std::unique_ptr<std::istream> m_source_memory; - std::istream& m_source; - size_t m_total_read; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/database.h b/src/libs/3rdparty/botan/src/lib/utils/database.h deleted file mode 100644 index 21a207445a..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/database.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -* SQL database interface -* (C) 2014 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SQL_DATABASE_H_ -#define BOTAN_SQL_DATABASE_H_ - -#include <botan/types.h> -#include <botan/exceptn.h> -#include <string> -#include <chrono> -#include <vector> - -namespace Botan { - -class BOTAN_PUBLIC_API(2,0) SQL_Database - { - public: - - class BOTAN_PUBLIC_API(2,0) SQL_DB_Error final : public Exception - { - public: - explicit SQL_DB_Error(const std::string& what) : Exception("SQL database", what) {} - }; - - class BOTAN_PUBLIC_API(2,0) Statement - { - public: - /* Bind statement parameters */ - virtual void bind(int column, const std::string& str) = 0; - - virtual void bind(int column, size_t i) = 0; - - virtual void bind(int column, std::chrono::system_clock::time_point time) = 0; - - virtual void bind(int column, const std::vector<uint8_t>& blob) = 0; - - virtual void bind(int column, const uint8_t* data, size_t len) = 0; - - /* Get output */ - virtual std::pair<const uint8_t*, size_t> get_blob(int column) = 0; - - virtual std::string get_str(int column) = 0; - - virtual size_t get_size_t(int column) = 0; - - /* Run to completion */ - virtual size_t spin() = 0; - - /* Maybe update */ - virtual bool step() = 0; - - virtual ~Statement() = default; - }; - - /* - * Create a new statement for execution. - * Use ?1, ?2, ?3, etc for parameters to set later with bind - */ - virtual std::shared_ptr<Statement> new_statement(const std::string& base_sql) const = 0; - - virtual size_t row_count(const std::string& table_name) = 0; - - virtual void create_table(const std::string& table_schema) = 0; - - virtual ~SQL_Database() = default; -}; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/donna128.h b/src/libs/3rdparty/botan/src/lib/utils/donna128.h deleted file mode 100644 index ff571906d8..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/donna128.h +++ /dev/null @@ -1,143 +0,0 @@ -/* -* A minimal 128-bit integer type for curve25519-donna -* (C) 2014 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_CURVE25519_DONNA128_H_ -#define BOTAN_CURVE25519_DONNA128_H_ - -#include <botan/mul128.h> - -namespace Botan { - -class donna128 final - { - public: - donna128(uint64_t ll = 0, uint64_t hh = 0) { l = ll; h = hh; } - - donna128(const donna128&) = default; - donna128& operator=(const donna128&) = default; - - friend donna128 operator>>(const donna128& x, size_t shift) - { - donna128 z = x; - if(shift > 0) - { - const uint64_t carry = z.h << (64 - shift); - z.h = (z.h >> shift); - z.l = (z.l >> shift) | carry; - } - return z; - } - - friend donna128 operator<<(const donna128& x, size_t shift) - { - donna128 z = x; - if(shift > 0) - { - const uint64_t carry = z.l >> (64 - shift); - z.l = (z.l << shift); - z.h = (z.h << shift) | carry; - } - return z; - } - - friend uint64_t operator&(const donna128& x, uint64_t mask) - { - return x.l & mask; - } - - uint64_t operator&=(uint64_t mask) - { - h = 0; - l &= mask; - return l; - } - - donna128& operator+=(const donna128& x) - { - l += x.l; - h += x.h; - - const uint64_t carry = (l < x.l); - h += carry; - return *this; - } - - donna128& operator+=(uint64_t x) - { - l += x; - const uint64_t carry = (l < x); - h += carry; - return *this; - } - - uint64_t lo() const { return l; } - uint64_t hi() const { return h; } - private: - uint64_t h = 0, l = 0; - }; - -inline donna128 operator*(const donna128& x, uint64_t y) - { - BOTAN_ARG_CHECK(x.hi() == 0, "High 64 bits of donna128 set to zero during multiply"); - - uint64_t lo = 0, hi = 0; - mul64x64_128(x.lo(), y, &lo, &hi); - return donna128(lo, hi); - } - -inline donna128 operator*(uint64_t y, const donna128& x) - { - return x * y; - } - -inline donna128 operator+(const donna128& x, const donna128& y) - { - donna128 z = x; - z += y; - return z; - } - -inline donna128 operator+(const donna128& x, uint64_t y) - { - donna128 z = x; - z += y; - return z; - } - -inline donna128 operator|(const donna128& x, const donna128& y) - { - return donna128(x.lo() | y.lo(), x.hi() | y.hi()); - } - -inline uint64_t carry_shift(const donna128& a, size_t shift) - { - return (a >> shift).lo(); - } - -inline uint64_t combine_lower(const donna128& a, size_t s1, - const donna128& b, size_t s2) - { - donna128 z = (a >> s1) | (b << s2); - return z.lo(); - } - -#if defined(BOTAN_TARGET_HAS_NATIVE_UINT128) -inline uint64_t carry_shift(const uint128_t a, size_t shift) - { - return static_cast<uint64_t>(a >> shift); - } - -inline uint64_t combine_lower(const uint128_t a, size_t s1, - const uint128_t b, size_t s2) - { - return static_cast<uint64_t>((a >> s1) | (b << s2)); - } -#endif - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.cpp b/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.cpp deleted file mode 100644 index 1bbcffbdb5..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Dynamically Loaded Object -* (C) 2010 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/dyn_load.h> -#include <botan/exceptn.h> - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - #include <dlfcn.h> -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - #define NOMINMAX 1 - #define _WINSOCKAPI_ // stop windows.h including winsock.h - #include <windows.h> -#endif - -namespace Botan { - -namespace { - -void raise_runtime_loader_exception(const std::string& lib_name, - const char* msg) - { - throw Exception("Failed to load " + lib_name + ": " + - (msg ? msg : "Unknown error")); - } - -} - -Dynamically_Loaded_Library::Dynamically_Loaded_Library( - const std::string& library) : - m_lib_name(library), m_lib(nullptr) - { -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - m_lib = ::dlopen(m_lib_name.c_str(), RTLD_LAZY); - - if(!m_lib) - raise_runtime_loader_exception(m_lib_name, ::dlerror()); - -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - m_lib = ::LoadLibraryA(m_lib_name.c_str()); - - if(!m_lib) - raise_runtime_loader_exception(m_lib_name, "LoadLibrary failed"); -#endif - - if(!m_lib) - raise_runtime_loader_exception(m_lib_name, "Dynamic load not supported"); - } - -Dynamically_Loaded_Library::~Dynamically_Loaded_Library() - { -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - ::dlclose(m_lib); -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - ::FreeLibrary((HMODULE)m_lib); -#endif - } - -void* Dynamically_Loaded_Library::resolve_symbol(const std::string& symbol) - { - void* addr = nullptr; - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - addr = ::dlsym(m_lib, symbol.c_str()); -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - addr = reinterpret_cast<void*>(::GetProcAddress((HMODULE)m_lib, symbol.c_str())); -#endif - - if(!addr) - throw Exception("Failed to resolve symbol " + symbol + - " in " + m_lib_name); - - return addr; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.h b/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.h deleted file mode 100644 index 3caf65f277..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/dyn_load.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -* Dynamically Loaded Object -* (C) 2010 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_DYNAMIC_LOADER_H_ -#define BOTAN_DYNAMIC_LOADER_H_ - -#include <botan/types.h> -#include <string> - -namespace Botan { - -/** -* Represents a DLL or shared object -*/ -class BOTAN_PUBLIC_API(2,0) Dynamically_Loaded_Library final - { - public: - /** - * Load a DLL (or fail with an exception) - * @param lib_name name or path to a library - * - * If you don't use a full path, the search order will be defined - * by whatever the system linker does by default. Always using fully - * qualified pathnames can help prevent code injection attacks (eg - * via manipulation of LD_LIBRARY_PATH on Linux) - */ - Dynamically_Loaded_Library(const std::string& lib_name); - - /** - * Unload the DLL - * @warning Any pointers returned by resolve()/resolve_symbol() - * should not be used after this destructor runs. - */ - ~Dynamically_Loaded_Library(); - - /** - * Load a symbol (or fail with an exception) - * @param symbol names the symbol to load - * @return address of the loaded symbol - */ - void* resolve_symbol(const std::string& symbol); - - /** - * Convenience function for casting symbol to the right type - * @param symbol names the symbol to load - * @return address of the loaded symbol - */ - template<typename T> - T resolve(const std::string& symbol) - { - return reinterpret_cast<T>(resolve_symbol(symbol)); - } - - private: - Dynamically_Loaded_Library(const Dynamically_Loaded_Library&); - Dynamically_Loaded_Library& operator=(const Dynamically_Loaded_Library&); - - std::string m_lib_name; - void* m_lib; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/info.txt b/src/libs/3rdparty/botan/src/lib/utils/dyn_load/info.txt deleted file mode 100644 index 4dd4932a00..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/dyn_load/info.txt +++ /dev/null @@ -1,17 +0,0 @@ -<defines> -DYNAMIC_LOADER -> 20160310 -</defines> - -load_on dep - -<os_features> -posix1 -win32 -</os_features> - -<libs> -android -> dl -linux -> dl -solaris -> dl -darwin -> dl -</libs> diff --git a/src/libs/3rdparty/botan/src/lib/utils/exceptn.cpp b/src/libs/3rdparty/botan/src/lib/utils/exceptn.cpp deleted file mode 100644 index cc6eb9f85c..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/exceptn.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* -* (C) 2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/exceptn.h> - -namespace Botan { - -Exception::Exception(const std::string& msg) : m_msg(msg) - {} - -Exception::Exception(const std::string& msg, const std::exception& e) : - m_msg(msg + " failed with " + std::string(e.what())) - {} - -Exception::Exception(const char* prefix, const std::string& msg) : - m_msg(std::string(prefix) + " " + msg) - {} - -Invalid_Argument::Invalid_Argument(const std::string& msg) : - Exception(msg) - {} - -Invalid_Argument::Invalid_Argument(const std::string& msg, const std::string& where) : - Exception(msg + " in " + where) - {} - -Invalid_Argument::Invalid_Argument(const std::string& msg, const std::exception& e) : - Exception(msg, e) {} - -Lookup_Error::Lookup_Error(const std::string& type, - const std::string& algo, - const std::string& provider) : - Exception("Unavailable " + type + " " + algo + - (provider.empty() ? std::string("") : (" for provider " + provider))) - {} - -Internal_Error::Internal_Error(const std::string& err) : - Exception("Internal error: " + err) - {} - -Invalid_Key_Length::Invalid_Key_Length(const std::string& name, size_t length) : - Invalid_Argument(name + " cannot accept a key of length " + - std::to_string(length)) - {} - -Invalid_IV_Length::Invalid_IV_Length(const std::string& mode, size_t bad_len) : - Invalid_Argument("IV length " + std::to_string(bad_len) + - " is invalid for " + mode) - {} - -Key_Not_Set::Key_Not_Set(const std::string& algo) : - Invalid_State("Key not set in " + algo) - {} - -Policy_Violation::Policy_Violation(const std::string& err) : - Invalid_State("Policy violation: " + err) {} - -PRNG_Unseeded::PRNG_Unseeded(const std::string& algo) : - Invalid_State("PRNG not seeded: " + algo) - {} - -Algorithm_Not_Found::Algorithm_Not_Found(const std::string& name) : - Lookup_Error("Could not find any algorithm named \"" + name + "\"") - {} - -No_Provider_Found::No_Provider_Found(const std::string& name) : - Exception("Could not find any provider for algorithm named \"" + name + "\"") - {} - -Provider_Not_Found::Provider_Not_Found(const std::string& algo, const std::string& provider) : - Lookup_Error("Could not find provider '" + provider + "' for " + algo) - {} - -Invalid_Algorithm_Name::Invalid_Algorithm_Name(const std::string& name): - Invalid_Argument("Invalid algorithm name: " + name) - {} - -Encoding_Error::Encoding_Error(const std::string& name) : - Invalid_Argument("Encoding error: " + name) - {} - -Decoding_Error::Decoding_Error(const std::string& name) : - Invalid_Argument(name) - {} - -Decoding_Error::Decoding_Error(const std::string& msg, const std::exception& e) : - Invalid_Argument(msg, e) - {} - -Decoding_Error::Decoding_Error(const std::string& name, const char* exception_message) : - Invalid_Argument(name + " failed with exception " + exception_message) {} - -Integrity_Failure::Integrity_Failure(const std::string& msg) : - Exception("Integrity failure: " + msg) - {} - -Invalid_OID::Invalid_OID(const std::string& oid) : - Decoding_Error("Invalid ASN.1 OID: " + oid) - {} - -Stream_IO_Error::Stream_IO_Error(const std::string& err) : - Exception("I/O error: " + err) - {} - -Self_Test_Failure::Self_Test_Failure(const std::string& err) : - Internal_Error("Self test failed: " + err) - {} - -Not_Implemented::Not_Implemented(const std::string& err) : - Exception("Not implemented", err) - {} - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/exceptn.h b/src/libs/3rdparty/botan/src/lib/utils/exceptn.h deleted file mode 100644 index efa52580c7..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/exceptn.h +++ /dev/null @@ -1,236 +0,0 @@ -/* -* Exceptions -* (C) 1999-2009 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_EXCEPTION_H_ -#define BOTAN_EXCEPTION_H_ - -#include <botan/types.h> -#include <exception> -#include <string> - -namespace Botan { - -/** -* Base class for all exceptions thrown by the library -*/ -class BOTAN_PUBLIC_API(2,0) Exception : public std::exception - { - public: - Exception(const char* prefix, const std::string& msg); - explicit Exception(const std::string& msg); - const char* what() const BOTAN_NOEXCEPT override { return m_msg.c_str(); } - protected: - Exception(const std::string& msg, const std::exception& e); - private: - std::string m_msg; - }; - -/** -* An invalid argument -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_Argument : public Exception - { - public: - explicit Invalid_Argument(const std::string& msg); - - explicit Invalid_Argument(const std::string& msg, const std::string& where); - - Invalid_Argument(const std::string& msg, const std::exception& e); - }; - -/** -* Unsupported_Argument Exception -* -* An argument that is invalid because it is not supported by Botan. -* It might or might not be valid in another context like a standard. -*/ -class BOTAN_PUBLIC_API(2,0) Unsupported_Argument final : public Invalid_Argument - { - public: - explicit Unsupported_Argument(const std::string& msg) : Invalid_Argument(msg) {} - }; - -/** -* Invalid_State Exception -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_State : public Exception - { - public: - explicit Invalid_State(const std::string& err) : Exception(err) {} - }; - -class BOTAN_PUBLIC_API(2,4) Key_Not_Set : public Invalid_State - { - public: - explicit Key_Not_Set(const std::string& algo); - }; - -/** -* Lookup_Error Exception -*/ -class BOTAN_PUBLIC_API(2,0) Lookup_Error : public Exception - { - public: - explicit Lookup_Error(const std::string& err) : Exception(err) {} - - Lookup_Error(const std::string& type, - const std::string& algo, - const std::string& provider); - }; - -/** -* Internal_Error Exception -*/ -class BOTAN_PUBLIC_API(2,0) Internal_Error : public Exception - { - public: - explicit Internal_Error(const std::string& err); - }; - -/** -* Invalid_Key_Length Exception -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_Key_Length final : public Invalid_Argument - { - public: - Invalid_Key_Length(const std::string& name, size_t length); - }; - -/** -* Invalid_IV_Length Exception -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_IV_Length final : public Invalid_Argument - { - public: - Invalid_IV_Length(const std::string& mode, size_t bad_len); - }; - -/** -* PRNG_Unseeded Exception -*/ -class BOTAN_PUBLIC_API(2,0) PRNG_Unseeded final : public Invalid_State - { - public: - explicit PRNG_Unseeded(const std::string& algo); - }; - -/** -* Policy_Violation Exception -*/ -class BOTAN_PUBLIC_API(2,0) Policy_Violation final : public Invalid_State - { - public: - BOTAN_DEPRECATED("deprecated") explicit Policy_Violation(const std::string& err); - }; - -/** -* Algorithm_Not_Found Exception -*/ -class BOTAN_PUBLIC_API(2,0) Algorithm_Not_Found final : public Lookup_Error - { - public: - explicit Algorithm_Not_Found(const std::string& name); - }; - -/** -* No_Provider_Found Exception -*/ -class BOTAN_PUBLIC_API(2,0) No_Provider_Found final : public Exception - { - public: - BOTAN_DEPRECATED("deprecated") explicit No_Provider_Found(const std::string& name); - }; - -/** -* Provider_Not_Found is thrown when a specific provider was requested -* but that provider is not available. -*/ -class BOTAN_PUBLIC_API(2,0) Provider_Not_Found final : public Lookup_Error - { - public: - Provider_Not_Found(const std::string& algo, const std::string& provider); - }; - -/** -* Invalid_Algorithm_Name Exception -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_Algorithm_Name final : public Invalid_Argument - { - public: - explicit Invalid_Algorithm_Name(const std::string& name); - }; - -/** -* Encoding_Error Exception -*/ -class BOTAN_PUBLIC_API(2,0) Encoding_Error final : public Invalid_Argument - { - public: - explicit Encoding_Error(const std::string& name); - }; - -/** -* Decoding_Error Exception -*/ -class BOTAN_PUBLIC_API(2,0) Decoding_Error : public Invalid_Argument - { - public: - explicit Decoding_Error(const std::string& name); - - Decoding_Error(const std::string& name, const char* exception_message); - - Decoding_Error(const std::string& msg, const std::exception& e); - }; - -/** -* Integrity_Failure Exception -*/ -class BOTAN_PUBLIC_API(2,0) Integrity_Failure final : public Exception - { - public: - explicit Integrity_Failure(const std::string& msg); - }; - -/** -* Invalid_OID Exception -*/ -class BOTAN_PUBLIC_API(2,0) Invalid_OID final : public Decoding_Error - { - public: - explicit Invalid_OID(const std::string& oid); - }; - -/** -* Stream_IO_Error Exception -*/ -class BOTAN_PUBLIC_API(2,0) Stream_IO_Error final : public Exception - { - public: - explicit Stream_IO_Error(const std::string& err); - }; - -/** -* Self Test Failure Exception -*/ -class BOTAN_PUBLIC_API(2,0) Self_Test_Failure final : public Internal_Error - { - public: - BOTAN_DEPRECATED("deprecated") explicit Self_Test_Failure(const std::string& err); - }; - -/** -* Not Implemented Exception -*/ -class BOTAN_PUBLIC_API(2,0) Not_Implemented final : public Exception - { - public: - explicit Not_Implemented(const std::string& err); - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/filesystem.cpp b/src/libs/3rdparty/botan/src/lib/utils/filesystem.cpp deleted file mode 100644 index 053c91e701..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/filesystem.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* -* (C) 2015,2017 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/exceptn.h> -#include <botan/internal/filesystem.h> -#include <algorithm> - -#if defined(BOTAN_TARGET_OS_HAS_STL_FILESYSTEM_MSVC) && defined(BOTAN_BUILD_COMPILER_IS_MSVC) - #include <filesystem> -#elif defined(BOTAN_HAS_BOOST_FILESYSTEM) - #include <boost/filesystem.hpp> -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - #include <sys/types.h> - #include <sys/stat.h> - #include <dirent.h> - #include <deque> - #include <memory> - #include <functional> -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - #define NOMINMAX 1 - #define _WINSOCKAPI_ // stop windows.h including winsock.h - #include <windows.h> - #include <deque> - #include <memory> -#endif - -namespace Botan { - -namespace { - -#if defined(BOTAN_TARGET_OS_HAS_STL_FILESYSTEM_MSVC) && defined(BOTAN_BUILD_COMPILER_IS_MSVC) -std::vector<std::string> impl_stl_filesystem(const std::string& dir) - { -#if (_MSVC_LANG >= 201703L) - using namespace std::filesystem; -#else - using namespace std::tr2::sys; -#endif - - std::vector<std::string> out; - - path p(dir); - - if(is_directory(p)) - { - for(recursive_directory_iterator itr(p), end; itr != end; ++itr) - { - if(is_regular_file(itr->path())) - { - out.push_back(itr->path().string()); - } - } - } - - return out; - } - -#elif defined(BOTAN_HAS_BOOST_FILESYSTEM) - -std::vector<std::string> impl_boost_filesystem(const std::string& dir_path) -{ - namespace fs = boost::filesystem; - - std::vector<std::string> out; - - for(fs::recursive_directory_iterator dir(dir_path), end; dir != end; ++dir) - { - if(fs::is_regular_file(dir->path())) - { - out.push_back(dir->path().string()); - } - } - - return out; -} - -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - -std::vector<std::string> impl_readdir(const std::string& dir_path) - { - std::vector<std::string> out; - std::deque<std::string> dir_list; - dir_list.push_back(dir_path); - - while(!dir_list.empty()) - { - const std::string cur_path = dir_list[0]; - dir_list.pop_front(); - - std::unique_ptr<DIR, std::function<int (DIR*)>> dir(::opendir(cur_path.c_str()), ::closedir); - - if(dir) - { - while(struct dirent* dirent = ::readdir(dir.get())) - { - const std::string filename = dirent->d_name; - if(filename == "." || filename == "..") - continue; - const std::string full_path = cur_path + "/" + filename; - - struct stat stat_buf; - - if(::stat(full_path.c_str(), &stat_buf) == -1) - continue; - - if(S_ISDIR(stat_buf.st_mode)) - dir_list.push_back(full_path); - else if(S_ISREG(stat_buf.st_mode)) - out.push_back(full_path); - } - } - } - - return out; - } - -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - -std::vector<std::string> impl_win32(const std::string& dir_path) - { - std::vector<std::string> out; - std::deque<std::string> dir_list; - dir_list.push_back(dir_path); - - while(!dir_list.empty()) - { - const std::string cur_path = dir_list[0]; - dir_list.pop_front(); - - WIN32_FIND_DATAA find_data; - HANDLE dir = ::FindFirstFileA((cur_path + "/*").c_str(), &find_data); - - if(dir != INVALID_HANDLE_VALUE) - { - do - { - const std::string filename = find_data.cFileName; - if(filename == "." || filename == "..") - continue; - const std::string full_path = cur_path + "/" + filename; - - if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - dir_list.push_back(full_path); - } - else - { - out.push_back(full_path); - } - } - while(::FindNextFileA(dir, &find_data)); - } - - ::FindClose(dir); - } - - return out; -} -#endif - -} - -bool has_filesystem_impl() - { -#if defined(BOTAN_TARGET_OS_HAS_STL_FILESYSTEM_MSVC) && defined(BOTAN_BUILD_COMPILER_IS_MSVC) - return true; -#elif defined(BOTAN_HAS_BOOST_FILESYSTEM) - return true; -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - return true; -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - return true; -#else - return false; -#endif - } - -std::vector<std::string> get_files_recursive(const std::string& dir) - { - std::vector<std::string> files; - -#if defined(BOTAN_TARGET_OS_HAS_STL_FILESYSTEM_MSVC) && defined(BOTAN_BUILD_COMPILER_IS_MSVC) - files = impl_stl_filesystem(dir); -#elif defined(BOTAN_HAS_BOOST_FILESYSTEM) - files = impl_boost_filesystem(dir); -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - files = impl_readdir(dir); -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - files = impl_win32(dir); -#else - BOTAN_UNUSED(dir); - throw No_Filesystem_Access(); -#endif - - std::sort(files.begin(), files.end()); - - return files; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/filesystem.h b/src/libs/3rdparty/botan/src/lib/utils/filesystem.h deleted file mode 100644 index 382da7de34..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/filesystem.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -* (C) 2015 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_UTIL_FILESYSTEM_H_ -#define BOTAN_UTIL_FILESYSTEM_H_ - -#include <botan/types.h> -#include <vector> -#include <string> - -namespace Botan { - -/** -* No_Filesystem_Access Exception -*/ -class BOTAN_PUBLIC_API(2,0) No_Filesystem_Access final : public Exception - { - public: - No_Filesystem_Access() : Exception("No filesystem access enabled.") - {} - }; - -BOTAN_TEST_API bool has_filesystem_impl(); - -BOTAN_TEST_API std::vector<std::string> get_files_recursive(const std::string& dir); - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/info.txt b/src/libs/3rdparty/botan/src/lib/utils/info.txt deleted file mode 100644 index 93ae795ef5..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/info.txt +++ /dev/null @@ -1,43 +0,0 @@ -<defines> -UTIL_FUNCTIONS -> 20180903 -</defines> - -load_on always - -<header:public> -assert.h -bswap.h -calendar.h -charset.h -compiler.h -data_src.h -database.h -exceptn.h -loadstor.h -mem_ops.h -mul128.h -mutex.h -parsing.h -rotate.h -types.h -version.h -stl_compatibility.h -</header:public> - -<header:internal> -bit_ops.h -codec_base.h -ct_utils.h -donna128.h -filesystem.h -os_utils.h -prefetch.h -rounding.h -safeint.h -stl_util.h -timer.h -</header:internal> - -<requires> -cpuid -</requires> diff --git a/src/libs/3rdparty/botan/src/lib/utils/loadstor.h b/src/libs/3rdparty/botan/src/lib/utils/loadstor.h deleted file mode 100644 index 70ad20591c..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/loadstor.h +++ /dev/null @@ -1,697 +0,0 @@ -/* -* Load/Store Operators -* (C) 1999-2007,2015,2017 Jack Lloyd -* 2007 Yves Jerschow -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_LOAD_STORE_H_ -#define BOTAN_LOAD_STORE_H_ - -#include <botan/types.h> -#include <botan/bswap.h> -#include <botan/mem_ops.h> -#include <vector> - -#if defined(BOTAN_TARGET_CPU_IS_BIG_ENDIAN) - #define BOTAN_ENDIAN_N2L(x) reverse_bytes(x) - #define BOTAN_ENDIAN_L2N(x) reverse_bytes(x) - #define BOTAN_ENDIAN_N2B(x) (x) - #define BOTAN_ENDIAN_B2N(x) (x) - -#elif defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN) - #define BOTAN_ENDIAN_N2L(x) (x) - #define BOTAN_ENDIAN_L2N(x) (x) - #define BOTAN_ENDIAN_N2B(x) reverse_bytes(x) - #define BOTAN_ENDIAN_B2N(x) reverse_bytes(x) - -#endif - -namespace Botan { - -/** -* Byte extraction -* @param byte_num which byte to extract, 0 == highest byte -* @param input the value to extract from -* @return byte byte_num of input -*/ -template<typename T> inline uint8_t get_byte(size_t byte_num, T input) - { - return static_cast<uint8_t>( - input >> (((~byte_num)&(sizeof(T)-1)) << 3) - ); - } - -/** -* Make a uint16_t from two bytes -* @param i0 the first byte -* @param i1 the second byte -* @return i0 || i1 -*/ -inline uint16_t make_uint16(uint8_t i0, uint8_t i1) - { - return static_cast<uint16_t>((static_cast<uint16_t>(i0) << 8) | i1); - } - -/** -* Make a uint32_t from four bytes -* @param i0 the first byte -* @param i1 the second byte -* @param i2 the third byte -* @param i3 the fourth byte -* @return i0 || i1 || i2 || i3 -*/ -inline uint32_t make_uint32(uint8_t i0, uint8_t i1, uint8_t i2, uint8_t i3) - { - return ((static_cast<uint32_t>(i0) << 24) | - (static_cast<uint32_t>(i1) << 16) | - (static_cast<uint32_t>(i2) << 8) | - (static_cast<uint32_t>(i3))); - } - -/** -* Make a uint32_t from eight bytes -* @param i0 the first byte -* @param i1 the second byte -* @param i2 the third byte -* @param i3 the fourth byte -* @param i4 the fifth byte -* @param i5 the sixth byte -* @param i6 the seventh byte -* @param i7 the eighth byte -* @return i0 || i1 || i2 || i3 || i4 || i5 || i6 || i7 -*/ -inline uint64_t make_uint64(uint8_t i0, uint8_t i1, uint8_t i2, uint8_t i3, - uint8_t i4, uint8_t i5, uint8_t i6, uint8_t i7) - { - return ((static_cast<uint64_t>(i0) << 56) | - (static_cast<uint64_t>(i1) << 48) | - (static_cast<uint64_t>(i2) << 40) | - (static_cast<uint64_t>(i3) << 32) | - (static_cast<uint64_t>(i4) << 24) | - (static_cast<uint64_t>(i5) << 16) | - (static_cast<uint64_t>(i6) << 8) | - (static_cast<uint64_t>(i7))); - } - -/** -* Load a big-endian word -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th T of in, as a big-endian value -*/ -template<typename T> -inline T load_be(const uint8_t in[], size_t off) - { - in += off * sizeof(T); - T out = 0; - for(size_t i = 0; i != sizeof(T); ++i) - out = static_cast<T>((out << 8) | in[i]); - return out; - } - -/** -* Load a little-endian word -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th T of in, as a litte-endian value -*/ -template<typename T> -inline T load_le(const uint8_t in[], size_t off) - { - in += off * sizeof(T); - T out = 0; - for(size_t i = 0; i != sizeof(T); ++i) - out = (out << 8) | in[sizeof(T)-1-i]; - return out; - } - -/** -* Load a big-endian uint16_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint16_t of in, as a big-endian value -*/ -template<> -inline uint16_t load_be<uint16_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint16_t); - -#if defined(BOTAN_ENDIAN_N2B) - uint16_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2B(x); -#else - return make_uint16(in[0], in[1]); -#endif - } - -/** -* Load a little-endian uint16_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint16_t of in, as a little-endian value -*/ -template<> -inline uint16_t load_le<uint16_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint16_t); - -#if defined(BOTAN_ENDIAN_N2L) - uint16_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2L(x); -#else - return make_uint16(in[1], in[0]); -#endif - } - -/** -* Load a big-endian uint32_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint32_t of in, as a big-endian value -*/ -template<> -inline uint32_t load_be<uint32_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint32_t); -#if defined(BOTAN_ENDIAN_N2B) - uint32_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2B(x); -#else - return make_uint32(in[0], in[1], in[2], in[3]); -#endif - } - -/** -* Load a little-endian uint32_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint32_t of in, as a little-endian value -*/ -template<> -inline uint32_t load_le<uint32_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint32_t); -#if defined(BOTAN_ENDIAN_N2L) - uint32_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2L(x); -#else - return make_uint32(in[3], in[2], in[1], in[0]); -#endif - } - -/** -* Load a big-endian uint64_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint64_t of in, as a big-endian value -*/ -template<> -inline uint64_t load_be<uint64_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint64_t); -#if defined(BOTAN_ENDIAN_N2B) - uint64_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2B(x); -#else - return make_uint64(in[0], in[1], in[2], in[3], - in[4], in[5], in[6], in[7]); -#endif - } - -/** -* Load a little-endian uint64_t -* @param in a pointer to some bytes -* @param off an offset into the array -* @return off'th uint64_t of in, as a little-endian value -*/ -template<> -inline uint64_t load_le<uint64_t>(const uint8_t in[], size_t off) - { - in += off * sizeof(uint64_t); -#if defined(BOTAN_ENDIAN_N2L) - uint64_t x; - std::memcpy(&x, in, sizeof(x)); - return BOTAN_ENDIAN_N2L(x); -#else - return make_uint64(in[7], in[6], in[5], in[4], - in[3], in[2], in[1], in[0]); -#endif - } - -/** -* Load two little-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -*/ -template<typename T> -inline void load_le(const uint8_t in[], T& x0, T& x1) - { - x0 = load_le<T>(in, 0); - x1 = load_le<T>(in, 1); - } - -/** -* Load four little-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -* @param x2 where the third word will be written -* @param x3 where the fourth word will be written -*/ -template<typename T> -inline void load_le(const uint8_t in[], - T& x0, T& x1, T& x2, T& x3) - { - x0 = load_le<T>(in, 0); - x1 = load_le<T>(in, 1); - x2 = load_le<T>(in, 2); - x3 = load_le<T>(in, 3); - } - -/** -* Load eight little-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -* @param x2 where the third word will be written -* @param x3 where the fourth word will be written -* @param x4 where the fifth word will be written -* @param x5 where the sixth word will be written -* @param x6 where the seventh word will be written -* @param x7 where the eighth word will be written -*/ -template<typename T> -inline void load_le(const uint8_t in[], - T& x0, T& x1, T& x2, T& x3, - T& x4, T& x5, T& x6, T& x7) - { - x0 = load_le<T>(in, 0); - x1 = load_le<T>(in, 1); - x2 = load_le<T>(in, 2); - x3 = load_le<T>(in, 3); - x4 = load_le<T>(in, 4); - x5 = load_le<T>(in, 5); - x6 = load_le<T>(in, 6); - x7 = load_le<T>(in, 7); - } - -/** -* Load a variable number of little-endian words -* @param out the output array of words -* @param in the input array of bytes -* @param count how many words are in in -*/ -template<typename T> -inline void load_le(T out[], - const uint8_t in[], - size_t count) - { - if(count > 0) - { -#if defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN) - std::memcpy(out, in, sizeof(T)*count); -#elif defined(BOTAN_TARGET_CPU_IS_BIG_ENDIAN) - std::memcpy(out, in, sizeof(T)*count); - const size_t blocks = count - (count % 4); - const size_t left = count - blocks; - - for(size_t i = 0; i != blocks; i += 4) - bswap_4(out + i); - - for(size_t i = 0; i != left; ++i) - out[blocks+i] = reverse_bytes(out[blocks+i]); -#else - for(size_t i = 0; i != count; ++i) - out[i] = load_le<T>(in, i); -#endif - } - } - -/** -* Load two big-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -*/ -template<typename T> -inline void load_be(const uint8_t in[], T& x0, T& x1) - { - x0 = load_be<T>(in, 0); - x1 = load_be<T>(in, 1); - } - -/** -* Load four big-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -* @param x2 where the third word will be written -* @param x3 where the fourth word will be written -*/ -template<typename T> -inline void load_be(const uint8_t in[], - T& x0, T& x1, T& x2, T& x3) - { - x0 = load_be<T>(in, 0); - x1 = load_be<T>(in, 1); - x2 = load_be<T>(in, 2); - x3 = load_be<T>(in, 3); - } - -/** -* Load eight big-endian words -* @param in a pointer to some bytes -* @param x0 where the first word will be written -* @param x1 where the second word will be written -* @param x2 where the third word will be written -* @param x3 where the fourth word will be written -* @param x4 where the fifth word will be written -* @param x5 where the sixth word will be written -* @param x6 where the seventh word will be written -* @param x7 where the eighth word will be written -*/ -template<typename T> -inline void load_be(const uint8_t in[], - T& x0, T& x1, T& x2, T& x3, - T& x4, T& x5, T& x6, T& x7) - { - x0 = load_be<T>(in, 0); - x1 = load_be<T>(in, 1); - x2 = load_be<T>(in, 2); - x3 = load_be<T>(in, 3); - x4 = load_be<T>(in, 4); - x5 = load_be<T>(in, 5); - x6 = load_be<T>(in, 6); - x7 = load_be<T>(in, 7); - } - -/** -* Load a variable number of big-endian words -* @param out the output array of words -* @param in the input array of bytes -* @param count how many words are in in -*/ -template<typename T> -inline void load_be(T out[], - const uint8_t in[], - size_t count) - { - if(count > 0) - { -#if defined(BOTAN_TARGET_CPU_IS_BIG_ENDIAN) - std::memcpy(out, in, sizeof(T)*count); - -#elif defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN) - std::memcpy(out, in, sizeof(T)*count); - const size_t blocks = count - (count % 4); - const size_t left = count - blocks; - - for(size_t i = 0; i != blocks; i += 4) - bswap_4(out + i); - - for(size_t i = 0; i != left; ++i) - out[blocks+i] = reverse_bytes(out[blocks+i]); -#else - for(size_t i = 0; i != count; ++i) - out[i] = load_be<T>(in, i); -#endif - } - } - -/** -* Store a big-endian uint16_t -* @param in the input uint16_t -* @param out the byte array to write to -*/ -inline void store_be(uint16_t in, uint8_t out[2]) - { -#if defined(BOTAN_ENDIAN_N2B) - uint16_t o = BOTAN_ENDIAN_N2B(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(0, in); - out[1] = get_byte(1, in); -#endif - } - -/** -* Store a little-endian uint16_t -* @param in the input uint16_t -* @param out the byte array to write to -*/ -inline void store_le(uint16_t in, uint8_t out[2]) - { -#if defined(BOTAN_ENDIAN_N2L) - uint16_t o = BOTAN_ENDIAN_N2L(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(1, in); - out[1] = get_byte(0, in); -#endif - } - -/** -* Store a big-endian uint32_t -* @param in the input uint32_t -* @param out the byte array to write to -*/ -inline void store_be(uint32_t in, uint8_t out[4]) - { -#if defined(BOTAN_ENDIAN_B2N) - uint32_t o = BOTAN_ENDIAN_B2N(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(0, in); - out[1] = get_byte(1, in); - out[2] = get_byte(2, in); - out[3] = get_byte(3, in); -#endif - } - -/** -* Store a little-endian uint32_t -* @param in the input uint32_t -* @param out the byte array to write to -*/ -inline void store_le(uint32_t in, uint8_t out[4]) - { -#if defined(BOTAN_ENDIAN_L2N) - uint32_t o = BOTAN_ENDIAN_L2N(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(3, in); - out[1] = get_byte(2, in); - out[2] = get_byte(1, in); - out[3] = get_byte(0, in); -#endif - } - -/** -* Store a big-endian uint64_t -* @param in the input uint64_t -* @param out the byte array to write to -*/ -inline void store_be(uint64_t in, uint8_t out[8]) - { -#if defined(BOTAN_ENDIAN_B2N) - uint64_t o = BOTAN_ENDIAN_B2N(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(0, in); - out[1] = get_byte(1, in); - out[2] = get_byte(2, in); - out[3] = get_byte(3, in); - out[4] = get_byte(4, in); - out[5] = get_byte(5, in); - out[6] = get_byte(6, in); - out[7] = get_byte(7, in); -#endif - } - -/** -* Store a little-endian uint64_t -* @param in the input uint64_t -* @param out the byte array to write to -*/ -inline void store_le(uint64_t in, uint8_t out[8]) - { -#if defined(BOTAN_ENDIAN_L2N) - uint64_t o = BOTAN_ENDIAN_L2N(in); - std::memcpy(out, &o, sizeof(o)); -#else - out[0] = get_byte(7, in); - out[1] = get_byte(6, in); - out[2] = get_byte(5, in); - out[3] = get_byte(4, in); - out[4] = get_byte(3, in); - out[5] = get_byte(2, in); - out[6] = get_byte(1, in); - out[7] = get_byte(0, in); -#endif - } - -/** -* Store two little-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -*/ -template<typename T> -inline void store_le(uint8_t out[], T x0, T x1) - { - store_le(x0, out + (0 * sizeof(T))); - store_le(x1, out + (1 * sizeof(T))); - } - -/** -* Store two big-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -*/ -template<typename T> -inline void store_be(uint8_t out[], T x0, T x1) - { - store_be(x0, out + (0 * sizeof(T))); - store_be(x1, out + (1 * sizeof(T))); - } - -/** -* Store four little-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -* @param x2 the third word -* @param x3 the fourth word -*/ -template<typename T> -inline void store_le(uint8_t out[], T x0, T x1, T x2, T x3) - { - store_le(x0, out + (0 * sizeof(T))); - store_le(x1, out + (1 * sizeof(T))); - store_le(x2, out + (2 * sizeof(T))); - store_le(x3, out + (3 * sizeof(T))); - } - -/** -* Store four big-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -* @param x2 the third word -* @param x3 the fourth word -*/ -template<typename T> -inline void store_be(uint8_t out[], T x0, T x1, T x2, T x3) - { - store_be(x0, out + (0 * sizeof(T))); - store_be(x1, out + (1 * sizeof(T))); - store_be(x2, out + (2 * sizeof(T))); - store_be(x3, out + (3 * sizeof(T))); - } - -/** -* Store eight little-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -* @param x2 the third word -* @param x3 the fourth word -* @param x4 the fifth word -* @param x5 the sixth word -* @param x6 the seventh word -* @param x7 the eighth word -*/ -template<typename T> -inline void store_le(uint8_t out[], T x0, T x1, T x2, T x3, - T x4, T x5, T x6, T x7) - { - store_le(x0, out + (0 * sizeof(T))); - store_le(x1, out + (1 * sizeof(T))); - store_le(x2, out + (2 * sizeof(T))); - store_le(x3, out + (3 * sizeof(T))); - store_le(x4, out + (4 * sizeof(T))); - store_le(x5, out + (5 * sizeof(T))); - store_le(x6, out + (6 * sizeof(T))); - store_le(x7, out + (7 * sizeof(T))); - } - -/** -* Store eight big-endian words -* @param out the output byte array -* @param x0 the first word -* @param x1 the second word -* @param x2 the third word -* @param x3 the fourth word -* @param x4 the fifth word -* @param x5 the sixth word -* @param x6 the seventh word -* @param x7 the eighth word -*/ -template<typename T> -inline void store_be(uint8_t out[], T x0, T x1, T x2, T x3, - T x4, T x5, T x6, T x7) - { - store_be(x0, out + (0 * sizeof(T))); - store_be(x1, out + (1 * sizeof(T))); - store_be(x2, out + (2 * sizeof(T))); - store_be(x3, out + (3 * sizeof(T))); - store_be(x4, out + (4 * sizeof(T))); - store_be(x5, out + (5 * sizeof(T))); - store_be(x6, out + (6 * sizeof(T))); - store_be(x7, out + (7 * sizeof(T))); - } - -template<typename T> -void copy_out_be(uint8_t out[], size_t out_bytes, const T in[]) - { - while(out_bytes >= sizeof(T)) - { - store_be(in[0], out); - out += sizeof(T); - out_bytes -= sizeof(T); - in += 1; - } - - for(size_t i = 0; i != out_bytes; ++i) - out[i] = get_byte(i%8, in[0]); - } - -template<typename T, typename Alloc> -void copy_out_vec_be(uint8_t out[], size_t out_bytes, const std::vector<T, Alloc>& in) - { - copy_out_be(out, out_bytes, in.data()); - } - -template<typename T> -void copy_out_le(uint8_t out[], size_t out_bytes, const T in[]) - { - while(out_bytes >= sizeof(T)) - { - store_le(in[0], out); - out += sizeof(T); - out_bytes -= sizeof(T); - in += 1; - } - - for(size_t i = 0; i != out_bytes; ++i) - out[i] = get_byte(sizeof(T) - 1 - (i % 8), in[0]); - } - -template<typename T, typename Alloc> -void copy_out_vec_le(uint8_t out[], size_t out_bytes, const std::vector<T, Alloc>& in) - { - copy_out_le(out, out_bytes, in.data()); - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/mem_ops.cpp b/src/libs/3rdparty/botan/src/lib/utils/mem_ops.cpp deleted file mode 100644 index b7ecd53260..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/mem_ops.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* -* (C) 2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/mem_ops.h> -#include <cstdlib> - -#if defined(BOTAN_HAS_LOCKING_ALLOCATOR) - #include <botan/locking_allocator.h> -#endif - -namespace Botan { - -BOTAN_MALLOC_FN void* allocate_memory(size_t elems, size_t elem_size) - { -#if defined(BOTAN_HAS_LOCKING_ALLOCATOR) - if(void* p = mlock_allocator::instance().allocate(elems, elem_size)) - return p; -#endif - - void* ptr = std::calloc(elems, elem_size); - if(!ptr) - throw std::bad_alloc(); - return ptr; - } - -void deallocate_memory(void* p, size_t elems, size_t elem_size) - { - if(p == nullptr) - return; - - secure_scrub_memory(p, elems * elem_size); - -#if defined(BOTAN_HAS_LOCKING_ALLOCATOR) - if(mlock_allocator::instance().deallocate(p, elems, elem_size)) - return; -#endif - - std::free(p); - } - -void initialize_allocator() - { -#if defined(BOTAN_HAS_LOCKING_ALLOCATOR) - mlock_allocator::instance(); -#endif - } - -bool constant_time_compare(const uint8_t x[], - const uint8_t y[], - size_t len) - { - volatile uint8_t difference = 0; - - for(size_t i = 0; i != len; ++i) - difference |= (x[i] ^ y[i]); - - return difference == 0; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/mem_ops.h b/src/libs/3rdparty/botan/src/lib/utils/mem_ops.h deleted file mode 100644 index c59c02d5a5..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/mem_ops.h +++ /dev/null @@ -1,272 +0,0 @@ -/* -* Memory Operations -* (C) 1999-2009,2012,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_MEMORY_OPS_H_ -#define BOTAN_MEMORY_OPS_H_ - -#include <botan/types.h> -#include <cstring> -#include <vector> - -namespace Botan { - -/** -* Allocate a memory buffer by some method. This should only be used for -* primitive types (uint8_t, uint32_t, etc). -* -* @param elems the number of elements -* @param elem_size the size of each element -* @return pointer to allocated and zeroed memory, or throw std::bad_alloc on failure -*/ -BOTAN_PUBLIC_API(2,3) BOTAN_MALLOC_FN void* allocate_memory(size_t elems, size_t elem_size); - -/** -* Free a pointer returned by allocate_memory -* @param p the pointer returned by allocate_memory -* @param elems the number of elements, as passed to allocate_memory -* @param elem_size the size of each element, as passed to allocate_memory -*/ -BOTAN_PUBLIC_API(2,3) void deallocate_memory(void* p, size_t elems, size_t elem_size); - -/** -* Ensure the allocator is initialized -*/ -void initialize_allocator(); - -class Allocator_Initializer - { - public: - Allocator_Initializer() { initialize_allocator(); } - }; - -/** -* Scrub memory contents in a way that a compiler should not elide, -* using some system specific technique. Note that this function might -* not zero the memory (for example, in some hypothetical -* implementation it might combine the memory contents with the output -* of a system PRNG), but if you can detect any difference in behavior -* at runtime then the clearing is side-effecting and you can just -* use `clear_mem`. -* -* Use this function to scrub memory just before deallocating it, or on -* a stack buffer before returning from the function. -* -* @param ptr a pointer to memory to scrub -* @param n the number of bytes pointed to by ptr -*/ -BOTAN_PUBLIC_API(2,0) void secure_scrub_memory(void* ptr, size_t n); - -/** -* Memory comparison, input insensitive -* @param x a pointer to an array -* @param y a pointer to another array -* @param len the number of Ts in x and y -* @return true iff x[i] == y[i] forall i in [0...n) -*/ -BOTAN_PUBLIC_API(2,3) bool constant_time_compare(const uint8_t x[], - const uint8_t y[], - size_t len); - -/** -* Zero out some bytes -* @param ptr a pointer to memory to zero -* @param bytes the number of bytes to zero in ptr -*/ -inline void clear_bytes(void* ptr, size_t bytes) - { - if(bytes > 0) - { - std::memset(ptr, 0, bytes); - } - } - -/** -* Zero memory before use. This simply calls memset and should not be -* used in cases where the compiler cannot see the call as a -* side-effecting operation (for example, if calling clear_mem before -* deallocating memory, the compiler would be allowed to omit the call -* to memset entirely under the as-if rule.) -* -* @param ptr a pointer to an array of Ts to zero -* @param n the number of Ts pointed to by ptr -*/ -template<typename T> inline void clear_mem(T* ptr, size_t n) - { - clear_bytes(ptr, sizeof(T)*n); - } - -/** -* Copy memory -* @param out the destination array -* @param in the source array -* @param n the number of elements of in/out -*/ -template<typename T> inline void copy_mem(T* out, const T* in, size_t n) - { - if(n > 0) - { - std::memmove(out, in, sizeof(T)*n); - } - } - -/** -* Set memory to a fixed value -* @param ptr a pointer to an array -* @param n the number of Ts pointed to by ptr -* @param val the value to set each byte to -*/ -template<typename T> -inline void set_mem(T* ptr, size_t n, uint8_t val) - { - if(n > 0) - { - std::memset(ptr, val, sizeof(T)*n); - } - } - -inline const uint8_t* cast_char_ptr_to_uint8(const char* s) - { - return reinterpret_cast<const uint8_t*>(s); - } - -inline const char* cast_uint8_ptr_to_char(const uint8_t* b) - { - return reinterpret_cast<const char*>(b); - } - -inline uint8_t* cast_char_ptr_to_uint8(char* s) - { - return reinterpret_cast<uint8_t*>(s); - } - -inline char* cast_uint8_ptr_to_char(uint8_t* b) - { - return reinterpret_cast<char*>(b); - } - -/** -* Memory comparison, input insensitive -* @param p1 a pointer to an array -* @param p2 a pointer to another array -* @param n the number of Ts in p1 and p2 -* @return true iff p1[i] == p2[i] forall i in [0...n) -*/ -template<typename T> inline bool same_mem(const T* p1, const T* p2, size_t n) - { - volatile T difference = 0; - - for(size_t i = 0; i != n; ++i) - difference |= (p1[i] ^ p2[i]); - - return difference == 0; - } - -/** -* XOR arrays. Postcondition out[i] = in[i] ^ out[i] forall i = 0...length -* @param out the input/output buffer -* @param in the read-only input buffer -* @param length the length of the buffers -*/ -inline void xor_buf(uint8_t out[], - const uint8_t in[], - size_t length) - { - while(length >= 16) - { - uint64_t x0, x1, y0, y1; - std::memcpy(&x0, in, 8); - std::memcpy(&x1, in + 8, 8); - std::memcpy(&y0, out, 8); - std::memcpy(&y1, out + 8, 8); - - y0 ^= x0; - y1 ^= x1; - std::memcpy(out, &y0, 8); - std::memcpy(out + 8, &y1, 8); - out += 16; in += 16; length -= 16; - } - - while(length > 0) - { - out[0] ^= in[0]; - out += 1; - in += 1; - length -= 1; - } - } - -/** -* XOR arrays. Postcondition out[i] = in[i] ^ in2[i] forall i = 0...length -* @param out the output buffer -* @param in the first input buffer -* @param in2 the second output buffer -* @param length the length of the three buffers -*/ -inline void xor_buf(uint8_t out[], - const uint8_t in[], - const uint8_t in2[], - size_t length) - { - while(length >= 16) - { - uint64_t x0, x1, y0, y1; - std::memcpy(&x0, in, 8); - std::memcpy(&x1, in + 8, 8); - std::memcpy(&y0, in2, 8); - std::memcpy(&y1, in2 + 8, 8); - - x0 ^= y0; - x1 ^= y1; - std::memcpy(out, &x0, 8); - std::memcpy(out + 8, &x1, 8); - out += 16; in += 16; in2 += 16; length -= 16; - } - - for(size_t i = 0; i != length; ++i) - out[i] = in[i] ^ in2[i]; - } - -template<typename Alloc, typename Alloc2> -void xor_buf(std::vector<uint8_t, Alloc>& out, - const std::vector<uint8_t, Alloc2>& in, - size_t n) - { - xor_buf(out.data(), in.data(), n); - } - -template<typename Alloc> -void xor_buf(std::vector<uint8_t, Alloc>& out, - const uint8_t* in, - size_t n) - { - xor_buf(out.data(), in, n); - } - -template<typename Alloc, typename Alloc2> -void xor_buf(std::vector<uint8_t, Alloc>& out, - const uint8_t* in, - const std::vector<uint8_t, Alloc2>& in2, - size_t n) - { - xor_buf(out.data(), in, in2.data(), n); - } - -template<typename Alloc, typename Alloc2> -std::vector<uint8_t, Alloc>& -operator^=(std::vector<uint8_t, Alloc>& out, - const std::vector<uint8_t, Alloc2>& in) - { - if(out.size() < in.size()) - out.resize(in.size()); - - xor_buf(out.data(), in.data(), in.size()); - return out; - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/mul128.h b/src/libs/3rdparty/botan/src/lib/utils/mul128.h deleted file mode 100644 index 1e28082548..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/mul128.h +++ /dev/null @@ -1,123 +0,0 @@ -/* -* 64x64->128 bit multiply operation -* (C) 2013,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_UTIL_MUL128_H_ -#define BOTAN_UTIL_MUL128_H_ - -#include <botan/types.h> - -namespace Botan { - -#if defined(__SIZEOF_INT128__) && defined(BOTAN_TARGET_CPU_HAS_NATIVE_64BIT) && !defined(__xlc__) - #define BOTAN_TARGET_HAS_NATIVE_UINT128 - - // Prefer TI mode over __int128 as GCC rejects the latter in pendantic mode - #if defined(__GNUG__) - typedef unsigned int uint128_t __attribute__((mode(TI))); - #else - typedef unsigned __int128 uint128_t; - #endif -#endif - -} - -#if defined(BOTAN_TARGET_HAS_NATIVE_UINT128) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) \ - do { \ - const uint128_t r = static_cast<uint128_t>(a) * b; \ - *hi = (r >> 64) & 0xFFFFFFFFFFFFFFFF; \ - *lo = (r ) & 0xFFFFFFFFFFFFFFFF; \ - } while(0) - -#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC) && defined(BOTAN_TARGET_CPU_HAS_NATIVE_64BIT) - -#include <intrin.h> -#pragma intrinsic(_umul128) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) \ - do { *lo = _umul128(a, b, hi); } while(0) - -#elif defined(BOTAN_USE_GCC_INLINE_ASM) - -#if defined(BOTAN_TARGET_ARCH_IS_X86_64) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) do { \ - asm("mulq %3" : "=d" (*hi), "=a" (*lo) : "a" (a), "rm" (b) : "cc"); \ - } while(0) - -#elif defined(BOTAN_TARGET_ARCH_IS_ALPHA) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) do { \ - asm("umulh %1,%2,%0" : "=r" (*hi) : "r" (a), "r" (b)); \ - *lo = a * b; \ -} while(0) - -#elif defined(BOTAN_TARGET_ARCH_IS_IA64) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) do { \ - asm("xmpy.hu %0=%1,%2" : "=f" (*hi) : "f" (a), "f" (b)); \ - *lo = a * b; \ -} while(0) - -#elif defined(BOTAN_TARGET_ARCH_IS_PPC64) - -#define BOTAN_FAST_64X64_MUL(a,b,lo,hi) do { \ - asm("mulhdu %0,%1,%2" : "=r" (*hi) : "r" (a), "r" (b) : "cc"); \ - *lo = a * b; \ -} while(0) - -#endif - -#endif - -namespace Botan { - -/** -* Perform a 64x64->128 bit multiplication -*/ -inline void mul64x64_128(uint64_t a, uint64_t b, uint64_t* lo, uint64_t* hi) - { -#if defined(BOTAN_FAST_64X64_MUL) - BOTAN_FAST_64X64_MUL(a, b, lo, hi); -#else - - /* - * Do a 64x64->128 multiply using four 32x32->64 multiplies plus - * some adds and shifts. Last resort for CPUs like UltraSPARC (with - * 64-bit registers/ALU, but no 64x64->128 multiply) or 32-bit CPUs. - */ - const size_t HWORD_BITS = 32; - const uint32_t HWORD_MASK = 0xFFFFFFFF; - - const uint32_t a_hi = (a >> HWORD_BITS); - const uint32_t a_lo = (a & HWORD_MASK); - const uint32_t b_hi = (b >> HWORD_BITS); - const uint32_t b_lo = (b & HWORD_MASK); - - uint64_t x0 = static_cast<uint64_t>(a_hi) * b_hi; - uint64_t x1 = static_cast<uint64_t>(a_lo) * b_hi; - uint64_t x2 = static_cast<uint64_t>(a_hi) * b_lo; - uint64_t x3 = static_cast<uint64_t>(a_lo) * b_lo; - - // this cannot overflow as (2^32-1)^2 + 2^32-1 < 2^64-1 - x2 += x3 >> HWORD_BITS; - - // this one can overflow - x2 += x1; - - // propagate the carry if any - x0 += static_cast<uint64_t>(static_cast<bool>(x2 < x1)) << HWORD_BITS; - - *hi = x0 + (x2 >> HWORD_BITS); - *lo = ((x2 & HWORD_MASK) << HWORD_BITS) + (x3 & HWORD_MASK); -#endif - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/mutex.h b/src/libs/3rdparty/botan/src/lib/utils/mutex.h deleted file mode 100644 index 34fed5c81e..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/mutex.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -* (C) 2016 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_UTIL_MUTEX_H_ -#define BOTAN_UTIL_MUTEX_H_ - -#include <botan/types.h> - -#if defined(BOTAN_TARGET_OS_HAS_THREADS) - -#include <mutex> - -namespace Botan { - -template<typename T> using lock_guard_type = std::lock_guard<T>; -typedef std::mutex mutex_type; - -} - -#else - -// No threads - -namespace Botan { - -template<typename Mutex> -class lock_guard final - { - public: - explicit lock_guard(Mutex& m) : m_mutex(m) - { m_mutex.lock(); } - - ~lock_guard() { m_mutex.unlock(); } - - lock_guard(const lock_guard& other) = delete; - lock_guard& operator=(const lock_guard& other) = delete; - private: - Mutex& m_mutex; - }; - -class noop_mutex final - { - public: - void lock() {} - void unlock() {} - }; - -typedef noop_mutex mutex_type; -template<typename T> using lock_guard_type = lock_guard<T>; - -} - -#endif - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/os_utils.cpp b/src/libs/3rdparty/botan/src/lib/utils/os_utils.cpp deleted file mode 100644 index 86e5443c30..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/os_utils.cpp +++ /dev/null @@ -1,461 +0,0 @@ -/* -* OS and machine specific utility functions -* (C) 2015,2016,2017 Jack Lloyd -* (C) 2016 Daniel Neus -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/internal/os_utils.h> -#include <botan/cpuid.h> -#include <botan/exceptn.h> -#include <botan/mem_ops.h> - -#include <chrono> -#include <cstdlib> - -#if defined(BOTAN_TARGET_OS_HAS_EXPLICIT_BZERO) - #include <string.h> -#endif - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - #include <sys/types.h> - #include <sys/resource.h> - #include <sys/mman.h> - #include <signal.h> - #include <setjmp.h> - #include <unistd.h> - #include <errno.h> -#endif - -#if defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) - #include <sys/auxv.h> -#endif - -#if defined(BOTAN_TARGET_OS_HAS_WIN32) - #define NOMINMAX 1 - #include <windows.h> -#endif - -namespace Botan { - -// Not defined in OS namespace for historical reasons -void secure_scrub_memory(void* ptr, size_t n) - { -#if defined(BOTAN_TARGET_OS_HAS_RTLSECUREZEROMEMORY) - ::RtlSecureZeroMemory(ptr, n); - -#elif defined(BOTAN_TARGET_OS_HAS_EXPLICIT_BZERO) - ::explicit_bzero(ptr, n); - -#elif defined(BOTAN_USE_VOLATILE_MEMSET_FOR_ZERO) && (BOTAN_USE_VOLATILE_MEMSET_FOR_ZERO == 1) - /* - Call memset through a static volatile pointer, which the compiler - should not elide. This construct should be safe in conforming - compilers, but who knows. I did confirm that on x86-64 GCC 6.1 and - Clang 3.8 both create code that saves the memset address in the - data segment and uncondtionally loads and jumps to that address. - */ - static void* (*const volatile memset_ptr)(void*, int, size_t) = std::memset; - (memset_ptr)(ptr, 0, n); -#else - - volatile uint8_t* p = reinterpret_cast<volatile uint8_t*>(ptr); - - for(size_t i = 0; i != n; ++i) - p[i] = 0; -#endif - } - -uint32_t OS::get_process_id() - { -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - return ::getpid(); -#elif defined(BOTAN_TARGET_OS_HAS_WIN32) - return ::GetCurrentProcessId(); -#elif defined(BOTAN_TARGET_OS_IS_INCLUDEOS) || defined(BOTAN_TARGET_OS_IS_LLVM) - return 0; // truly no meaningful value -#else - #error "Missing get_process_id" -#endif - } - -bool OS::running_in_privileged_state() - { -#if defined(BOTAN_TARGET_OS_HAS_GETAUXVAL) && defined(AT_SECURE) - return ::getauxval(AT_SECURE) != 0; -#elif defined(BOTAN_TARGET_OS_HAS_POSIX1) - return (::getuid() != ::geteuid()) || (::getgid() != ::getegid()); -#else - return false; -#endif - } - -uint64_t OS::get_processor_timestamp() - { - uint64_t rtc = 0; - -#if defined(BOTAN_TARGET_OS_HAS_WIN32) - LARGE_INTEGER tv; - ::QueryPerformanceCounter(&tv); - rtc = tv.QuadPart; - -#elif defined(BOTAN_USE_GCC_INLINE_ASM) - -#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) - - if(CPUID::has_rdtsc()) - { - uint32_t rtc_low = 0, rtc_high = 0; - asm volatile("rdtsc" : "=d" (rtc_high), "=a" (rtc_low)); - rtc = (static_cast<uint64_t>(rtc_high) << 32) | rtc_low; - } - -#elif defined(BOTAN_TARGET_ARCH_IS_PPC64) - - for(;;) - { - uint32_t rtc_low = 0, rtc_high = 0, rtc_high2 = 0; - asm volatile("mftbu %0" : "=r" (rtc_high)); - asm volatile("mftb %0" : "=r" (rtc_low)); - asm volatile("mftbu %0" : "=r" (rtc_high2)); - - if(rtc_high == rtc_high2) - { - rtc = (static_cast<uint64_t>(rtc_high) << 32) | rtc_low; - break; - } - } - -#elif defined(BOTAN_TARGET_ARCH_IS_ALPHA) - asm volatile("rpcc %0" : "=r" (rtc)); - - // OpenBSD does not trap access to the %tick register -#elif defined(BOTAN_TARGET_ARCH_IS_SPARC64) && !defined(BOTAN_TARGET_OS_IS_OPENBSD) - asm volatile("rd %%tick, %0" : "=r" (rtc)); - -#elif defined(BOTAN_TARGET_ARCH_IS_IA64) - asm volatile("mov %0=ar.itc" : "=r" (rtc)); - -#elif defined(BOTAN_TARGET_ARCH_IS_S390X) - asm volatile("stck 0(%0)" : : "a" (&rtc) : "memory", "cc"); - -#elif defined(BOTAN_TARGET_ARCH_IS_HPPA) - asm volatile("mfctl 16,%0" : "=r" (rtc)); // 64-bit only? - -#else - //#warning "OS::get_processor_timestamp not implemented" -#endif - -#endif - - return rtc; - } - -uint64_t OS::get_high_resolution_clock() - { - if(uint64_t cpu_clock = OS::get_processor_timestamp()) - return cpu_clock; - - /* - If we got here either we either don't have an asm instruction - above, or (for x86) RDTSC is not available at runtime. Try some - clock_gettimes and return the first one that works, or otherwise - fall back to std::chrono. - */ - -#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME) - - // The ordering here is somewhat arbitrary... - const clockid_t clock_types[] = { -#if defined(CLOCK_MONOTONIC_HR) - CLOCK_MONOTONIC_HR, -#endif -#if defined(CLOCK_MONOTONIC_RAW) - CLOCK_MONOTONIC_RAW, -#endif -#if defined(CLOCK_MONOTONIC) - CLOCK_MONOTONIC, -#endif -#if defined(CLOCK_PROCESS_CPUTIME_ID) - CLOCK_PROCESS_CPUTIME_ID, -#endif -#if defined(CLOCK_THREAD_CPUTIME_ID) - CLOCK_THREAD_CPUTIME_ID, -#endif - }; - - for(clockid_t clock : clock_types) - { - struct timespec ts; - if(::clock_gettime(clock, &ts) == 0) - { - return (static_cast<uint64_t>(ts.tv_sec) * 1000000000) + static_cast<uint64_t>(ts.tv_nsec); - } - } -#endif - - // Plain C++11 fallback - auto now = std::chrono::high_resolution_clock::now().time_since_epoch(); - return std::chrono::duration_cast<std::chrono::nanoseconds>(now).count(); - } - -uint64_t OS::get_system_timestamp_ns() - { -#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME) - struct timespec ts; - if(::clock_gettime(CLOCK_REALTIME, &ts) == 0) - { - return (static_cast<uint64_t>(ts.tv_sec) * 1000000000) + static_cast<uint64_t>(ts.tv_nsec); - } -#endif - - auto now = std::chrono::system_clock::now().time_since_epoch(); - return std::chrono::duration_cast<std::chrono::nanoseconds>(now).count(); - } - -size_t OS::system_page_size() - { - const size_t default_page_size = 4096; - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - long p = ::sysconf(_SC_PAGESIZE); - if(p > 1) - return static_cast<size_t>(p); - else - return default_page_size; -#elif defined(BOTAN_TARGET_OS_HAS_VIRTUAL_LOCK) - SYSTEM_INFO sys_info; - ::GetSystemInfo(&sys_info); - return sys_info.dwPageSize; -#else - return default_page_size; -#endif - } - -size_t OS::get_memory_locking_limit() - { -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) && defined(RLIMIT_MEMLOCK) - /* - * If RLIMIT_MEMLOCK is not defined, likely the OS does not support - * unprivileged mlock calls. - * - * Linux defaults to only 64 KiB of mlockable memory per process - * (too small) but BSDs offer a small fraction of total RAM (more - * than we need). Bound the total mlock size to 512 KiB which is - * enough to run the entire test suite without spilling to non-mlock - * memory (and thus presumably also enough for many useful - * programs), but small enough that we should not cause problems - * even if many processes are mlocking on the same machine. - */ - size_t mlock_requested = BOTAN_MLOCK_ALLOCATOR_MAX_LOCKED_KB; - - /* - * Allow override via env variable - */ - if(OS::running_in_privileged_state() == false) - { - if(const char* env = std::getenv("BOTAN_MLOCK_POOL_SIZE")) - { - try - { - const size_t user_req = std::stoul(env, nullptr); - mlock_requested = std::min(user_req, mlock_requested); - } - catch(std::exception&) { /* ignore it */ } - } - } - - if(mlock_requested > 0) - { - struct ::rlimit limits; - - ::getrlimit(RLIMIT_MEMLOCK, &limits); - - if(limits.rlim_cur < limits.rlim_max) - { - limits.rlim_cur = limits.rlim_max; - ::setrlimit(RLIMIT_MEMLOCK, &limits); - ::getrlimit(RLIMIT_MEMLOCK, &limits); - } - - return std::min<size_t>(limits.rlim_cur, mlock_requested * 1024); - } - -#elif defined(BOTAN_TARGET_OS_HAS_VIRTUAL_LOCK) - SIZE_T working_min = 0, working_max = 0; - if(!::GetProcessWorkingSetSize(::GetCurrentProcess(), &working_min, &working_max)) - { - return 0; - } - - // According to Microsoft MSDN: - // The maximum number of pages that a process can lock is equal to the number of pages in its minimum working set minus a small overhead - // In the book "Windows Internals Part 2": the maximum lockable pages are minimum working set size - 8 pages - // But the information in the book seems to be inaccurate/outdated - // I've tested this on Windows 8.1 x64, Windows 10 x64 and Windows 7 x86 - // On all three OS the value is 11 instead of 8 - size_t overhead = OS::system_page_size() * 11ULL; - if(working_min > overhead) - { - size_t lockable_bytes = working_min - overhead; - if(lockable_bytes < (BOTAN_MLOCK_ALLOCATOR_MAX_LOCKED_KB * 1024ULL)) - { - return lockable_bytes; - } - else - { - return BOTAN_MLOCK_ALLOCATOR_MAX_LOCKED_KB * 1024ULL; - } - } -#endif - - // Not supported on this platform - return 0; - } - -void* OS::allocate_locked_pages(size_t length) - { -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) && defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - -#if !defined(MAP_NOCORE) - #define MAP_NOCORE 0 -#endif - -#if !defined(MAP_ANONYMOUS) - #define MAP_ANONYMOUS MAP_ANON -#endif - - void* ptr = ::mmap(nullptr, - length, - PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_SHARED | MAP_NOCORE, - /*fd*/-1, - /*offset*/0); - - if(ptr == MAP_FAILED) - { - return nullptr; - } - -#if defined(MADV_DONTDUMP) - ::madvise(ptr, length, MADV_DONTDUMP); -#endif - - if(::mlock(ptr, length) != 0) - { - ::munmap(ptr, length); - return nullptr; // failed to lock - } - - ::memset(ptr, 0, length); - - return ptr; -#elif defined(BOTAN_TARGET_OS_HAS_VIRTUAL_LOCK) - LPVOID ptr = ::VirtualAlloc(nullptr, length, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - if(!ptr) - { - return nullptr; - } - - if(::VirtualLock(ptr, length) == 0) - { - ::VirtualFree(ptr, 0, MEM_RELEASE); - return nullptr; // failed to lock - } - - return ptr; -#else - BOTAN_UNUSED(length); - return nullptr; /* not implemented */ -#endif - } - -void OS::free_locked_pages(void* ptr, size_t length) - { - if(ptr == nullptr || length == 0) - return; - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) && defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - secure_scrub_memory(ptr, length); - ::munlock(ptr, length); - ::munmap(ptr, length); - -#elif defined(BOTAN_TARGET_OS_HAS_VIRTUAL_LOCK) - secure_scrub_memory(ptr, length); - ::VirtualUnlock(ptr, length); - ::VirtualFree(ptr, 0, MEM_RELEASE); - -#else - // Invalid argument because no way this pointer was allocated by us - throw Invalid_Argument("Invalid ptr to free_locked_pages"); -#endif - } - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) -namespace { - -static ::sigjmp_buf g_sigill_jmp_buf; - -void botan_sigill_handler(int) - { - siglongjmp(g_sigill_jmp_buf, /*non-zero return value*/1); - } - -} -#endif - -int OS::run_cpu_instruction_probe(std::function<int ()> probe_fn) - { - volatile int probe_result = -3; - -#if defined(BOTAN_TARGET_OS_HAS_POSIX1) - struct sigaction old_sigaction; - struct sigaction sigaction; - - sigaction.sa_handler = botan_sigill_handler; - sigemptyset(&sigaction.sa_mask); - sigaction.sa_flags = 0; - - int rc = ::sigaction(SIGILL, &sigaction, &old_sigaction); - - if(rc != 0) - throw Exception("run_cpu_instruction_probe sigaction failed"); - - rc = sigsetjmp(g_sigill_jmp_buf, /*save sigs*/1); - - if(rc == 0) - { - // first call to sigsetjmp - probe_result = probe_fn(); - } - else if(rc == 1) - { - // non-local return from siglongjmp in signal handler: return error - probe_result = -1; - } - - // Restore old SIGILL handler, if any - rc = ::sigaction(SIGILL, &old_sigaction, nullptr); - if(rc != 0) - throw Exception("run_cpu_instruction_probe sigaction restore failed"); - -#elif defined(BOTAN_TARGET_OS_IS_WINDOWS) && defined(BOTAN_TARGET_COMPILER_IS_MSVC) - - // Windows SEH - __try - { - probe_result = probe_fn(); - } - __except(::GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ? - EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) - { - probe_result = -1; - } - -#endif - - return probe_result; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/os_utils.h b/src/libs/3rdparty/botan/src/lib/utils/os_utils.h deleted file mode 100644 index 778ace4e9d..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/os_utils.h +++ /dev/null @@ -1,124 +0,0 @@ -/* -* OS specific utility functions -* (C) 2015,2016,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_OS_UTILS_H_ -#define BOTAN_OS_UTILS_H_ - -#include <botan/types.h> -#include <functional> - -namespace Botan { - -namespace OS { - -/* -* This header is internal (not installed) and these functions are not -* intended to be called by applications. However they are given public -* visibility (using BOTAN_TEST_API macro) for the tests. This also probably -* allows them to be overridden by the application on ELF systems, but -* this hasn't been tested. -*/ - -/** -* @return process ID assigned by the operating system. -* On Unix and Windows systems, this always returns a result -* On IncludeOS it returns 0 since there is no process ID to speak of -* in a unikernel. -*/ -uint32_t BOTAN_TEST_API get_process_id(); - -/** -* Test if we are currently running with elevated permissions -* eg setuid, setgid, or with POSIX caps set. -*/ -bool running_in_privileged_state(); - -/** -* @return CPU processor clock, if available -* -* 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. -*/ -uint64_t BOTAN_TEST_API get_processor_timestamp(); - -/* -* @return best resolution timestamp available -* -* The epoch and update rate of this clock is arbitrary and depending -* on the hardware it may not tick at a constant rate. -* -* Uses hardware cycle counter, if available. -* On POSIX platforms clock_gettime is used with a monotonic timer -* As a final fallback std::chrono::high_resolution_clock is used. -*/ -uint64_t BOTAN_TEST_API get_high_resolution_clock(); - -/** -* @return system clock (reflecting wall clock) with best resolution -* available, normalized to nanoseconds resolution. -*/ -uint64_t BOTAN_TEST_API get_system_timestamp_ns(); - -/** -* @return maximum amount of memory (in bytes) Botan could/should -* hyptothetically allocate for the memory poool. Reads environment -* variable "BOTAN_MLOCK_POOL_SIZE", set to "0" to disable pool. -*/ -size_t get_memory_locking_limit(); - -/** -* Return the size of a memory page, if that can be derived on the -* current system. Otherwise returns some default value (eg 4096) -*/ -size_t system_page_size(); - -/** -* Request so many bytes of page-aligned RAM locked into memory using -* mlock, VirtualLock, or similar. Returns null on failure. The memory -* returned is zeroed. Free it with free_locked_pages. -* @param length requested allocation in bytes -*/ -void* allocate_locked_pages(size_t length); - -/** -* Free memory allocated by allocate_locked_pages -* @param ptr a pointer returned by allocate_locked_pages -* @param length length passed to allocate_locked_pages -*/ -void free_locked_pages(void* ptr, size_t length); - -/** -* 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. -* -* @warning on Unix systems uses signal handling in a way that is not -* thread safe. It should only be called in a single-threaded context -* (ie, at static init time). -* -* If probe_fn throws an exception the result is undefined. -* -* Return codes: -* -1 illegal instruction detected -*/ -int BOTAN_TEST_API run_cpu_instruction_probe(std::function<int ()> probe_fn); - -} - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/parsing.cpp b/src/libs/3rdparty/botan/src/lib/utils/parsing.cpp deleted file mode 100644 index 8e62c6e03f..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/parsing.cpp +++ /dev/null @@ -1,478 +0,0 @@ -/* -* Various string utils and parsing functions -* (C) 1999-2007,2013,2014,2015,2018 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* (C) 2017 René Korthaus, Rohde & Schwarz Cybersecurity -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/parsing.h> -#include <botan/exceptn.h> -#include <botan/charset.h> -#include <botan/loadstor.h> -#include <algorithm> -#include <cctype> -#include <limits> -#include <set> - -namespace Botan { - -uint16_t to_uint16(const std::string& str) - { - const uint32_t x = to_u32bit(str); - - if(x >> 16) - throw Invalid_Argument("Integer value exceeds 16 bit range"); - - return static_cast<uint16_t>(x); - } - -uint32_t to_u32bit(const std::string& str) - { - // std::stoul is not strict enough. Ensure that str is digit only [0-9]* - for(const char chr : str) - { - if(chr < '0' || chr > '9') - { - std::string chrAsString(1, chr); - throw Invalid_Argument("String contains non-digit char: " + chrAsString); - } - } - - const unsigned long int x = std::stoul(str); - - if(sizeof(unsigned long int) > 4) - { - // x might be uint64 - if (x > std::numeric_limits<uint32_t>::max()) - { - throw Invalid_Argument("Integer value of " + str + " exceeds 32 bit range"); - } - } - - return static_cast<uint32_t>(x); - } - -/* -* Convert a string into a time duration -*/ -uint32_t timespec_to_u32bit(const std::string& timespec) - { - if(timespec.empty()) - return 0; - - const char suffix = timespec[timespec.size()-1]; - std::string value = timespec.substr(0, timespec.size()-1); - - uint32_t scale = 1; - - if(Charset::is_digit(suffix)) - value += suffix; - else if(suffix == 's') - scale = 1; - else if(suffix == 'm') - scale = 60; - else if(suffix == 'h') - scale = 60 * 60; - else if(suffix == 'd') - scale = 24 * 60 * 60; - else if(suffix == 'y') - scale = 365 * 24 * 60 * 60; - else - throw Decoding_Error("timespec_to_u32bit: Bad input " + timespec); - - return scale * to_u32bit(value); - } - -/* -* Parse a SCAN-style algorithm name -*/ -std::vector<std::string> parse_algorithm_name(const std::string& namex) - { - if(namex.find('(') == std::string::npos && - namex.find(')') == std::string::npos) - return std::vector<std::string>(1, namex); - - std::string name = namex, substring; - std::vector<std::string> elems; - size_t level = 0; - - elems.push_back(name.substr(0, name.find('('))); - name = name.substr(name.find('(')); - - for(auto i = name.begin(); i != name.end(); ++i) - { - char c = *i; - - if(c == '(') - ++level; - if(c == ')') - { - if(level == 1 && i == name.end() - 1) - { - if(elems.size() == 1) - elems.push_back(substring.substr(1)); - else - elems.push_back(substring); - return elems; - } - - if(level == 0 || (level == 1 && i != name.end() - 1)) - throw Invalid_Algorithm_Name(namex); - --level; - } - - if(c == ',' && level == 1) - { - if(elems.size() == 1) - elems.push_back(substring.substr(1)); - else - elems.push_back(substring); - substring.clear(); - } - else - substring += c; - } - - if(!substring.empty()) - throw Invalid_Algorithm_Name(namex); - - return elems; - } - -std::vector<std::string> split_on(const std::string& str, char delim) - { - return split_on_pred(str, [delim](char c) { return c == delim; }); - } - -std::vector<std::string> split_on_pred(const std::string& str, - std::function<bool (char)> pred) - { - std::vector<std::string> elems; - if(str.empty()) return elems; - - std::string substr; - for(auto i = str.begin(); i != str.end(); ++i) - { - if(pred(*i)) - { - if(!substr.empty()) - elems.push_back(substr); - substr.clear(); - } - else - substr += *i; - } - - if(substr.empty()) - throw Invalid_Argument("Unable to split string: " + str); - elems.push_back(substr); - - return elems; - } - -/* -* Join a string -*/ -std::string string_join(const std::vector<std::string>& strs, char delim) - { - std::string out = ""; - - for(size_t i = 0; i != strs.size(); ++i) - { - if(i != 0) - out += delim; - out += strs[i]; - } - - return out; - } - -/* -* Parse an ASN.1 OID string -*/ -std::vector<uint32_t> parse_asn1_oid(const std::string& oid) - { - std::string substring; - std::vector<uint32_t> oid_elems; - - for(auto i = oid.begin(); i != oid.end(); ++i) - { - char c = *i; - - if(c == '.') - { - if(substring.empty()) - throw Invalid_OID(oid); - oid_elems.push_back(to_u32bit(substring)); - substring.clear(); - } - else - substring += c; - } - - if(substring.empty()) - throw Invalid_OID(oid); - oid_elems.push_back(to_u32bit(substring)); - - if(oid_elems.size() < 2) - throw Invalid_OID(oid); - - return oid_elems; - } - -/* -* X.500 String Comparison -*/ -bool x500_name_cmp(const std::string& name1, const std::string& name2) - { - auto p1 = name1.begin(); - auto p2 = name2.begin(); - - while((p1 != name1.end()) && Charset::is_space(*p1)) ++p1; - while((p2 != name2.end()) && Charset::is_space(*p2)) ++p2; - - while(p1 != name1.end() && p2 != name2.end()) - { - if(Charset::is_space(*p1)) - { - if(!Charset::is_space(*p2)) - return false; - - while((p1 != name1.end()) && Charset::is_space(*p1)) ++p1; - while((p2 != name2.end()) && Charset::is_space(*p2)) ++p2; - - if(p1 == name1.end() && p2 == name2.end()) - return true; - if(p1 == name1.end() || p2 == name2.end()) - return false; - } - - if(!Charset::caseless_cmp(*p1, *p2)) - return false; - ++p1; - ++p2; - } - - while((p1 != name1.end()) && Charset::is_space(*p1)) ++p1; - while((p2 != name2.end()) && Charset::is_space(*p2)) ++p2; - - if((p1 != name1.end()) || (p2 != name2.end())) - return false; - return true; - } - -/* -* Convert a decimal-dotted string to binary IP -*/ -uint32_t string_to_ipv4(const std::string& str) - { - std::vector<std::string> parts = split_on(str, '.'); - - if(parts.size() != 4) - throw Decoding_Error("Invalid IP string " + str); - - uint32_t ip = 0; - - for(auto part = parts.begin(); part != parts.end(); ++part) - { - uint32_t octet = to_u32bit(*part); - - if(octet > 255) - throw Decoding_Error("Invalid IP string " + str); - - ip = (ip << 8) | (octet & 0xFF); - } - - return ip; - } - -/* -* Convert an IP address to decimal-dotted string -*/ -std::string ipv4_to_string(uint32_t ip) - { - std::string str; - - for(size_t i = 0; i != sizeof(ip); ++i) - { - if(i) - str += "."; - str += std::to_string(get_byte(i, ip)); - } - - return str; - } - -std::string erase_chars(const std::string& str, const std::set<char>& chars) - { - std::string out; - - for(auto c: str) - if(chars.count(c) == 0) - out += c; - - return out; - } - -std::string replace_chars(const std::string& str, - const std::set<char>& chars, - char to_char) - { - std::string out = str; - - for(size_t i = 0; i != out.size(); ++i) - if(chars.count(out[i])) - out[i] = to_char; - - return out; - } - -std::string replace_char(const std::string& str, char from_char, char to_char) - { - std::string out = str; - - for(size_t i = 0; i != out.size(); ++i) - if(out[i] == from_char) - out[i] = to_char; - - return out; - } - -namespace { - -std::string tolower_string(const std::string& in) - { - std::string s = in; - for(size_t i = 0; i != s.size(); ++i) - { - const int cu = static_cast<unsigned char>(s[i]); - if(std::isalpha(cu)) - s[i] = static_cast<char>(std::tolower(cu)); - } - return s; - } - -} - -bool host_wildcard_match(const std::string& issued_, const std::string& host_) - { - const std::string issued = tolower_string(issued_); - const std::string host = tolower_string(host_); - - if(host.empty() || issued.empty()) - return false; - - /* - If there are embedded nulls in your issued name - Well I feel bad for you son - */ - if(std::count(issued.begin(), issued.end(), char(0)) > 0) - return false; - - // If more than one wildcard, then issued name is invalid - const size_t stars = std::count(issued.begin(), issued.end(), '*'); - if(stars > 1) - return false; - - // '*' is not a valid character in DNS names so should not appear on the host side - if(std::count(host.begin(), host.end(), '*') != 0) - return false; - - // Similarly a DNS name can't end in . - if(host[host.size() - 1] == '.') - return false; - - // And a host can't have an empty name component, so reject that - if(host.find("..") != std::string::npos) - return false; - - // Exact match: accept - if(issued == host) - { - return true; - } - - /* - Otherwise it might be a wildcard - - If the issued size is strictly longer than the hostname size it - couldn't possibly be a match, even if the issued value is a - wildcard. The only exception is when the wildcard ends up empty - (eg www.example.com matches www*.example.com) - */ - if(issued.size() > host.size() + 1) - { - return false; - } - - // If no * at all then not a wildcard, and so not a match - if(stars != 1) - { - return false; - } - - /* - Now walk through the issued string, making sure every character - matches. When we come to the (singular) '*', jump forward in the - hostname by the corresponding amount. We know exactly how much - space the wildcard takes because it must be exactly `len(host) - - len(issued) + 1 chars`. - - We also verify that the '*' comes in the leftmost component, and - doesn't skip over any '.' in the hostname. - */ - size_t dots_seen = 0; - size_t host_idx = 0; - - for(size_t i = 0; i != issued.size(); ++i) - { - dots_seen += (issued[i] == '.'); - - if(issued[i] == '*') - { - // Fail: wildcard can only come in leftmost component - if(dots_seen > 0) - { - return false; - } - - /* - Since there is only one * we know the tail of the issued and - hostname must be an exact match. In this case advance host_idx - to match. - */ - const size_t advance = (host.size() - issued.size() + 1); - - if(host_idx + advance > host.size()) // shouldn't happen - return false; - - // Can't be any intervening .s that we would have skipped - if(std::count(host.begin() + host_idx, - host.begin() + host_idx + advance, '.') != 0) - return false; - - host_idx += advance; - } - else - { - if(issued[i] != host[host_idx]) - { - return false; - } - - host_idx += 1; - } - } - - // Wildcard issued name must have at least 3 components - if(dots_seen < 2) - { - return false; - } - - return true; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/parsing.h b/src/libs/3rdparty/botan/src/lib/utils/parsing.h deleted file mode 100644 index 12cb3fa341..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/parsing.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -* Various string utils and parsing functions -* (C) 1999-2007,2013 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_PARSING_UTILS_H_ -#define BOTAN_PARSING_UTILS_H_ - -#include <botan/types.h> -#include <string> -#include <vector> -#include <set> - -#include <istream> -#include <functional> -#include <map> - -namespace Botan { - -/** -* Parse a SCAN-style algorithm name -* @param scan_name the name -* @return the name components -*/ -BOTAN_PUBLIC_API(2,0) std::vector<std::string> -parse_algorithm_name(const std::string& scan_name); - -/** -* Split a string -* @param str the input string -* @param delim the delimitor -* @return string split by delim -*/ -BOTAN_PUBLIC_API(2,0) std::vector<std::string> split_on( - const std::string& str, char delim); - -/** -* Split a string on a character predicate -* @param str the input string -* @param pred the predicate -* -* This function will likely be removed in a future release -*/ -BOTAN_PUBLIC_API(2,0) std::vector<std::string> -split_on_pred(const std::string& str, - std::function<bool (char)> pred); - -/** -* Erase characters from a string -*/ -BOTAN_PUBLIC_API(2,0) -BOTAN_DEPRECATED("Unused") -std::string erase_chars(const std::string& str, const std::set<char>& chars); - -/** -* Replace a character in a string -* @param str the input string -* @param from_char the character to replace -* @param to_char the character to replace it with -* @return str with all instances of from_char replaced by to_char -*/ -BOTAN_PUBLIC_API(2,0) -BOTAN_DEPRECATED("Unused") -std::string replace_char(const std::string& str, - char from_char, - char to_char); - -/** -* Replace a character in a string -* @param str the input string -* @param from_chars the characters to replace -* @param to_char the character to replace it with -* @return str with all instances of from_chars replaced by to_char -*/ -BOTAN_PUBLIC_API(2,0) -BOTAN_DEPRECATED("Unused") -std::string replace_chars(const std::string& str, - const std::set<char>& from_chars, - char to_char); - -/** -* Join a string -* @param strs strings to join -* @param delim the delimitor -* @return string joined by delim -*/ -BOTAN_PUBLIC_API(2,0) -std::string string_join(const std::vector<std::string>& strs, - char delim); - -/** -* Parse an ASN.1 OID -* @param oid the OID in string form -* @return OID components -*/ -BOTAN_PUBLIC_API(2,0) std::vector<uint32_t> parse_asn1_oid(const std::string& oid); - -/** -* Compare two names using the X.509 comparison algorithm -* @param name1 the first name -* @param name2 the second name -* @return true if name1 is the same as name2 by the X.509 comparison rules -*/ -BOTAN_PUBLIC_API(2,0) -bool x500_name_cmp(const std::string& name1, - const std::string& name2); - -/** -* Convert a string to a number -* @param str the string to convert -* @return number value of the string -*/ -BOTAN_PUBLIC_API(2,0) uint32_t to_u32bit(const std::string& str); - -/** -* Convert a string to a number -* @param str the string to convert -* @return number value of the string -*/ -BOTAN_PUBLIC_API(2,3) uint16_t to_uint16(const std::string& str); - -/** -* Convert a time specification to a number -* @param timespec the time specification -* @return number of seconds represented by timespec -*/ -BOTAN_PUBLIC_API(2,0) uint32_t BOTAN_DEPRECATED("Not used anymore") -timespec_to_u32bit(const std::string& timespec); - -/** -* Convert a string representation of an IPv4 address to a number -* @param ip_str the string representation -* @return integer IPv4 address -*/ -BOTAN_PUBLIC_API(2,0) uint32_t string_to_ipv4(const std::string& ip_str); - -/** -* Convert an IPv4 address to a string -* @param ip_addr the IPv4 address to convert -* @return string representation of the IPv4 address -*/ -BOTAN_PUBLIC_API(2,0) std::string ipv4_to_string(uint32_t ip_addr); - -std::map<std::string, std::string> BOTAN_PUBLIC_API(2,0) read_cfg(std::istream& is); - -/** -* Accepts key value pairs deliminated by commas: -* -* "" (returns empty map) -* "K=V" (returns map {'K': 'V'}) -* "K1=V1,K2=V2" -* "K1=V1,K2=V2,K3=V3" -* "K1=V1,K2=V2,K3=a_value\,with\,commas_and_\=equals" -* -* Values may be empty, keys must be non-empty and unique. Duplicate -* keys cause an exception. -* -* Within both key and value, comma and equals can be escaped with -* backslash. Backslash can also be escaped. -*/ -std::map<std::string, std::string> BOTAN_PUBLIC_API(2,8) read_kv(const std::string& kv); - -std::string BOTAN_PUBLIC_API(2,0) clean_ws(const std::string& s); - -/** -* Check if the given hostname is a match for the specified wildcard -*/ -bool BOTAN_PUBLIC_API(2,0) host_wildcard_match(const std::string& wildcard, - const std::string& host); - - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/prefetch.h b/src/libs/3rdparty/botan/src/lib/utils/prefetch.h deleted file mode 100644 index 92c41e5738..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/prefetch.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* Prefetching Operations -* (C) 2009 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_PREFETCH_H_ -#define BOTAN_PREFETCH_H_ - -#include <botan/cpuid.h> - -namespace Botan { - -template<typename T> -inline void prefetch_readonly(const T* addr, size_t length) - { -#if defined(__GNUG__) - const size_t Ts_per_cache_line = CPUID::cache_line_size() / sizeof(T); - - for(size_t i = 0; i <= length; i += Ts_per_cache_line) - __builtin_prefetch(addr + i, 0); -#endif - } - -template<typename T> -inline void prefetch_readwrite(const T* addr, size_t length) - { -#if defined(__GNUG__) - const size_t Ts_per_cache_line = CPUID::cache_line_size() / sizeof(T); - - for(size_t i = 0; i <= length; i += Ts_per_cache_line) - __builtin_prefetch(addr + i, 1); -#endif - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/read_cfg.cpp b/src/libs/3rdparty/botan/src/lib/utils/read_cfg.cpp deleted file mode 100644 index bf68c04792..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/read_cfg.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* -* Simple config/test file reader -* (C) 2013,2014,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/parsing.h> -#include <botan/exceptn.h> - -namespace Botan { - -std::string clean_ws(const std::string& s) - { - const char* ws = " \t\n"; - auto start = s.find_first_not_of(ws); - auto end = s.find_last_not_of(ws); - - if(start == std::string::npos) - return ""; - - if(end == std::string::npos) - return s.substr(start, end); - else - return s.substr(start, start + end + 1); - } - -std::map<std::string, std::string> read_cfg(std::istream& is) - { - std::map<std::string, std::string> kv; - size_t line = 0; - - while(is.good()) - { - std::string s; - - std::getline(is, s); - - ++line; - - if(s.empty() || s[0] == '#') - continue; - - s = clean_ws(s.substr(0, s.find('#'))); - - if(s.empty()) - continue; - - auto eq = s.find("="); - - if(eq == std::string::npos || eq == 0 || eq == s.size() - 1) - throw Exception("Bad read_cfg input '" + s + "' on line " + std::to_string(line)); - - const std::string key = clean_ws(s.substr(0, eq)); - const std::string val = clean_ws(s.substr(eq + 1, std::string::npos)); - - kv[key] = val; - } - - return kv; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/read_kv.cpp b/src/libs/3rdparty/botan/src/lib/utils/read_kv.cpp deleted file mode 100644 index cdc84c6229..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/read_kv.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* -* (C) 2018 Ribose Inc -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/parsing.h> -#include <botan/exceptn.h> - -namespace Botan { - -std::map<std::string, std::string> read_kv(const std::string& kv) - { - std::map<std::string, std::string> m; - if(kv == "") - return m; - - std::vector<std::string> parts; - - try - { - parts = split_on(kv, ','); - } - catch(std::exception&) - { - throw Invalid_Argument("Bad KV spec"); - } - - bool escaped = false; - bool reading_key = true; - std::string cur_key; - std::string cur_val; - - for(char c : kv) - { - if(c == '\\' && !escaped) - { - escaped = true; - } - else if(c == ',' && !escaped) - { - if(cur_key.empty()) - throw Invalid_Argument("Bad KV spec empty key"); - - if(m.find(cur_key) != m.end()) - throw Invalid_Argument("Bad KV spec duplicated key"); - m[cur_key] = cur_val; - cur_key = ""; - cur_val = ""; - reading_key = true; - } - else if(c == '=' && !escaped) - { - if(reading_key == false) - throw Invalid_Argument("Bad KV spec unexpected equals sign"); - reading_key = false; - } - else - { - if(reading_key) - cur_key += c; - else - cur_val += c; - - if(escaped) - escaped = false; - } - } - - if(!cur_key.empty()) - { - if(reading_key == false) - { - if(m.find(cur_key) != m.end()) - throw Invalid_Argument("Bad KV spec duplicated key"); - m[cur_key] = cur_val; - } - else - throw Invalid_Argument("Bad KV spec incomplete string"); - } - - return m; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/rotate.h b/src/libs/3rdparty/botan/src/lib/utils/rotate.h deleted file mode 100644 index 4bb76c9ed4..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/rotate.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -* Word Rotation Operations -* (C) 1999-2008,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_WORD_ROTATE_H_ -#define BOTAN_WORD_ROTATE_H_ - -#include <botan/types.h> - -namespace Botan { - -/** -* Bit rotation left by a compile-time constant amount -* @param input the input word -* @return input rotated left by ROT bits -*/ -template<size_t ROT, typename T> -inline T rotl(T input) - { - static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); - return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); - } - -/** -* Bit rotation right by a compile-time constant amount -* @param input the input word -* @return input rotated right by ROT bits -*/ -template<size_t ROT, typename T> -inline T rotr(T input) - { - static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); - return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); - } - -/** -* Bit rotation left, variable rotation amount -* @param input the input word -* @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1 -* @return input rotated left by rot bits -*/ -template<typename T> -inline T rotl_var(T input, size_t rot) - { - return rot ? static_cast<T>((input << rot) | (input >> (sizeof(T)*8 - rot))) : input; - } - -/** -* Bit rotation right, variable rotation amount -* @param input the input word -* @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1 -* @return input rotated right by rot bits -*/ -template<typename T> -inline T rotr_var(T input, size_t rot) - { - return rot ? static_cast<T>((input >> rot) | (input << (sizeof(T)*8 - rot))) : input; - } - -#if BOTAN_USE_GCC_INLINE_ASM - -#if defined(BOTAN_TARGET_ARCH_IS_X86_64) || defined(BOTAN_TARGET_ARCH_IS_X86_32) - -template<> -inline uint32_t rotl_var(uint32_t input, size_t rot) - { - asm("roll %1,%0" : "+r" (input) : "c" (static_cast<uint8_t>(rot))); - return input; - } - -template<> -inline uint32_t rotr_var(uint32_t input, size_t rot) - { - asm("rorl %1,%0" : "+r" (input) : "c" (static_cast<uint8_t>(rot))); - return input; - } - -#endif - -#endif - - -template<typename T> -BOTAN_DEPRECATED("Use rotl<N> or rotl_var") -inline T rotate_left(T input, size_t rot) - { - // rotl_var does not reduce - return rotl_var(input, rot % (8 * sizeof(T))); - } - -template<typename T> -BOTAN_DEPRECATED("Use rotr<N> or rotr_var") -inline T rotate_right(T input, size_t rot) - { - // rotr_var does not reduce - return rotr_var(input, rot % (8 * sizeof(T))); - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/rounding.h b/src/libs/3rdparty/botan/src/lib/utils/rounding.h deleted file mode 100644 index a03e3a4ee2..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/rounding.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -* Integer Rounding Functions -* (C) 1999-2007 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_ROUNDING_H_ -#define BOTAN_ROUNDING_H_ - -#include <botan/types.h> - -namespace Botan { - -/** -* Round up -* @param n a non-negative integer -* @param align_to the alignment boundary -* @return n rounded up to a multiple of align_to -*/ -inline size_t round_up(size_t n, size_t align_to) - { - BOTAN_ARG_CHECK(align_to != 0, "align_to must not be 0"); - - if(n % align_to) - n += align_to - (n % align_to); - return n; - } - -/** -* Round down -* @param n an integer -* @param align_to the alignment boundary -* @return n rounded down to a multiple of align_to -*/ -template<typename T> -inline T round_down(T n, T align_to) - { - if(align_to == 0) - return n; - - return (n - (n % align_to)); - } - -/** -* Clamp -*/ -inline size_t clamp(size_t n, size_t lower_bound, size_t upper_bound) - { - if(n < lower_bound) - return lower_bound; - if(n > upper_bound) - return upper_bound; - return n; - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/safeint.h b/src/libs/3rdparty/botan/src/lib/utils/safeint.h deleted file mode 100644 index 377f134187..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/safeint.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* Safe(r) Integer Handling -* (C) 2016 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_UTILS_SAFE_INT_H_ -#define BOTAN_UTILS_SAFE_INT_H_ - -#include <botan/exceptn.h> -#include <string> - -namespace Botan { - -class BOTAN_PUBLIC_API(2,0) Integer_Overflow_Detected final : public Exception - { - public: - Integer_Overflow_Detected(const std::string& file, int line) : - Exception("Integer overflow detected at " + file + ":" + std::to_string(line)) - {} - }; - -inline size_t checked_add(size_t x, size_t y, const char* file, int line) - { - // TODO: use __builtin_x_overflow on GCC and Clang - size_t z = x + y; - if(z < x) - { - throw Integer_Overflow_Detected(file, line); - } - return z; - } - -#define BOTAN_CHECKED_ADD(x,y) checked_add(x,y,__FILE__,__LINE__) - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/simd/info.txt b/src/libs/3rdparty/botan/src/lib/utils/simd/info.txt deleted file mode 100644 index 7784902a60..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/simd/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -SIMD_32 -> 20131128 -</defines> - -<header:internal> -simd_32.h -</header:internal> diff --git a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_32.h b/src/libs/3rdparty/botan/src/lib/utils/simd/simd_32.h deleted file mode 100644 index 20589939c2..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_32.h +++ /dev/null @@ -1,654 +0,0 @@ -/* -* Lightweight wrappers for SIMD operations -* (C) 2009,2011,2016,2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SIMD_32_H_ -#define BOTAN_SIMD_32_H_ - -#include <botan/types.h> -#include <botan/loadstor.h> -#include <botan/bswap.h> -#include <botan/cpuid.h> - -#if defined(BOTAN_TARGET_SUPPORTS_SSE2) - #include <emmintrin.h> - #define BOTAN_SIMD_USE_SSE2 - -#elif defined(BOTAN_TARGET_SUPPORTS_ALTIVEC) - #include <altivec.h> - #undef vector - #undef bool - #define BOTAN_SIMD_USE_ALTIVEC - -#elif defined(BOTAN_TARGET_SUPPORTS_NEON) - #include <arm_neon.h> - #define BOTAN_SIMD_USE_NEON -#endif - -namespace Botan { - -/** -* 4x32 bit SIMD register -* -* This class is not a general purpose SIMD type, and only offers -* instructions needed for evaluation of specific crypto primitives. -* For example it does not currently have equality operators of any -* kind. -* -* Implemented for SSE2, VMX (Altivec), and NEON. -*/ -class SIMD_4x32 final - { - public: - - SIMD_4x32& operator=(const SIMD_4x32& other) = default; - SIMD_4x32(const SIMD_4x32& other) = default; - -#if !defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - SIMD_4x32& operator=(SIMD_4x32&& other) = default; - SIMD_4x32(SIMD_4x32&& other) = default; -#endif - - /** - * Zero initialize SIMD register with 4 32-bit elements - */ - SIMD_4x32() // zero initialized - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_setzero_si128(); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_splat_u32(0); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vdupq_n_u32(0); -#else - m_scalar[0] = 0; - m_scalar[1] = 0; - m_scalar[2] = 0; - m_scalar[3] = 0; -#endif - } - - /** - * Load SIMD register with 4 32-bit elements - */ - explicit SIMD_4x32(const uint32_t B[4]) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_loadu_si128(reinterpret_cast<const __m128i*>(B)); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = (__vector unsigned int){B[0], B[1], B[2], B[3]}; -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vld1q_u32(B); -#else - m_scalar[0] = B[0]; - m_scalar[1] = B[1]; - m_scalar[2] = B[2]; - m_scalar[3] = B[3]; -#endif - } - - /** - * Load SIMD register with 4 32-bit elements - */ - SIMD_4x32(uint32_t B0, uint32_t B1, uint32_t B2, uint32_t B3) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_set_epi32(B3, B2, B1, B0); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = (__vector unsigned int){B0, B1, B2, B3}; -#elif defined(BOTAN_SIMD_USE_NEON) - // Better way to do this? - const uint32_t B[4] = { B0, B1, B2, B3 }; - m_neon = vld1q_u32(B); -#else - m_scalar[0] = B0; - m_scalar[1] = B1; - m_scalar[2] = B2; - m_scalar[3] = B3; -#endif - } - - /** - * Load SIMD register with one 32-bit element repeated - */ - static SIMD_4x32 splat(uint32_t B) - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_set1_epi32(B)); -#elif defined(BOTAN_SIMD_USE_ARM) - return SIMD_4x32(vdupq_n_u32(B)); -#else - return SIMD_4x32(B, B, B, B); -#endif - } - - /** - * Load a SIMD register with little-endian convention - */ - static SIMD_4x32 load_le(const void* in) - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_loadu_si128(reinterpret_cast<const __m128i*>(in))); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - uint32_t R[4]; - Botan::load_le(R, static_cast<const uint8_t*>(in), 4); - return SIMD_4x32(R); - -#elif defined(BOTAN_SIMD_USE_NEON) - - uint32_t in32[4]; - std::memcpy(in32, in, 16); - if(CPUID::is_big_endian()) - { - bswap_4(in32); - } - return SIMD_4x32(vld1q_u32(in32)); - -#else - SIMD_4x32 out; - Botan::load_le(out.m_scalar, static_cast<const uint8_t*>(in), 4); - return out; -#endif - } - - /** - * Load a SIMD register with big-endian convention - */ - static SIMD_4x32 load_be(const void* in) - { -#if defined(BOTAN_SIMD_USE_SSE2) - - return load_le(in).bswap(); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - uint32_t R[4]; - Botan::load_be(R, static_cast<const uint8_t*>(in), 4); - return SIMD_4x32(R); - -#elif defined(BOTAN_SIMD_USE_NEON) - - uint32_t in32[4]; - std::memcpy(in32, in, 16); - if(CPUID::is_little_endian()) - { - bswap_4(in32); - } - return SIMD_4x32(vld1q_u32(in32)); - -#else - SIMD_4x32 out; - Botan::load_be(out.m_scalar, static_cast<const uint8_t*>(in), 4); - return out; -#endif - } - - /** - * Load a SIMD register with little-endian convention - */ - void store_le(uint8_t out[]) const - { -#if defined(BOTAN_SIMD_USE_SSE2) - - _mm_storeu_si128(reinterpret_cast<__m128i*>(out), m_sse); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - union { - __vector unsigned int V; - uint32_t R[4]; - } vec; - vec.V = m_vmx; - Botan::store_le(out, vec.R[0], vec.R[1], vec.R[2], vec.R[3]); - -#elif defined(BOTAN_SIMD_USE_NEON) - - if(CPUID::is_big_endian()) - { - SIMD_4x32 swap = bswap(); - swap.store_be(out); - } - else - { - uint32_t out32[4] = { 0 }; - vst1q_u32(out32, m_neon); - copy_out_le(out, 16, out32); - } -#else - Botan::store_le(out, m_scalar[0], m_scalar[1], m_scalar[2], m_scalar[3]); -#endif - } - - /** - * Load a SIMD register with big-endian convention - */ - void store_be(uint8_t out[]) const - { -#if defined(BOTAN_SIMD_USE_SSE2) - - bswap().store_le(out); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - union { - __vector unsigned int V; - uint32_t R[4]; - } vec; - vec.V = m_vmx; - Botan::store_be(out, vec.R[0], vec.R[1], vec.R[2], vec.R[3]); - -#elif defined(BOTAN_SIMD_USE_NEON) - - if(CPUID::is_little_endian()) - { - SIMD_4x32 swap = bswap(); - swap.store_le(out); - } - else - { - uint32_t out32[4] = { 0 }; - vst1q_u32(out32, m_neon); - copy_out_be(out, 16, out32); - } - -#else - Botan::store_be(out, m_scalar[0], m_scalar[1], m_scalar[2], m_scalar[3]); -#endif - } - - - /* - * This is used for SHA-2/SHACAL2 - * Return rotr(ROT1) ^ rotr(ROT2) ^ rotr(ROT3) - */ - template<size_t ROT1, size_t ROT2, size_t ROT3> - SIMD_4x32 rho() const - { - const SIMD_4x32 rot1 = this->rotr<ROT1>(); - const SIMD_4x32 rot2 = this->rotr<ROT2>(); - const SIMD_4x32 rot3 = this->rotr<ROT3>(); - return (rot1 ^ rot2 ^ rot3); - } - - /** - * Left rotation by a compile time constant - */ - template<size_t ROT> - SIMD_4x32 rotl() const - { - static_assert(ROT > 0 && ROT < 32, "Invalid rotation constant"); - -#if defined(BOTAN_SIMD_USE_SSE2) - - return SIMD_4x32(_mm_or_si128(_mm_slli_epi32(m_sse, static_cast<int>(ROT)), - _mm_srli_epi32(m_sse, static_cast<int>(32-ROT)))); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - const unsigned int r = static_cast<unsigned int>(ROT); - return SIMD_4x32(vec_rl(m_vmx, (__vector unsigned int){r, r, r, r})); - -#elif defined(BOTAN_SIMD_USE_NEON) - return SIMD_4x32(vorrq_u32(vshlq_n_u32(m_neon, static_cast<int>(ROT)), - vshrq_n_u32(m_neon, static_cast<int>(32-ROT)))); - -#else - return SIMD_4x32(Botan::rotl<ROT>(m_scalar[0]), - Botan::rotl<ROT>(m_scalar[1]), - Botan::rotl<ROT>(m_scalar[2]), - Botan::rotl<ROT>(m_scalar[3])); -#endif - } - - /** - * Right rotation by a compile time constant - */ - template<size_t ROT> - SIMD_4x32 rotr() const - { - return this->rotl<32-ROT>(); - } - - /** - * Add elements of a SIMD vector - */ - SIMD_4x32 operator+(const SIMD_4x32& other) const - { - SIMD_4x32 retval(*this); - retval += other; - return retval; - } - - /** - * Subtract elements of a SIMD vector - */ - SIMD_4x32 operator-(const SIMD_4x32& other) const - { - SIMD_4x32 retval(*this); - retval -= other; - return retval; - } - - /** - * XOR elements of a SIMD vector - */ - SIMD_4x32 operator^(const SIMD_4x32& other) const - { - SIMD_4x32 retval(*this); - retval ^= other; - return retval; - } - - /** - * Binary OR elements of a SIMD vector - */ - SIMD_4x32 operator|(const SIMD_4x32& other) const - { - SIMD_4x32 retval(*this); - retval |= other; - return retval; - } - - /** - * Binary AND elements of a SIMD vector - */ - SIMD_4x32 operator&(const SIMD_4x32& other) const - { - SIMD_4x32 retval(*this); - retval &= other; - return retval; - } - - void operator+=(const SIMD_4x32& other) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_add_epi32(m_sse, other.m_sse); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_add(m_vmx, other.m_vmx); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vaddq_u32(m_neon, other.m_neon); -#else - m_scalar[0] += other.m_scalar[0]; - m_scalar[1] += other.m_scalar[1]; - m_scalar[2] += other.m_scalar[2]; - m_scalar[3] += other.m_scalar[3]; -#endif - } - - void operator-=(const SIMD_4x32& other) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_sub_epi32(m_sse, other.m_sse); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_sub(m_vmx, other.m_vmx); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vsubq_u32(m_neon, other.m_neon); -#else - m_scalar[0] -= other.m_scalar[0]; - m_scalar[1] -= other.m_scalar[1]; - m_scalar[2] -= other.m_scalar[2]; - m_scalar[3] -= other.m_scalar[3]; -#endif - } - - void operator^=(const SIMD_4x32& other) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_xor_si128(m_sse, other.m_sse); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_xor(m_vmx, other.m_vmx); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = veorq_u32(m_neon, other.m_neon); -#else - m_scalar[0] ^= other.m_scalar[0]; - m_scalar[1] ^= other.m_scalar[1]; - m_scalar[2] ^= other.m_scalar[2]; - m_scalar[3] ^= other.m_scalar[3]; -#endif - } - - void operator|=(const SIMD_4x32& other) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_or_si128(m_sse, other.m_sse); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_or(m_vmx, other.m_vmx); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vorrq_u32(m_neon, other.m_neon); -#else - m_scalar[0] |= other.m_scalar[0]; - m_scalar[1] |= other.m_scalar[1]; - m_scalar[2] |= other.m_scalar[2]; - m_scalar[3] |= other.m_scalar[3]; -#endif - } - - void operator&=(const SIMD_4x32& other) - { -#if defined(BOTAN_SIMD_USE_SSE2) - m_sse = _mm_and_si128(m_sse, other.m_sse); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_vmx = vec_and(m_vmx, other.m_vmx); -#elif defined(BOTAN_SIMD_USE_NEON) - m_neon = vandq_u32(m_neon, other.m_neon); -#else - m_scalar[0] &= other.m_scalar[0]; - m_scalar[1] &= other.m_scalar[1]; - m_scalar[2] &= other.m_scalar[2]; - m_scalar[3] &= other.m_scalar[3]; -#endif - } - - - template<int SHIFT> SIMD_4x32 shl() const - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_slli_epi32(m_sse, SHIFT)); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - const unsigned int s = static_cast<unsigned int>(SHIFT); - return SIMD_4x32(vec_sl(m_vmx, (__vector unsigned int){s, s, s, s})); -#elif defined(BOTAN_SIMD_USE_NEON) - return SIMD_4x32(vshlq_n_u32(m_neon, SHIFT)); -#else - return SIMD_4x32(m_scalar[0] << SHIFT, - m_scalar[1] << SHIFT, - m_scalar[2] << SHIFT, - m_scalar[3] << SHIFT); -#endif - } - - template<int SHIFT> SIMD_4x32 shr() const - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_srli_epi32(m_sse, SHIFT)); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - const unsigned int s = static_cast<unsigned int>(SHIFT); - return SIMD_4x32(vec_sr(m_vmx, (__vector unsigned int){s, s, s, s})); -#elif defined(BOTAN_SIMD_USE_NEON) - return SIMD_4x32(vshrq_n_u32(m_neon, SHIFT)); -#else - return SIMD_4x32(m_scalar[0] >> SHIFT, m_scalar[1] >> SHIFT, - m_scalar[2] >> SHIFT, m_scalar[3] >> SHIFT); - -#endif - } - - SIMD_4x32 operator~() const - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_xor_si128(m_sse, _mm_set1_epi32(0xFFFFFFFF))); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - return SIMD_4x32(vec_nor(m_vmx, m_vmx)); -#elif defined(BOTAN_SIMD_USE_NEON) - return SIMD_4x32(vmvnq_u32(m_neon)); -#else - return SIMD_4x32(~m_scalar[0], ~m_scalar[1], ~m_scalar[2], ~m_scalar[3]); -#endif - } - - // (~reg) & other - SIMD_4x32 andc(const SIMD_4x32& other) const - { -#if defined(BOTAN_SIMD_USE_SSE2) - return SIMD_4x32(_mm_andnot_si128(m_sse, other.m_sse)); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - /* - AltiVec does arg1 & ~arg2 rather than SSE's ~arg1 & arg2 - so swap the arguments - */ - return SIMD_4x32(vec_andc(other.m_vmx, m_vmx)); -#elif defined(BOTAN_SIMD_USE_NEON) - // NEON is also a & ~b - return SIMD_4x32(vbicq_u32(other.m_neon, m_neon)); -#else - return SIMD_4x32((~m_scalar[0]) & other.m_scalar[0], - (~m_scalar[1]) & other.m_scalar[1], - (~m_scalar[2]) & other.m_scalar[2], - (~m_scalar[3]) & other.m_scalar[3]); -#endif - } - - /** - * Return copy *this with each word byte swapped - */ - SIMD_4x32 bswap() const - { -#if defined(BOTAN_SIMD_USE_SSE2) - - __m128i T = m_sse; - T = _mm_shufflehi_epi16(T, _MM_SHUFFLE(2, 3, 0, 1)); - T = _mm_shufflelo_epi16(T, _MM_SHUFFLE(2, 3, 0, 1)); - return SIMD_4x32(_mm_or_si128(_mm_srli_epi16(T, 8), _mm_slli_epi16(T, 8))); - -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - - union { - __vector unsigned int V; - uint32_t R[4]; - } vec; - - vec.V = m_vmx; - bswap_4(vec.R); - return SIMD_4x32(vec.R[0], vec.R[1], vec.R[2], vec.R[3]); - -#elif defined(BOTAN_SIMD_USE_NEON) - - //return SIMD_4x32(vrev64q_u32(m_neon)); - - // FIXME this is really slow - SIMD_4x32 ror8 = this->rotr<8>(); - SIMD_4x32 rol8 = this->rotl<8>(); - - const SIMD_4x32 mask1 = SIMD_4x32::splat(0xFF00FF00); - const SIMD_4x32 mask2 = SIMD_4x32::splat(0x00FF00FF); - return (ror8 & mask1) | (rol8 & mask2); -#else - // scalar - return SIMD_4x32(reverse_bytes(m_scalar[0]), - reverse_bytes(m_scalar[1]), - reverse_bytes(m_scalar[2]), - reverse_bytes(m_scalar[3])); -#endif - } - - /** - * 4x4 Transposition on SIMD registers - */ - static void transpose(SIMD_4x32& B0, SIMD_4x32& B1, - SIMD_4x32& B2, SIMD_4x32& B3) - { -#if defined(BOTAN_SIMD_USE_SSE2) - const __m128i T0 = _mm_unpacklo_epi32(B0.m_sse, B1.m_sse); - const __m128i T1 = _mm_unpacklo_epi32(B2.m_sse, B3.m_sse); - const __m128i T2 = _mm_unpackhi_epi32(B0.m_sse, B1.m_sse); - const __m128i T3 = _mm_unpackhi_epi32(B2.m_sse, B3.m_sse); - - B0.m_sse = _mm_unpacklo_epi64(T0, T1); - B1.m_sse = _mm_unpackhi_epi64(T0, T1); - B2.m_sse = _mm_unpacklo_epi64(T2, T3); - B3.m_sse = _mm_unpackhi_epi64(T2, T3); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - const __vector unsigned int T0 = vec_mergeh(B0.m_vmx, B2.m_vmx); - const __vector unsigned int T1 = vec_mergeh(B1.m_vmx, B3.m_vmx); - const __vector unsigned int T2 = vec_mergel(B0.m_vmx, B2.m_vmx); - const __vector unsigned int T3 = vec_mergel(B1.m_vmx, B3.m_vmx); - - B0.m_vmx = vec_mergeh(T0, T1); - B1.m_vmx = vec_mergel(T0, T1); - B2.m_vmx = vec_mergeh(T2, T3); - B3.m_vmx = vec_mergel(T2, T3); -#elif defined(BOTAN_SIMD_USE_NEON) - -#if defined(BOTAN_TARGET_ARCH_IS_ARM32) - - const uint32x4x2_t T0 = vzipq_u32(B0.m_neon, B2.m_neon); - const uint32x4x2_t T1 = vzipq_u32(B1.m_neon, B3.m_neon); - const uint32x4x2_t O0 = vzipq_u32(T0.val[0], T1.val[0]); - const uint32x4x2_t O1 = vzipq_u32(T0.val[1], T1.val[1]); - - B0.m_neon = O0.val[0]; - B1.m_neon = O0.val[1]; - B2.m_neon = O1.val[0]; - B3.m_neon = O1.val[1]; - -#elif defined(BOTAN_TARGET_ARCH_IS_ARM64) - const uint32x4_t T0 = vzip1q_u32(B0.m_neon, B2.m_neon); - const uint32x4_t T2 = vzip2q_u32(B0.m_neon, B2.m_neon); - - const uint32x4_t T1 = vzip1q_u32(B1.m_neon, B3.m_neon); - const uint32x4_t T3 = vzip2q_u32(B1.m_neon, B3.m_neon); - - B0.m_neon = vzip1q_u32(T0, T1); - B1.m_neon = vzip2q_u32(T0, T1); - - B2.m_neon = vzip1q_u32(T2, T3); - B3.m_neon = vzip2q_u32(T2, T3); -#endif - -#else - // scalar - SIMD_4x32 T0(B0.m_scalar[0], B1.m_scalar[0], B2.m_scalar[0], B3.m_scalar[0]); - SIMD_4x32 T1(B0.m_scalar[1], B1.m_scalar[1], B2.m_scalar[1], B3.m_scalar[1]); - SIMD_4x32 T2(B0.m_scalar[2], B1.m_scalar[2], B2.m_scalar[2], B3.m_scalar[2]); - SIMD_4x32 T3(B0.m_scalar[3], B1.m_scalar[3], B2.m_scalar[3], B3.m_scalar[3]); - - B0 = T0; - B1 = T1; - B2 = T2; - B3 = T3; -#endif - } - - private: - -#if defined(BOTAN_SIMD_USE_SSE2) - explicit SIMD_4x32(__m128i in) : m_sse(in) {} -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - explicit SIMD_4x32(__vector unsigned int in) : m_vmx(in) {} -#elif defined(BOTAN_SIMD_USE_NEON) - explicit SIMD_4x32(uint32x4_t in) : m_neon(in) {} -#endif - -#if defined(BOTAN_SIMD_USE_SSE2) - __m128i m_sse; -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - __vector unsigned int m_vmx; -#elif defined(BOTAN_SIMD_USE_NEON) - uint32x4_t m_neon; -#else - uint32_t m_scalar[4]; -#endif - }; - -typedef SIMD_4x32 SIMD_32; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/info.txt b/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/info.txt deleted file mode 100644 index e3d043a12e..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/info.txt +++ /dev/null @@ -1,16 +0,0 @@ -<defines> -SIMD_AVX2 -> 20180824 -</defines> - -need_isa avx2 - -<header:internal> -simd_avx2.h -</header:internal> - -<cc> -gcc -clang -msvc -icc -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/simd_avx2.h b/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/simd_avx2.h deleted file mode 100644 index 19f9308540..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/simd/simd_avx2/simd_avx2.h +++ /dev/null @@ -1,198 +0,0 @@ -/* -* (C) 2018 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SIMD_AVX2_H_ -#define BOTAN_SIMD_AVX2_H_ - -#include <botan/types.h> -#include <immintrin.h> - -namespace Botan { - -class SIMD_8x32 final - { - public: - - SIMD_8x32& operator=(const SIMD_8x32& other) = default; - SIMD_8x32(const SIMD_8x32& other) = default; - -#if !defined(BOTAN_BUILD_COMPILER_IS_MSVC_2013) - SIMD_8x32& operator=(SIMD_8x32&& other) = default; - SIMD_8x32(SIMD_8x32&& other) = default; -#endif - - SIMD_8x32() - { - m_avx2 = _mm256_setzero_si256(); - } - - explicit SIMD_8x32(const uint32_t B[8]) - { - m_avx2 = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(B)); - } - - static SIMD_8x32 splat(uint32_t B) - { - return SIMD_8x32(_mm256_set1_epi32(B)); - } - - static SIMD_8x32 load_le(const uint8_t* in) - { - return SIMD_8x32(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(in))); - } - - static SIMD_8x32 load_be(const uint8_t* in) - { - return load_le(in).bswap(); - } - - void store_le(uint8_t out[]) const - { - _mm256_storeu_si256(reinterpret_cast<__m256i*>(out), m_avx2); - } - - void store_be(uint8_t out[]) const - { - bswap().store_le(out); - } - - template<size_t ROT> - SIMD_8x32 rotl() const - { - static_assert(ROT > 0 && ROT < 32, "Invalid rotation constant"); - - return SIMD_8x32(_mm256_or_si256(_mm256_slli_epi32(m_avx2, static_cast<int>(ROT)), - _mm256_srli_epi32(m_avx2, static_cast<int>(32-ROT)))); - } - - template<size_t ROT> - SIMD_8x32 rotr() const - { - return this->rotl<32-ROT>(); - } - - SIMD_8x32 operator+(const SIMD_8x32& other) const - { - SIMD_8x32 retval(*this); - retval += other; - return retval; - } - - SIMD_8x32 operator-(const SIMD_8x32& other) const - { - SIMD_8x32 retval(*this); - retval -= other; - return retval; - } - - SIMD_8x32 operator^(const SIMD_8x32& other) const - { - SIMD_8x32 retval(*this); - retval ^= other; - return retval; - } - - SIMD_8x32 operator|(const SIMD_8x32& other) const - { - SIMD_8x32 retval(*this); - retval |= other; - return retval; - } - - SIMD_8x32 operator&(const SIMD_8x32& other) const - { - SIMD_8x32 retval(*this); - retval &= other; - return retval; - } - - void operator+=(const SIMD_8x32& other) - { - m_avx2 = _mm256_add_epi32(m_avx2, other.m_avx2); - } - - void operator-=(const SIMD_8x32& other) - { - m_avx2 = _mm256_sub_epi32(m_avx2, other.m_avx2); - } - - void operator^=(const SIMD_8x32& other) - { - m_avx2 = _mm256_xor_si256(m_avx2, other.m_avx2); - } - - void operator|=(const SIMD_8x32& other) - { - m_avx2 = _mm256_or_si256(m_avx2, other.m_avx2); - } - - void operator&=(const SIMD_8x32& other) - { - m_avx2 = _mm256_and_si256(m_avx2, other.m_avx2); - } - - template<int SHIFT> SIMD_8x32 shl() const - { - return SIMD_8x32(_mm256_slli_epi32(m_avx2, SHIFT)); - } - - template<int SHIFT> SIMD_8x32 shr() const - { - return SIMD_8x32(_mm256_srli_epi32(m_avx2, SHIFT)); - } - - SIMD_8x32 operator~() const - { - return SIMD_8x32(_mm256_xor_si256(m_avx2, _mm256_set1_epi32(0xFFFFFFFF))); - } - - // (~reg) & other - SIMD_8x32 andc(const SIMD_8x32& other) const - { - return SIMD_8x32(_mm256_andnot_si256(m_avx2, other.m_avx2)); - } - - SIMD_8x32 bswap() const - { - const uint8_t BSWAP_MASK[32] = { 3, 2, 1, 0, - 7, 6, 5, 4, - 11, 10, 9, 8, - 15, 14, 13, 12, - 19, 18, 17, 16, - 23, 22, 21, 20, - 27, 26, 25, 24, - 31, 30, 29, 28 }; - - const __m256i bswap = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(BSWAP_MASK)); - - const __m256i output = _mm256_shuffle_epi8(m_avx2, bswap); - - return SIMD_8x32(output); - } - - static void transpose(SIMD_8x32& B0, SIMD_8x32& B1, - SIMD_8x32& B2, SIMD_8x32& B3) - { - const __m256i T0 = _mm256_unpacklo_epi32(B0.m_avx2, B1.m_avx2); - const __m256i T1 = _mm256_unpacklo_epi32(B2.m_avx2, B3.m_avx2); - const __m256i T2 = _mm256_unpackhi_epi32(B0.m_avx2, B1.m_avx2); - const __m256i T3 = _mm256_unpackhi_epi32(B2.m_avx2, B3.m_avx2); - - B0.m_avx2 = _mm256_unpacklo_epi64(T0, T1); - B1.m_avx2 = _mm256_unpackhi_epi64(T0, T1); - B2.m_avx2 = _mm256_unpacklo_epi64(T2, T3); - B3.m_avx2 = _mm256_unpackhi_epi64(T2, T3); - } - - private: - SIMD_8x32(__m256i x) : m_avx2(x) {} - - __m256i m_avx2; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/stl_compatibility.h b/src/libs/3rdparty/botan/src/lib/utils/stl_compatibility.h deleted file mode 100644 index 099af83b38..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/stl_compatibility.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -* STL standards compatibility functions -* (C) 2017 Tomasz Frydrych -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_STL_COMPATIBILITY_H_ -#define BOTAN_STL_COMPATIBILITY_H_ - -#include <memory> - -#if __cplusplus < 201402L -#include <cstddef> -#include <type_traits> -#include <utility> -#endif - -namespace Botan -{ -/* -* std::make_unique functionality similar as we have in C++14. -* C++11 version based on proposal for C++14 implemenatation by Stephan T. Lavavej -* source: https://isocpp.org/files/papers/N3656.txt -*/ -#if __cplusplus >= 201402L -template <typename T, typename ... Args> -constexpr auto make_unique(Args&&... args) - { - return std::make_unique<T>(std::forward<Args>(args)...); - } - -template<class T> -constexpr auto make_unique(std::size_t size) - { - return std::make_unique<T>(size); - } - -#else -namespace stlCompatibilityDetails -{ -template<class T> struct _Unique_if - { - typedef std::unique_ptr<T> _Single_object; - }; - -template<class T> struct _Unique_if<T[]> - { - typedef std::unique_ptr<T[]> _Unknown_bound; - }; - -template<class T, size_t N> struct _Unique_if<T[N]> - { - typedef void _Known_bound; - }; -} // namespace stlCompatibilityDetails - -template<class T, class... Args> -typename stlCompatibilityDetails::_Unique_if<T>::_Single_object make_unique(Args&&... args) - { - return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); - } - -template<class T> -typename stlCompatibilityDetails::_Unique_if<T>::_Unknown_bound make_unique(size_t n) - { - typedef typename std::remove_extent<T>::type U; - return std::unique_ptr<T>(new U[n]()); - } - -template<class T, class... Args> -typename stlCompatibilityDetails::_Unique_if<T>::_Known_bound make_unique(Args&&...) = delete; - -#endif - -} // namespace Botan -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/stl_util.h b/src/libs/3rdparty/botan/src/lib/utils/stl_util.h deleted file mode 100644 index d9167bb7db..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/stl_util.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -* STL Utility Functions -* (C) 1999-2007 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_STL_UTIL_H_ -#define BOTAN_STL_UTIL_H_ - -#include <vector> -#include <string> -#include <map> -#include <set> -#include <botan/secmem.h> - -namespace Botan { - -inline std::vector<uint8_t> to_byte_vector(const std::string& s) - { - return std::vector<uint8_t>(s.cbegin(), s.cend()); - } - -inline std::string to_string(const secure_vector<uint8_t> &bytes) - { - return std::string(bytes.cbegin(), bytes.cend()); - } - -/** -* Return the keys of a map as a std::set -*/ -template<typename K, typename V> -std::set<K> map_keys_as_set(const std::map<K, V>& kv) - { - std::set<K> s; - for(auto&& i : kv) - { - s.insert(i.first); - } - return s; - } - -/* -* Searching through a std::map -* @param mapping the map to search -* @param key is what to look for -* @param null_result is the value to return if key is not in mapping -* @return mapping[key] or null_result -*/ -template<typename K, typename V> -inline V search_map(const std::map<K, V>& mapping, - const K& key, - const V& null_result = V()) - { - auto i = mapping.find(key); - if(i == mapping.end()) - return null_result; - return i->second; - } - -template<typename K, typename V, typename R> -inline R search_map(const std::map<K, V>& mapping, const K& key, - const R& null_result, const R& found_result) - { - auto i = mapping.find(key); - if(i == mapping.end()) - return null_result; - return found_result; - } - -/* -* Insert a key/value pair into a multimap -*/ -template<typename K, typename V> -void multimap_insert(std::multimap<K, V>& multimap, - const K& key, const V& value) - { - multimap.insert(std::make_pair(key, value)); - } - -/** -* Existence check for values -*/ -template<typename T> -bool value_exists(const std::vector<T>& vec, - const T& val) - { - for(size_t i = 0; i != vec.size(); ++i) - if(vec[i] == val) - return true; - return false; - } - -template<typename T, typename Pred> -void map_remove_if(Pred pred, T& assoc) - { - auto i = assoc.begin(); - while(i != assoc.end()) - { - if(pred(i->first)) - assoc.erase(i++); - else - i++; - } - } - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/timer.cpp b/src/libs/3rdparty/botan/src/lib/utils/timer.cpp deleted file mode 100644 index 5d64e63fb8..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/timer.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* -* (C) 2018 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/internal/timer.h> -#include <algorithm> -#include <sstream> -#include <iomanip> - -namespace Botan { - -void Timer::stop() - { - if(m_timer_start) - { - const uint64_t now = Timer::get_system_timestamp_ns(); - - if(now > m_timer_start) - { - uint64_t dur = now - m_timer_start; - - m_time_used += dur; - - if(m_cpu_cycles_start != 0) - { - uint64_t cycles_taken = Timer::get_cpu_cycle_counter() - m_cpu_cycles_start; - if(cycles_taken > 0) - { - m_cpu_cycles_used += static_cast<size_t>(cycles_taken * m_clock_cycle_ratio); - } - } - - if(m_event_count == 0) - { - m_min_time = m_max_time = dur; - } - else - { - m_max_time = std::max(m_max_time, dur); - m_min_time = std::min(m_min_time, dur); - } - } - - m_timer_start = 0; - ++m_event_count; - } - } - -std::string Timer::result_string_bps() const - { - const size_t MiB = 1024 * 1024; - - const double MiB_total = static_cast<double>(events()) / MiB; - const double MiB_per_sec = MiB_total / seconds(); - - std::ostringstream oss; - oss << get_name(); - - if(!doing().empty()) - { - oss << " " << doing(); - } - - if(buf_size() > 0) - { - oss << " buffer size " << buf_size() << " bytes:"; - } - - if(events() == 0) - oss << " " << "N/A"; - else - oss << " " << std::fixed << std::setprecision(3) << MiB_per_sec << " MiB/sec"; - - if(cycles_consumed() != 0) - { - const double cycles_per_byte = static_cast<double>(cycles_consumed()) / events(); - oss << " " << std::fixed << std::setprecision(2) << cycles_per_byte << " cycles/byte"; - } - - oss << " (" << MiB_total << " MiB in " << milliseconds() << " ms)\n"; - - return oss.str(); - } - -std::string Timer::result_string_ops() const - { - std::ostringstream oss; - - oss << get_name() << " "; - - if(events() == 0) - { - oss << "no events\n"; - } - else - { - oss << static_cast<uint64_t>(events_per_second()) - << ' ' << doing() << "/sec; " - << std::setprecision(2) << std::fixed - << ms_per_event() << " ms/op"; - - if(cycles_consumed() != 0) - { - const double cycles_per_op = static_cast<double>(cycles_consumed()) / events(); - const size_t precision = (cycles_per_op < 10000) ? 2 : 0; - oss << " " << std::fixed << std::setprecision(precision) << cycles_per_op << " cycles/op"; - } - - oss << " (" << events() << " " << (events() == 1 ? "op" : "ops") - << " in " << milliseconds() << " ms)\n"; - } - - return oss.str(); - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/timer.h b/src/libs/3rdparty/botan/src/lib/utils/timer.h deleted file mode 100644 index 86a17b4626..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/timer.h +++ /dev/null @@ -1,216 +0,0 @@ -/* -* (C) 2018 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_TIMER_H_ -#define BOTAN_TIMER_H_ - -#include <botan/types.h> -#include <botan/internal/os_utils.h> -#include <string> -#include <chrono> - -namespace Botan { - -class BOTAN_TEST_API Timer final - { - public: - Timer(const std::string& name, - const std::string& provider, - const std::string& doing, - uint64_t event_mult, - size_t buf_size, - double clock_cycle_ratio, - uint64_t clock_speed) - : m_name(name + ((provider.empty() || provider == "base") ? "" : " [" + provider + "]")) - , m_doing(doing) - , m_buf_size(buf_size) - , m_event_mult(event_mult) - , m_clock_cycle_ratio(clock_cycle_ratio) - , m_clock_speed(clock_speed) - {} - - Timer(const std::string& name, size_t buf_size = 0) : - Timer(name, "", "", 1, buf_size, 0.0, 0) - {} - - Timer(const Timer& other) = default; - - static uint64_t get_system_timestamp_ns() - { - return Botan::OS::get_system_timestamp_ns(); - } - - static uint64_t get_cpu_cycle_counter() - { - return Botan::OS::get_processor_timestamp(); - } - - void start() - { - stop(); - m_timer_start = Timer::get_system_timestamp_ns(); - m_cpu_cycles_start = Timer::get_cpu_cycle_counter(); - } - - void stop(); - - bool under(std::chrono::milliseconds msec) - { - return (milliseconds() < msec.count()); - } - - class Timer_Scope final - { - public: - explicit Timer_Scope(Timer& timer) - : m_timer(timer) - { - m_timer.start(); - } - ~Timer_Scope() - { - try - { - m_timer.stop(); - } - catch(...) {} - } - private: - Timer& m_timer; - }; - - template<typename F> - auto run(F f) -> decltype(f()) - { - Timer_Scope timer(*this); - return f(); - } - - template<typename F> - void run_until_elapsed(std::chrono::milliseconds msec, F f) - { - while(this->under(msec)) - { - run(f); - } - } - - uint64_t value() const - { - return m_time_used; - } - - double seconds() const - { - return milliseconds() / 1000.0; - } - - double milliseconds() const - { - return value() / 1000000.0; - } - - double ms_per_event() const - { - return milliseconds() / events(); - } - - uint64_t cycles_consumed() const - { - if(m_clock_speed != 0) - { - return static_cast<uint64_t>((m_clock_speed * value()) / 1000.0); - } - return m_cpu_cycles_used; - } - - uint64_t events() const - { - return m_event_count * m_event_mult; - } - - const std::string& get_name() const - { - return m_name; - } - - const std::string& doing() const - { - return m_doing; - } - - size_t buf_size() const - { - return m_buf_size; - } - - double bytes_per_second() const - { - return seconds() > 0.0 ? events() / seconds() : 0.0; - } - - double events_per_second() const - { - return seconds() > 0.0 ? events() / seconds() : 0.0; - } - - double seconds_per_event() const - { - return events() > 0 ? seconds() / events() : 0.0; - } - - void set_custom_msg(const std::string& s) - { - m_custom_msg = s; - } - - bool operator<(const Timer& other) const - { - if(this->doing() != other.doing()) - return (this->doing() < other.doing()); - - return (this->get_name() < other.get_name()); - } - - std::string to_string() const - { - if(m_custom_msg.size() > 0) - { - return m_custom_msg; - } - else if(this->buf_size() == 0) - { - return result_string_ops(); - } - else - { - return result_string_bps(); - } - } - - private: - std::string result_string_bps() const; - std::string result_string_ops() const; - - // const data - std::string m_name, m_doing; - size_t m_buf_size; - uint64_t m_event_mult; - double m_clock_cycle_ratio; - uint64_t m_clock_speed; - - // set at runtime - std::string m_custom_msg; - uint64_t m_time_used = 0, m_timer_start = 0; - uint64_t m_event_count = 0; - - uint64_t m_max_time = 0, m_min_time = 0; - uint64_t m_cpu_cycles_start = 0, m_cpu_cycles_used = 0; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/types.h b/src/libs/3rdparty/botan/src/lib/utils/types.h deleted file mode 100644 index 476701a1f3..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/types.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -* Low Level Types -* (C) 1999-2007 Jack Lloyd -* (C) 2015 Simon Warta (Kullo GmbH) -* (C) 2016 René Korthaus, Rohde & Schwarz Cybersecurity -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_TYPES_H_ -#define BOTAN_TYPES_H_ - -#include <botan/build.h> // IWYU pragma: export -#include <botan/assert.h> // IWYU pragma: export -#include <cstddef> // IWYU pragma: export -#include <cstdint> // IWYU pragma: export -#include <memory> // IWYU pragma: export - -namespace Botan { - -/** -* @mainpage Botan Crypto Library API Reference -* -* <dl> -* <dt>Abstract Base Classes<dd> -* BlockCipher, HashFunction, KDF, MessageAuthenticationCode, RandomNumberGenerator, -* StreamCipher, SymmetricAlgorithm, AEAD_Mode, Cipher_Mode -* <dt>Public Key Interface Classes<dd> -* PK_Key_Agreement, PK_Signer, PK_Verifier, PK_Encryptor, PK_Decryptor -* <dt>Authenticated Encryption Modes<dd> -* @ref CCM_Mode "CCM", @ref ChaCha20Poly1305_Mode "ChaCha20Poly1305", @ref EAX_Mode "EAX", -* @ref GCM_Mode "GCM", @ref OCB_Mode "OCB", @ref SIV_Mode "SIV" -* <dt>Block Ciphers<dd> -* @ref aria.h "ARIA", @ref aes.h "AES", @ref Blowfish, @ref camellia.h "Camellia", @ref Cascade_Cipher "Cascade", -* @ref CAST_128 "CAST-128", @ref CAST_128 "CAST-256", DES, @ref DESX "DES-X", @ref TripleDES "3DES", -* @ref GOST_28147_89 "GOST 28147-89", IDEA, KASUMI, Lion, MISTY1, Noekeon, SEED, Serpent, SHACAL2, SM4, -* @ref Threefish_512 "Threefish", Twofish, XTEA -* <dt>Stream Ciphers<dd> -* ChaCha, @ref CTR_BE "CTR", OFB, RC4, Salsa20 -* <dt>Hash Functions<dd> -* Blake2b, @ref GOST_34_11 "GOST 34.11", @ref Keccak_1600 "Keccak", MD4, MD5, @ref RIPEMD_160 "RIPEMD-160", -* @ref SHA_160 "SHA-1", @ref SHA_224 "SHA-224", @ref SHA_256 "SHA-256", @ref SHA_384 "SHA-384", -* @ref SHA_512 "SHA-512", @ref Skein_512 "Skein-512", SM3, Streebog, Tiger, Whirlpool -* <dt>Non-Cryptographic Checksums<dd> -* Adler32, CRC24, CRC32 -* <dt>Message Authentication Codes<dd> -* @ref CBC_MAC "CBC-MAC", CMAC, HMAC, Poly1305, SipHash, ANSI_X919_MAC -* <dt>Random Number Generators<dd> -* AutoSeeded_RNG, HMAC_DRBG, RDRAND_RNG, System_RNG -* <dt>Key Derivation<dd> -* HKDF, @ref KDF1 "KDF1 (IEEE 1363)", @ref KDF1_18033 "KDF1 (ISO 18033-2)", @ref KDF2 "KDF2 (IEEE 1363)", -* @ref sp800_108.h "SP800-108", @ref SP800_56C "SP800-56C", @ref PKCS5_PBKDF1 "PBKDF1 (PKCS#5), -* @ref PKCS5_PBKDF2 "PBKDF2 (PKCS#5)" -* <dt>Password Hashing<dd> -* @ref bcrypt.h "bcrypt", @ref passhash9.h "passhash9" -* <dt>Public Key Cryptosystems<dd> -* @ref dlies.h "DLIES", @ref ecies.h "ECIES", @ref elgamal.h "ElGamal" -* @ref rsa.h "RSA", @ref newhope.h "NewHope", @ref mceliece.h "McEliece" and @ref mceies.h "MCEIES", -* @ref sm2.h "SM2" -* <dt>Public Key Signature Schemes<dd> -* @ref dsa.h "DSA", @ref ecdsa.h "ECDSA", @ref ecgdsa.h "ECGDSA", @ref eckcdsa.h "ECKCDSA", -* @ref gost_3410.h "GOST 34.10-2001", @ref sm2.h "SM2", @ref xmss.h "XMSS" -* <dt>Key Agreement<dd> -* @ref dh.h "DH", @ref ecdh.h "ECDH" -* <dt>Compression<dd> -* @ref bzip2.h "bzip2", @ref lzma.h "lzma", @ref zlib.h "zlib" -* <dt>TLS<dd> -* TLS::Client, TLS::Server, TLS::Policy, TLS::Protocol_Version, TLS::Callbacks, TLS::Ciphersuite, -* TLS::Session, TLS::Session_Manager, Credentials_Manager -* <dt>X.509<dd> -* X509_Certificate, X509_CRL, X509_CA, Certificate_Extension, PKCS10_Request, X509_Cert_Options, -* Certificate_Store, Certificate_Store_In_SQL, Certificate_Store_In_SQLite -* </dl> -*/ - -using std::uint8_t; -using std::uint16_t; -using std::uint32_t; -using std::uint64_t; -using std::int32_t; -using std::int64_t; -using std::size_t; - -/* -* These typedefs are no longer used within the library headers -* or code. They are kept only for compatability with software -* written against older versions. -*/ -using byte = std::uint8_t; -using u16bit = std::uint16_t; -using u32bit = std::uint32_t; -using u64bit = std::uint64_t; -using s32bit = std::int32_t; - -#if (BOTAN_MP_WORD_BITS == 32) - typedef uint32_t word; -#elif (BOTAN_MP_WORD_BITS == 64) - typedef uint64_t word; -#else - #error BOTAN_MP_WORD_BITS must be 32 or 64 -#endif - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/utils/version.cpp b/src/libs/3rdparty/botan/src/lib/utils/version.cpp deleted file mode 100644 index ccf83bf6cb..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/version.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* -* Version Information -* (C) 1999-2013,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/version.h> -#include <sstream> - -namespace Botan { - -/* - These are intentionally compiled rather than inlined, so an - application running against a shared library can test the true - version they are running against. -*/ - -#define QUOTE(name) #name -#define STR(macro) QUOTE(macro) - -const char* short_version_cstr() - { - return STR(BOTAN_VERSION_MAJOR) "." - STR(BOTAN_VERSION_MINOR) "." - STR(BOTAN_VERSION_PATCH); - } - -const char* version_cstr() - { - - /* - It is intentional that this string is a compile-time constant; - it makes it much easier to find in binaries. - */ - - return "Botan " STR(BOTAN_VERSION_MAJOR) "." - STR(BOTAN_VERSION_MINOR) "." - STR(BOTAN_VERSION_PATCH) " (" -#if defined(BOTAN_UNSAFE_FUZZER_MODE) - "UNSAFE FUZZER MODE BUILD " -#endif - BOTAN_VERSION_RELEASE_TYPE -#if (BOTAN_VERSION_DATESTAMP != 0) - ", dated " STR(BOTAN_VERSION_DATESTAMP) -#endif - ", revision " BOTAN_VERSION_VC_REVISION - ", distribution " BOTAN_DISTRIBUTION_INFO ")"; - } - -#undef STR -#undef QUOTE - -/* -* Return the version as a string -*/ -std::string version_string() - { - return std::string(version_cstr()); - } - -std::string short_version_string() - { - return std::string(short_version_cstr()); - } - -uint32_t version_datestamp() { return BOTAN_VERSION_DATESTAMP; } - -/* -* Return parts of the version as integers -*/ -uint32_t version_major() { return BOTAN_VERSION_MAJOR; } -uint32_t version_minor() { return BOTAN_VERSION_MINOR; } -uint32_t version_patch() { return BOTAN_VERSION_PATCH; } - -std::string runtime_version_check(uint32_t major, - uint32_t minor, - uint32_t patch) - { - if(major != version_major() || minor != version_minor() || patch != version_patch()) - { - std::ostringstream oss; - oss << "Warning: linked version (" << short_version_string() << ")" - << " does not match version built against " - << "(" << major << '.' << minor << '.' << patch << ")\n"; - return oss.str(); - } - - return ""; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/utils/version.h b/src/libs/3rdparty/botan/src/lib/utils/version.h deleted file mode 100644 index fe59de625c..0000000000 --- a/src/libs/3rdparty/botan/src/lib/utils/version.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -* Version Information -* (C) 1999-2011,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_VERSION_H_ -#define BOTAN_VERSION_H_ - -#include <botan/types.h> -#include <string> - -namespace Botan { - -/* -* Get information describing the version -*/ - -/** -* Get a human-readable string identifying the version of Botan. -* No particular format should be assumed. -* @return version string -*/ -BOTAN_PUBLIC_API(2,0) std::string version_string(); - -/** -* Same as version_string() except returning a pointer to a statically -* allocated string. -* @return version string -*/ -BOTAN_PUBLIC_API(2,0) const char* version_cstr(); - -/** -* Return a version string of the form "MAJOR.MINOR.PATCH" where -* each of the values is an integer. -*/ -BOTAN_PUBLIC_API(2,4) std::string short_version_string(); - -/** -* Same as version_short_string except returning a pointer to the string. -*/ -BOTAN_PUBLIC_API(2,4) const char* short_version_cstr(); - -/** -* Return the date this version of botan was released, in an integer of -* the form YYYYMMDD. For instance a version released on May 21, 2013 -* would return the integer 20130521. If the currently running version -* is not an official release, this function will return 0 instead. -* -* @return release date, or zero if unreleased -*/ -BOTAN_PUBLIC_API(2,0) uint32_t version_datestamp(); - -/** -* Get the major version number. -* @return major version number -*/ -BOTAN_PUBLIC_API(2,0) uint32_t version_major(); - -/** -* Get the minor version number. -* @return minor version number -*/ -BOTAN_PUBLIC_API(2,0) uint32_t version_minor(); - -/** -* Get the patch number. -* @return patch number -*/ -BOTAN_PUBLIC_API(2,0) uint32_t version_patch(); - -/** -* Usable for checking that the DLL version loaded at runtime exactly -* matches the compile-time version. Call using BOTAN_VERSION_* macro -* values. Returns the empty string if an exact match, otherwise an -* appropriate message. Added with 1.11.26. -*/ -BOTAN_PUBLIC_API(2,0) std::string -runtime_version_check(uint32_t major, - uint32_t minor, - uint32_t patch); - -/* -* Macros for compile-time version checks -*/ -#define BOTAN_VERSION_CODE_FOR(a,b,c) ((a << 16) | (b << 8) | (c)) - -/** -* Compare using BOTAN_VERSION_CODE_FOR, as in -* # if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,8,0) -* # error "Botan version too old" -* # endif -*/ -#define BOTAN_VERSION_CODE BOTAN_VERSION_CODE_FOR(BOTAN_VERSION_MAJOR, \ - BOTAN_VERSION_MINOR, \ - BOTAN_VERSION_PATCH) - -} - -#endif |