diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/block/aes/aes.cpp | 4 | ||||
-rw-r--r-- | src/lib/block/noekeon/noekeon_simd/noekeon_simd.cpp | 24 | ||||
-rw-r--r-- | src/lib/block/serpent/serpent_simd/serpent_simd.cpp | 8 | ||||
-rw-r--r-- | src/lib/block/threefish/threefish_avx2/info.txt | 7 | ||||
-rw-r--r-- | src/lib/ffi/ffi.cpp | 2 | ||||
-rw-r--r-- | src/lib/utils/os_utils.cpp | 9 | ||||
-rw-r--r-- | src/lib/utils/simd/simd_32.h | 11 | ||||
-rw-r--r-- | src/lib/x509/x509path.cpp | 8 |
8 files changed, 42 insertions, 31 deletions
diff --git a/src/lib/block/aes/aes.cpp b/src/lib/block/aes/aes.cpp index 6b9d56665..21228e0c1 100644 --- a/src/lib/block/aes/aes.cpp +++ b/src/lib/block/aes/aes.cpp @@ -107,7 +107,7 @@ inline uint8_t xtime14(uint8_t s) { return xtime8(s) ^ xtime4(s) ^ xtime(s); } const std::vector<uint32_t>& AES_TE() { - auto compute_TE = []() { + auto compute_TE = []() -> std::vector<uint32_t> { std::vector<uint32_t> TE(1024); for(size_t i = 0; i != 256; ++i) { @@ -128,7 +128,7 @@ const std::vector<uint32_t>& AES_TE() const std::vector<uint32_t>& AES_TD() { - auto compute_TD = []() { + auto compute_TD = []() -> std::vector<uint32_t> { std::vector<uint32_t> TD(1024); for(size_t i = 0; i != 256; ++i) { diff --git a/src/lib/block/noekeon/noekeon_simd/noekeon_simd.cpp b/src/lib/block/noekeon/noekeon_simd/noekeon_simd.cpp index 03048ec9c..a77ba7b8c 100644 --- a/src/lib/block/noekeon/noekeon_simd/noekeon_simd.cpp +++ b/src/lib/block/noekeon/noekeon_simd/noekeon_simd.cpp @@ -65,10 +65,10 @@ namespace Botan { */ void Noekeon::simd_encrypt_4(const uint8_t in[], uint8_t out[]) const { - const SIMD_32 K0 = SIMD_32(m_EK[0]); - const SIMD_32 K1 = SIMD_32(m_EK[1]); - const SIMD_32 K2 = SIMD_32(m_EK[2]); - const SIMD_32 K3 = SIMD_32(m_EK[3]); + const SIMD_32 K0 = SIMD_32::splat(m_EK[0]); + const SIMD_32 K1 = SIMD_32::splat(m_EK[1]); + const SIMD_32 K2 = SIMD_32::splat(m_EK[2]); + const SIMD_32 K3 = SIMD_32::splat(m_EK[3]); SIMD_32 A0 = SIMD_32::load_be(in ); SIMD_32 A1 = SIMD_32::load_be(in + 16); @@ -79,7 +79,7 @@ void Noekeon::simd_encrypt_4(const uint8_t in[], uint8_t out[]) const for(size_t i = 0; i != 16; ++i) { - A0 ^= SIMD_32(RC[i]); + A0 ^= SIMD_32::splat(RC[i]); NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); @@ -94,7 +94,7 @@ void Noekeon::simd_encrypt_4(const uint8_t in[], uint8_t out[]) const A3.rotate_right(2); } - A0 ^= SIMD_32(RC[16]); + A0 ^= SIMD_32::splat(RC[16]); NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); SIMD_32::transpose(A0, A1, A2, A3); @@ -110,10 +110,10 @@ void Noekeon::simd_encrypt_4(const uint8_t in[], uint8_t out[]) const */ void Noekeon::simd_decrypt_4(const uint8_t in[], uint8_t out[]) const { - const SIMD_32 K0 = SIMD_32(m_DK[0]); - const SIMD_32 K1 = SIMD_32(m_DK[1]); - const SIMD_32 K2 = SIMD_32(m_DK[2]); - const SIMD_32 K3 = SIMD_32(m_DK[3]); + const SIMD_32 K0 = SIMD_32::splat(m_DK[0]); + const SIMD_32 K1 = SIMD_32::splat(m_DK[1]); + const SIMD_32 K2 = SIMD_32::splat(m_DK[2]); + const SIMD_32 K3 = SIMD_32::splat(m_DK[3]); SIMD_32 A0 = SIMD_32::load_be(in ); SIMD_32 A1 = SIMD_32::load_be(in + 16); @@ -126,7 +126,7 @@ void Noekeon::simd_decrypt_4(const uint8_t in[], uint8_t out[]) const { NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); - A0 ^= SIMD_32(RC[16-i]); + A0 ^= SIMD_32::splat(RC[16-i]); A1.rotate_left(1); A2.rotate_left(5); @@ -140,7 +140,7 @@ void Noekeon::simd_decrypt_4(const uint8_t in[], uint8_t out[]) const } NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); - A0 ^= SIMD_32(RC[0]); + A0 ^= SIMD_32::splat(RC[0]); SIMD_32::transpose(A0, A1, A2, A3); diff --git a/src/lib/block/serpent/serpent_simd/serpent_simd.cpp b/src/lib/block/serpent/serpent_simd/serpent_simd.cpp index f69d1f6f5..59ef46a6c 100644 --- a/src/lib/block/serpent/serpent_simd/serpent_simd.cpp +++ b/src/lib/block/serpent/serpent_simd/serpent_simd.cpp @@ -15,10 +15,10 @@ namespace { #define key_xor(round, B0, B1, B2, B3) \ do { \ - B0 ^= SIMD_32(m_round_key[4*round ]); \ - B1 ^= SIMD_32(m_round_key[4*round+1]); \ - B2 ^= SIMD_32(m_round_key[4*round+2]); \ - B3 ^= SIMD_32(m_round_key[4*round+3]); \ + B0 ^= SIMD_32::splat(m_round_key[4*round ]); \ + B1 ^= SIMD_32::splat(m_round_key[4*round+1]); \ + B2 ^= SIMD_32::splat(m_round_key[4*round+2]); \ + B3 ^= SIMD_32::splat(m_round_key[4*round+3]); \ } while(0); /* diff --git a/src/lib/block/threefish/threefish_avx2/info.txt b/src/lib/block/threefish/threefish_avx2/info.txt index 1612ce390..8e7db6455 100644 --- a/src/lib/block/threefish/threefish_avx2/info.txt +++ b/src/lib/block/threefish/threefish_avx2/info.txt @@ -1,3 +1,10 @@ define THREEFISH_512_AVX2 20160903 need_isa avx2 + +<cc> +gcc +clang +msvc +icc +</cc> diff --git a/src/lib/ffi/ffi.cpp b/src/lib/ffi/ffi.cpp index 5c4cba4e7..80d7ec611 100644 --- a/src/lib/ffi/ffi.cpp +++ b/src/lib/ffi/ffi.cpp @@ -168,7 +168,7 @@ inline int write_str_output(char out[], size_t* out_len, const std::string& str) return write_str_output(reinterpret_cast<uint8_t*>(out), out_len, str); } -#define BOTAN_FFI_DO(T, obj, param, block) apply_fn(obj, BOTAN_CURRENT_FUNCTION, [=](T& param) { do { block } while(0); return 0; }) +#define BOTAN_FFI_DO(T, obj, param, block) apply_fn(obj, BOTAN_CURRENT_FUNCTION, [=](T& param) -> int { do { block } while(0); return 0; }) } diff --git a/src/lib/utils/os_utils.cpp b/src/lib/utils/os_utils.cpp index 87cbcfd0f..c6d99237c 100644 --- a/src/lib/utils/os_utils.cpp +++ b/src/lib/utils/os_utils.cpp @@ -182,6 +182,7 @@ size_t get_memory_locking_limit() catch(std::exception&) { /* ignore it */ } } +#if defined(RLIMIT_MEMLOCK) if(mlock_requested > 0) { struct ::rlimit limits; @@ -197,6 +198,14 @@ size_t get_memory_locking_limit() return std::min<size_t>(limits.rlim_cur, mlock_requested * 1024); } +#else + /* + * If RLIMIT_MEMLOCK is not defined, likely the OS does not support + * unprivileged mlock calls. + */ + return 0; +#endif + #elif defined(BOTAN_TARGET_OS_HAS_VIRTUAL_LOCK) && defined(BOTAN_BUILD_COMPILER_IS_MSVC) SIZE_T working_min = 0, working_max = 0; DWORD working_flags = 0; diff --git a/src/lib/utils/simd/simd_32.h b/src/lib/utils/simd/simd_32.h index 591e0e9c9..2308da652 100644 --- a/src/lib/utils/simd/simd_32.h +++ b/src/lib/utils/simd/simd_32.h @@ -74,17 +74,12 @@ class SIMD_4x32 #endif } - explicit SIMD_4x32(uint32_t B) + static SIMD_4x32 splat(uint32_t B) { #if defined(BOTAN_SIMD_USE_SSE2) - m_reg = _mm_set1_epi32(B); -#elif defined(BOTAN_SIMD_USE_ALTIVEC) - m_reg = (__vector unsigned int){B, B, B, B}; + return SIMD_4x32(_mm_set1_epi32(B)); #else - m_reg[0] = B; - m_reg[1] = B; - m_reg[2] = B; - m_reg[3] = B; + return SIMD_4x32(B, B, B, B); #endif } diff --git a/src/lib/x509/x509path.cpp b/src/lib/x509/x509path.cpp index 2fa1adbd6..c70ecae7a 100644 --- a/src/lib/x509/x509path.cpp +++ b/src/lib/x509/x509path.cpp @@ -267,14 +267,14 @@ PKIX::check_ocsp_online(const std::vector<std::shared_ptr<const X509_Certificate if(subject->ocsp_responder() == "") { - ocsp_response_futures.emplace_back(std::async(std::launch::deferred, [&]{ + ocsp_response_futures.emplace_back(std::async(std::launch::deferred, [&]() -> std::shared_ptr<const OCSP::Response> { throw Exception("No OCSP responder URL set for this certificate"); return std::shared_ptr<const OCSP::Response>(); })); } else { - ocsp_response_futures.emplace_back(std::async(std::launch::async, [&]{ + ocsp_response_futures.emplace_back(std::async(std::launch::async, [&]() -> std::shared_ptr<const OCSP::Response> { OCSP::Request req(*issuer, *subject); auto http = HTTP::POST_sync(subject->ocsp_responder(), @@ -356,14 +356,14 @@ PKIX::check_crl_online(const std::vector<std::shared_ptr<const X509_Certificate> else if(cert_path[i]->crl_distribution_point() == "") { // Avoid creating a thread for this case - future_crls.emplace_back(std::async(std::launch::deferred, [&]{ + future_crls.emplace_back(std::async(std::launch::deferred, [&]() -> std::shared_ptr<const X509_CRL> { throw Exception("No CRL distribution point for this certificate"); return std::shared_ptr<const X509_CRL>(); })); } else { - future_crls.emplace_back(std::async(std::launch::async, [&]() { + future_crls.emplace_back(std::async(std::launch::async, [&]() -> std::shared_ptr<const X509_CRL> { auto http = HTTP::GET_sync(cert_path[i]->crl_distribution_point()); http.throw_unless_ok(); // check the mime type? |