diff options
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/math/bigint/big_code.cpp')
-rw-r--r-- | src/libs/3rdparty/botan/src/lib/math/bigint/big_code.cpp | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/math/bigint/big_code.cpp b/src/libs/3rdparty/botan/src/lib/math/bigint/big_code.cpp deleted file mode 100644 index 8fd528a146..0000000000 --- a/src/libs/3rdparty/botan/src/lib/math/bigint/big_code.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/* -* BigInt Encoding/Decoding -* (C) 1999-2010,2012 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/bigint.h> -#include <botan/divide.h> -#include <botan/charset.h> -#include <botan/hex.h> - -namespace Botan { - -std::string BigInt::to_dec_string() const - { - BigInt copy = *this; - copy.set_sign(Positive); - - BigInt remainder; - std::vector<uint8_t> digits; - - while(copy > 0) - { - divide(copy, 10, copy, remainder); - digits.push_back(static_cast<uint8_t>(remainder.word_at(0))); - } - - std::string s; - - for(auto i = digits.rbegin(); i != digits.rend(); ++i) - { - s.push_back(Charset::digit2char(*i)); - } - - if(s.empty()) - s += "0"; - - return s; - } - -std::string BigInt::to_hex_string() const - { - const std::vector<uint8_t> bits = BigInt::encode(*this); - if(bits.empty()) - return "00"; - else - return hex_encode(bits); - } - -/* -* Encode a BigInt -*/ -void BigInt::encode(uint8_t output[], const BigInt& n, Base base) - { - if(base == Binary) - { - n.binary_encode(output); - } - else if(base == Hexadecimal) - { - secure_vector<uint8_t> binary(n.encoded_size(Binary)); - n.binary_encode(binary.data()); - - hex_encode(cast_uint8_ptr_to_char(output), - binary.data(), binary.size()); - } - else if(base == Decimal) - { - BigInt copy = n; - BigInt remainder; - copy.set_sign(Positive); - const size_t output_size = n.encoded_size(Decimal); - for(size_t j = 0; j != output_size; ++j) - { - divide(copy, 10, copy, remainder); - output[output_size - 1 - j] = - Charset::digit2char(static_cast<uint8_t>(remainder.word_at(0))); - if(copy.is_zero()) - break; - } - } - else - throw Invalid_Argument("Unknown BigInt encoding method"); - } - -/* -* Encode a BigInt -*/ -std::vector<uint8_t> BigInt::encode(const BigInt& n, Base base) - { - if(base == Binary) - return BigInt::encode(n); - - std::vector<uint8_t> output(n.encoded_size(base)); - encode(output.data(), n, base); - for(size_t j = 0; j != output.size(); ++j) - if(output[j] == 0) - output[j] = '0'; - - return output; - } - -/* -* Encode a BigInt -*/ -secure_vector<uint8_t> BigInt::encode_locked(const BigInt& n, Base base) - { - if(base == Binary) - return BigInt::encode_locked(n); - - secure_vector<uint8_t> output(n.encoded_size(base)); - encode(output.data(), n, base); - for(size_t j = 0; j != output.size(); ++j) - if(output[j] == 0) - output[j] = '0'; - - return output; - } - -/* -* Encode a BigInt, with leading 0s if needed -*/ -secure_vector<uint8_t> BigInt::encode_1363(const BigInt& n, size_t bytes) - { - secure_vector<uint8_t> output(bytes); - BigInt::encode_1363(output.data(), output.size(), n); - return output; - } - -//static -void BigInt::encode_1363(uint8_t output[], size_t bytes, const BigInt& n) - { - const size_t n_bytes = n.bytes(); - if(n_bytes > bytes) - throw Encoding_Error("encode_1363: n is too large to encode properly"); - - const size_t leading_0s = bytes - n_bytes; - encode(&output[leading_0s], n, Binary); - } - -/* -* Encode two BigInt, with leading 0s if needed, and concatenate -*/ -secure_vector<uint8_t> BigInt::encode_fixed_length_int_pair(const BigInt& n1, const BigInt& n2, size_t bytes) - { - secure_vector<uint8_t> output(2 * bytes); - BigInt::encode_1363(output.data(), bytes, n1); - BigInt::encode_1363(output.data() + bytes, bytes, n2); - return output; - } - -/* -* Decode a BigInt -*/ -BigInt BigInt::decode(const uint8_t buf[], size_t length, Base base) - { - BigInt r; - if(base == Binary) - r.binary_decode(buf, length); - else if(base == Hexadecimal) - { - secure_vector<uint8_t> binary; - - if(length % 2) - { - // Handle lack of leading 0 - const char buf0_with_leading_0[2] = - { '0', static_cast<char>(buf[0]) }; - - binary = hex_decode_locked(buf0_with_leading_0, 2); - - binary += hex_decode_locked(cast_uint8_ptr_to_char(&buf[1]), - length - 1, - false); - } - else - binary = hex_decode_locked(cast_uint8_ptr_to_char(buf), - length, false); - - r.binary_decode(binary.data(), binary.size()); - } - else if(base == Decimal) - { - for(size_t i = 0; i != length; ++i) - { - if(Charset::is_space(buf[i])) - continue; - - if(!Charset::is_digit(buf[i])) - throw Invalid_Argument("BigInt::decode: " - "Invalid character in decimal input"); - - const uint8_t x = Charset::char2digit(buf[i]); - - if(x >= 10) - throw Invalid_Argument("BigInt: Invalid decimal string"); - - r *= 10; - r += x; - } - } - else - throw Invalid_Argument("Unknown BigInt decoding method"); - return r; - } - -} |