aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp')
-rw-r--r--src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp222
1 files changed, 0 insertions, 222 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp b/src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp
deleted file mode 100644
index 6fc007bf38..0000000000
--- a/src/libs/3rdparty/botan/src/lib/pbkdf/pbkdf2/pbkdf2.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-* PBKDF2
-* (C) 1999-2007 Jack Lloyd
-* (C) 2018 Ribose Inc
-*
-* Botan is released under the Simplified BSD License (see license.txt)
-*/
-
-#include <botan/pbkdf2.h>
-#include <botan/exceptn.h>
-#include <botan/internal/rounding.h>
-#include <botan/internal/timer.h>
-
-namespace Botan {
-
-namespace {
-
-void pbkdf2_set_key(MessageAuthenticationCode& prf,
- const char* password,
- size_t password_len)
- {
- try
- {
- prf.set_key(cast_char_ptr_to_uint8(password), password_len);
- }
- catch(Invalid_Key_Length&)
- {
- throw Exception("PBKDF2 cannot accept passphrase of the given size");
- }
- }
-
-}
-
-size_t
-pbkdf2(MessageAuthenticationCode& prf,
- uint8_t out[],
- size_t out_len,
- const std::string& password,
- const uint8_t salt[], size_t salt_len,
- size_t iterations,
- std::chrono::milliseconds msec)
- {
- if(iterations == 0)
- {
- iterations = PBKDF2(prf, out_len, msec).iterations();
- }
-
- PBKDF2 pbkdf2(prf, iterations);
-
- pbkdf2.derive_key(out, out_len,
- password.c_str(), password.size(),
- salt, salt_len);
-
- return iterations;
- }
-
-namespace {
-
-size_t tune_pbkdf2(MessageAuthenticationCode& prf,
- size_t output_length,
- uint32_t msec)
- {
- const size_t prf_sz = prf.output_length();
- BOTAN_ASSERT_NOMSG(prf_sz > 0);
- secure_vector<uint8_t> U(prf_sz);
-
- const size_t trial_iterations = 10000;
-
- // Short output ensures we only need a single PBKDF2 block
-
- Timer timer("PBKDF2");
-
- const std::chrono::milliseconds tune_msec(30);
-
- prf.set_key(nullptr, 0);
-
- timer.run_until_elapsed(tune_msec, [&]() {
- uint8_t out[16] = { 0 };
- uint8_t salt[16] = { 0 };
- pbkdf2(prf, out, sizeof(out), salt, sizeof(salt), trial_iterations);
- });
-
- if(timer.events() == 0)
- return trial_iterations;
-
- const uint64_t duration_nsec = timer.value() / timer.events();
-
- const uint64_t desired_nsec = static_cast<uint64_t>(msec) * 1000000;
-
- if(duration_nsec > desired_nsec)
- return trial_iterations;
-
- const size_t blocks_needed = (output_length + prf_sz - 1) / prf_sz;
-
- const size_t multiplier = (desired_nsec / duration_nsec / blocks_needed);
-
- if(multiplier == 0)
- return trial_iterations;
- else
- return trial_iterations * multiplier;
- }
-
-}
-
-void pbkdf2(MessageAuthenticationCode& prf,
- uint8_t out[],
- size_t out_len,
- const uint8_t salt[],
- size_t salt_len,
- size_t iterations)
- {
- clear_mem(out, out_len);
-
- if(out_len == 0)
- return;
-
- const size_t prf_sz = prf.output_length();
- BOTAN_ASSERT_NOMSG(prf_sz > 0);
-
- secure_vector<uint8_t> U(prf_sz);
-
- uint32_t counter = 1;
- while(out_len)
- {
- const size_t prf_output = std::min<size_t>(prf_sz, out_len);
-
- prf.update(salt, salt_len);
- prf.update_be(counter++);
- prf.final(U.data());
-
- xor_buf(out, U.data(), prf_output);
-
- for(size_t i = 1; i != iterations; ++i)
- {
- prf.update(U);
- prf.final(U.data());
- xor_buf(out, U.data(), prf_output);
- }
-
- out_len -= prf_output;
- out += prf_output;
- }
- }
-
-// PBKDF interface
-size_t
-PKCS5_PBKDF2::pbkdf(uint8_t key[], size_t key_len,
- const std::string& password,
- const uint8_t salt[], size_t salt_len,
- size_t iterations,
- std::chrono::milliseconds msec) const
- {
- if(iterations == 0)
- {
- iterations = PBKDF2(*m_mac, key_len, msec).iterations();
- }
-
- PBKDF2 pbkdf2(*m_mac, iterations);
-
- pbkdf2.derive_key(key, key_len,
- password.c_str(), password.size(),
- salt, salt_len);
-
- return iterations;
- }
-
-std::string PKCS5_PBKDF2::name() const
- {
- return "PBKDF2(" + m_mac->name() + ")";
- }
-
-PBKDF* PKCS5_PBKDF2::clone() const
- {
- return new PKCS5_PBKDF2(m_mac->clone());
- }
-
-// PasswordHash interface
-
-PBKDF2::PBKDF2(const MessageAuthenticationCode& prf, size_t olen, std::chrono::milliseconds msec) :
- m_prf(prf.clone()),
- m_iterations(tune_pbkdf2(*m_prf, olen, static_cast<uint32_t>(msec.count())))
- {}
-
-std::string PBKDF2::to_string() const
- {
- return "PBKDF2(" + m_prf->name() + "," + std::to_string(m_iterations) + ")";
- }
-
-void PBKDF2::derive_key(uint8_t out[], size_t out_len,
- const char* password, const size_t password_len,
- const uint8_t salt[], size_t salt_len) const
- {
- pbkdf2_set_key(*m_prf, password, password_len);
- pbkdf2(*m_prf, out, out_len, salt, salt_len, m_iterations);
- }
-
-std::string PBKDF2_Family::name() const
- {
- return "PBKDF2(" + m_prf->name() + ")";
- }
-
-std::unique_ptr<PasswordHash> PBKDF2_Family::tune(size_t output_len, std::chrono::milliseconds msec, size_t) const
- {
- return std::unique_ptr<PasswordHash>(new PBKDF2(*m_prf, output_len, msec));
- }
-
-std::unique_ptr<PasswordHash> PBKDF2_Family::default_params() const
- {
- return std::unique_ptr<PasswordHash>(new PBKDF2(*m_prf, 150000));
- }
-
-std::unique_ptr<PasswordHash> PBKDF2_Family::from_params(size_t iter, size_t, size_t) const
- {
- return std::unique_ptr<PasswordHash>(new PBKDF2(*m_prf, iter));
- }
-
-std::unique_ptr<PasswordHash> PBKDF2_Family::from_iterations(size_t iter) const
- {
- return std::unique_ptr<PasswordHash>(new PBKDF2(*m_prf, iter));
- }
-
-}