diff options
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/base64/base64.cpp | 245 | ||||
-rw-r--r-- | src/codec/base64/base64.h | 127 | ||||
-rw-r--r-- | src/codec/base64/info.txt | 1 | ||||
-rw-r--r-- | src/codec/hex/hex.cpp | 204 | ||||
-rw-r--r-- | src/codec/hex/hex.h | 148 | ||||
-rw-r--r-- | src/codec/hex/info.txt | 1 | ||||
-rw-r--r-- | src/codec/openpgp/info.txt | 8 | ||||
-rw-r--r-- | src/codec/openpgp/openpgp.cpp | 196 | ||||
-rw-r--r-- | src/codec/openpgp/openpgp.h | 61 | ||||
-rw-r--r-- | src/codec/pem/info.txt | 6 | ||||
-rw-r--r-- | src/codec/pem/pem.cpp | 147 | ||||
-rw-r--r-- | src/codec/pem/pem.h | 90 |
12 files changed, 0 insertions, 1234 deletions
diff --git a/src/codec/base64/base64.cpp b/src/codec/base64/base64.cpp deleted file mode 100644 index b66478d2b..000000000 --- a/src/codec/base64/base64.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* -* Base64 Encoding and Decoding -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/base64.h> -#include <botan/mem_ops.h> -#include <botan/internal/rounding.h> -#include <stdexcept> - -namespace Botan { - -namespace { - -static const byte BIN_TO_BASE64[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' -}; - -void do_base64_encode(char out[4], const byte in[3]) - { - out[0] = BIN_TO_BASE64[((in[0] & 0xFC) >> 2)]; - out[1] = BIN_TO_BASE64[((in[0] & 0x03) << 4) | (in[1] >> 4)]; - out[2] = BIN_TO_BASE64[((in[1] & 0x0F) << 2) | (in[2] >> 6)]; - out[3] = BIN_TO_BASE64[((in[2] & 0x3F) )]; - } - -} - -size_t base64_encode(char out[], - const byte in[], - size_t input_length, - size_t& input_consumed, - bool final_inputs) - { - input_consumed = 0; - - size_t input_remaining = input_length; - size_t output_produced = 0; - - while(input_remaining >= 3) - { - do_base64_encode(out + output_produced, in + input_consumed); - - input_consumed += 3; - output_produced += 4; - input_remaining -= 3; - } - - if(final_inputs && input_remaining) - { - byte remainder[3] = { 0 }; - for(size_t i = 0; i != input_remaining; ++i) - remainder[i] = in[input_consumed + i]; - - do_base64_encode(out + output_produced, remainder); - - size_t empty_bits = 8 * (3 - input_remaining); - size_t index = output_produced + 4 - 1; - while(empty_bits >= 8) - { - out[index--] = '='; - empty_bits -= 6; - } - - input_consumed += input_remaining; - output_produced += 4; - } - - return output_produced; - } - -std::string base64_encode(const byte input[], - size_t input_length) - { - std::string output((round_up<size_t>(input_length, 3) / 3) * 4, 0); - - size_t consumed = 0; - size_t produced = base64_encode(&output[0], - input, input_length, - consumed, true); - - BOTAN_ASSERT_EQUAL(consumed, input_length, "Consumed the entire input"); - BOTAN_ASSERT_EQUAL(produced, output.size(), "Produced expected size"); - - return output; - } - -size_t base64_decode(byte output[], - const char input[], - size_t input_length, - size_t& input_consumed, - bool final_inputs, - bool ignore_ws) - { - /* - * Base64 Decoder Lookup Table - * Warning: assumes ASCII encodings - */ - static const byte BASE64_TO_BIN[256] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x80, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0xFF, 0x3F, 0x34, 0x35, - 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, - 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, - 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, - 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1A, 0x1B, 0x1C, - 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, - 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - - byte* out_ptr = output; - byte decode_buf[4]; - size_t decode_buf_pos = 0; - size_t final_truncate = 0; - - clear_mem(output, input_length * 3 / 4); - - for(size_t i = 0; i != input_length; ++i) - { - const byte bin = BASE64_TO_BIN[static_cast<byte>(input[i])]; - - if(bin <= 0x3F) - { - decode_buf[decode_buf_pos] = bin; - decode_buf_pos += 1; - } - else if(!(bin == 0x81 || (bin == 0x80 && ignore_ws))) - { - std::string bad_char(1, input[i]); - if(bad_char == "\t") - bad_char = "\\t"; - else if(bad_char == "\n") - bad_char = "\\n"; - else if(bad_char == "\r") - bad_char = "\\r"; - - throw std::invalid_argument( - std::string("base64_decode: invalid base64 character '") + - bad_char + "'"); - } - - /* - * 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 i = decode_buf_pos; i != 4; ++i) - decode_buf[i] = 0; - final_truncate = (4 - decode_buf_pos); - decode_buf_pos = 4; - } - } - - if(decode_buf_pos == 4) - { - out_ptr[0] = (decode_buf[0] << 2) | (decode_buf[1] >> 4); - out_ptr[1] = (decode_buf[1] << 4) | (decode_buf[2] >> 2); - out_ptr[2] = (decode_buf[2] << 6) | decode_buf[3]; - - out_ptr += 3; - decode_buf_pos = 0; - input_consumed = i+1; - } - } - - while(input_consumed < input_length && - BASE64_TO_BIN[static_cast<byte>(input[input_consumed])] == 0x80) - { - ++input_consumed; - } - - size_t written = (out_ptr - output) - final_truncate; - - return written; - } - -size_t base64_decode(byte output[], - const char input[], - size_t input_length, - bool ignore_ws) - { - size_t consumed = 0; - size_t written = base64_decode(output, input, input_length, - consumed, true, ignore_ws); - - if(consumed != input_length) - throw std::invalid_argument("base64_decode: input did not have full bytes"); - - return written; - } - -size_t base64_decode(byte output[], - const std::string& input, - bool ignore_ws) - { - return base64_decode(output, &input[0], input.length(), ignore_ws); - } - -secure_vector<byte> base64_decode(const char input[], - size_t input_length, - bool ignore_ws) - { - secure_vector<byte> bin((round_up<size_t>(input_length, 4) * 3) / 4); - - size_t written = base64_decode(&bin[0], - input, - input_length, - ignore_ws); - - bin.resize(written); - return bin; - } - -secure_vector<byte> base64_decode(const std::string& input, - bool ignore_ws) - { - return base64_decode(&input[0], input.size(), ignore_ws); - } - - -} diff --git a/src/codec/base64/base64.h b/src/codec/base64/base64.h deleted file mode 100644 index 9ea4143b7..000000000 --- a/src/codec/base64/base64.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -* Base64 Encoding and Decoding -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_BASE64_CODEC_H__ -#define BOTAN_BASE64_CODEC_H__ - -#include <botan/secmem.h> -#include <string> - -namespace Botan { - -/** -* Perform base64 encoding -* @param output an array of at least input_length*4/3 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 -*/ -size_t BOTAN_DLL base64_encode(char output[], - const byte input[], - size_t input_length, - size_t& input_consumed, - bool final_inputs); - -/** -* Perform base64 encoding -* @param input some input -* @param input_length length of input in bytes -* @return base64adecimal representation of input -*/ -std::string BOTAN_DLL base64_encode(const byte input[], - size_t input_length); - -/** -* Perform base64 encoding -* @param input some input -* @return base64adecimal representation of input -*/ -template<typename Alloc> -std::string base64_encode(const std::vector<byte, Alloc>& input) - { - return base64_encode(&input[0], input.size()); - } - -/** -* Perform base64 decoding -* @param output an array of at least input_length*3/4 bytes -* @param input some base64 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 -*/ -size_t BOTAN_DLL base64_decode(byte output[], - const char input[], - size_t input_length, - size_t& input_consumed, - bool final_inputs, - bool ignore_ws = true); - -/** -* Perform base64 decoding -* @param output an array of at least input_length*3/4 bytes -* @param input some base64 input -* @param input_length length of input in bytes -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -size_t BOTAN_DLL base64_decode(byte output[], - const char input[], - size_t input_length, - bool ignore_ws = true); - -/** -* Perform base64 decoding -* @param output an array of at least input_length/3*4 bytes -* @param input some base64 input -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -size_t BOTAN_DLL base64_decode(byte output[], - const std::string& input, - bool ignore_ws = true); - -/** -* Perform base64 decoding -* @param input some base64 input -* @param input_length the length of input in bytes -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded base64 output -*/ -secure_vector<byte> BOTAN_DLL base64_decode(const char input[], - size_t input_length, - bool ignore_ws = true); - -/** -* Perform base64 decoding -* @param input some base64 input -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded base64 output -*/ -secure_vector<byte> BOTAN_DLL base64_decode(const std::string& input, - bool ignore_ws = true); - -} - -#endif diff --git a/src/codec/base64/info.txt b/src/codec/base64/info.txt deleted file mode 100644 index cacae6b0c..000000000 --- a/src/codec/base64/info.txt +++ /dev/null @@ -1 +0,0 @@ -define BASE64_CODEC 20131128 diff --git a/src/codec/hex/hex.cpp b/src/codec/hex/hex.cpp deleted file mode 100644 index 104125894..000000000 --- a/src/codec/hex/hex.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* -* Hex Encoding and Decoding -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/hex.h> -#include <botan/mem_ops.h> -#include <stdexcept> - -namespace Botan { - -void hex_encode(char output[], - const byte input[], - size_t input_length, - bool uppercase) - { - static const byte BIN_TO_HEX_UPPER[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F' }; - - static const byte BIN_TO_HEX_LOWER[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f' }; - - const byte* tbl = uppercase ? BIN_TO_HEX_UPPER : BIN_TO_HEX_LOWER; - - for(size_t i = 0; i != input_length; ++i) - { - byte x = input[i]; - output[2*i ] = tbl[(x >> 4) & 0x0F]; - output[2*i+1] = tbl[(x ) & 0x0F]; - } - } - -std::string hex_encode(const byte input[], - size_t input_length, - bool uppercase) - { - std::string output(2 * input_length, 0); - - if(input_length) - hex_encode(&output[0], input, input_length, uppercase); - - return output; - } - -size_t hex_decode(byte output[], - const char input[], - size_t input_length, - size_t& input_consumed, - bool ignore_ws) - { - /* - * Mapping of hex characters to either their binary equivalent - * or to an error code. - * If valid hex (0-9 A-F a-f), the value. - * If whitespace, then 0x80 - * Otherwise 0xFF - * Warning: this table assumes ASCII character encodings - */ - - static const byte HEX_TO_BIN[256] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, - 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, - 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x0B, 0x0C, - 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - - byte* out_ptr = output; - bool top_nibble = true; - - clear_mem(output, input_length / 2); - - for(size_t i = 0; i != input_length; ++i) - { - const byte bin = HEX_TO_BIN[static_cast<byte>(input[i])]; - - if(bin >= 0x10) - { - if(bin == 0x80 && ignore_ws) - continue; - - std::string bad_char(1, input[i]); - if(bad_char == "\t") - bad_char = "\\t"; - else if(bad_char == "\n") - bad_char = "\\n"; - - throw std::invalid_argument( - std::string("hex_decode: invalid hex character '") + - bad_char + "'"); - } - - *out_ptr |= bin << (top_nibble*4); - - top_nibble = !top_nibble; - if(top_nibble) - ++out_ptr; - } - - input_consumed = input_length; - size_t written = (out_ptr - output); - - /* - * We only got half of a byte at the end; zap the half-written - * output and mark it as unread - */ - if(!top_nibble) - { - *out_ptr = 0; - input_consumed -= 1; - } - - return written; - } - -size_t hex_decode(byte output[], - const char input[], - size_t input_length, - bool ignore_ws) - { - size_t consumed = 0; - size_t written = hex_decode(output, input, input_length, - consumed, ignore_ws); - - if(consumed != input_length) - throw std::invalid_argument("hex_decode: input did not have full bytes"); - - return written; - } - -size_t hex_decode(byte output[], - const std::string& input, - bool ignore_ws) - { - return hex_decode(output, &input[0], input.length(), ignore_ws); - } - -secure_vector<byte> hex_decode_locked(const char input[], - size_t input_length, - bool ignore_ws) - { - secure_vector<byte> bin(1 + input_length / 2); - - size_t written = hex_decode(&bin[0], - input, - input_length, - ignore_ws); - - bin.resize(written); - return bin; - } - -secure_vector<byte> hex_decode_locked(const std::string& input, - bool ignore_ws) - { - return hex_decode_locked(&input[0], input.size(), ignore_ws); - } - -std::vector<byte> hex_decode(const char input[], - size_t input_length, - bool ignore_ws) - { - std::vector<byte> bin(1 + input_length / 2); - - size_t written = hex_decode(&bin[0], - input, - input_length, - ignore_ws); - - bin.resize(written); - return bin; - } - -std::vector<byte> hex_decode(const std::string& input, - bool ignore_ws) - { - return hex_decode(&input[0], input.size(), ignore_ws); - } - -} diff --git a/src/codec/hex/hex.h b/src/codec/hex/hex.h deleted file mode 100644 index a64a6c8df..000000000 --- a/src/codec/hex/hex.h +++ /dev/null @@ -1,148 +0,0 @@ -/* -* Hex Encoding and Decoding -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_HEX_CODEC_H__ -#define BOTAN_HEX_CODEC_H__ - -#include <botan/secmem.h> -#include <string> - -namespace Botan { - -/** -* Perform hex encoding -* @param output an array of at least input_length*2 bytes -* @param input is some binary data -* @param input_length length of input in bytes -* @param uppercase should output be upper or lower case? -*/ -void BOTAN_DLL hex_encode(char output[], - const byte input[], - size_t input_length, - bool uppercase = true); - -/** -* Perform hex encoding -* @param input some input -* @param input_length length of input in bytes -* @param uppercase should output be upper or lower case? -* @return hexadecimal representation of input -*/ -std::string BOTAN_DLL hex_encode(const byte input[], - size_t input_length, - bool uppercase = true); - -/** -* Perform hex encoding -* @param input some input -* @param uppercase should output be upper or lower case? -* @return hexadecimal representation of input -*/ -template<typename Alloc> -std::string hex_encode(const std::vector<byte, Alloc>& input, - bool uppercase = true) - { - return hex_encode(&input[0], input.size(), uppercase); - } - -/** -* Perform hex decoding -* @param output an array of at least input_length/2 bytes -* @param input some hex 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 ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -size_t BOTAN_DLL hex_decode(byte output[], - const char input[], - size_t input_length, - size_t& input_consumed, - bool ignore_ws = true); - -/** -* Perform hex decoding -* @param output an array of at least input_length/2 bytes -* @param input some hex input -* @param input_length length of input in bytes -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -size_t BOTAN_DLL hex_decode(byte output[], - const char input[], - size_t input_length, - bool ignore_ws = true); - -/** -* Perform hex decoding -* @param output an array of at least input_length/2 bytes -* @param input some hex input -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return number of bytes written to output -*/ -size_t BOTAN_DLL hex_decode(byte output[], - const std::string& input, - bool ignore_ws = true); - -/** -* Perform hex decoding -* @param input some hex input -* @param input_length the length of input in bytes -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded hex output -*/ -std::vector<byte> BOTAN_DLL -hex_decode(const char input[], - size_t input_length, - bool ignore_ws = true); - -/** -* Perform hex decoding -* @param input some hex input -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded hex output -*/ -std::vector<byte> BOTAN_DLL -hex_decode(const std::string& input, - bool ignore_ws = true); - - -/** -* Perform hex decoding -* @param input some hex input -* @param input_length the length of input in bytes -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded hex output -*/ -secure_vector<byte> BOTAN_DLL -hex_decode_locked(const char input[], - size_t input_length, - bool ignore_ws = true); - -/** -* Perform hex decoding -* @param input some hex input -* @param ignore_ws ignore whitespace on input; if false, throw an - exception if whitespace is encountered -* @return decoded hex output -*/ -secure_vector<byte> BOTAN_DLL -hex_decode_locked(const std::string& input, - bool ignore_ws = true); - -} - -#endif diff --git a/src/codec/hex/info.txt b/src/codec/hex/info.txt deleted file mode 100644 index ead5beffd..000000000 --- a/src/codec/hex/info.txt +++ /dev/null @@ -1 +0,0 @@ -define HEX_CODEC 20131128 diff --git a/src/codec/openpgp/info.txt b/src/codec/openpgp/info.txt deleted file mode 100644 index 72467ee72..000000000 --- a/src/codec/openpgp/info.txt +++ /dev/null @@ -1,8 +0,0 @@ -define OPENPGP_CODEC 20131128 - -load_on auto - -<requires> -crc24 -filters -</requires> diff --git a/src/codec/openpgp/openpgp.cpp b/src/codec/openpgp/openpgp.cpp deleted file mode 100644 index 7bd811a2f..000000000 --- a/src/codec/openpgp/openpgp.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* -* OpenPGP Codec -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/openpgp.h> -#include <botan/filters.h> -#include <botan/basefilt.h> -#include <botan/charset.h> -#include <botan/crc24.h> - -namespace Botan { - -/* -* OpenPGP Base64 encoding -*/ -std::string PGP_encode( - const byte input[], size_t length, - const std::string& label, - const std::map<std::string, std::string>& headers) - { - const std::string PGP_HEADER = "-----BEGIN PGP " + label + "-----\n"; - const std::string PGP_TRAILER = "-----END PGP " + label + "-----\n"; - const size_t PGP_WIDTH = 64; - - std::string pgp_encoded = PGP_HEADER; - - if(headers.find("Version") != headers.end()) - pgp_encoded += "Version: " + headers.find("Version")->second + '\n'; - - std::map<std::string, std::string>::const_iterator i = headers.begin(); - while(i != headers.end()) - { - if(i->first != "Version") - pgp_encoded += i->first + ": " + i->second + '\n'; - ++i; - } - pgp_encoded += '\n'; - - Pipe pipe(new Fork( - new Base64_Encoder(true, PGP_WIDTH), - new Chain(new Hash_Filter(new CRC24), new Base64_Encoder) - ) - ); - - pipe.process_msg(input, length); - - pgp_encoded += pipe.read_all_as_string(0); - pgp_encoded += '=' + pipe.read_all_as_string(1) + '\n'; - pgp_encoded += PGP_TRAILER; - - return pgp_encoded; - } - -/* -* OpenPGP Base64 encoding -*/ -std::string PGP_encode(const byte input[], size_t length, - const std::string& type) - { - std::map<std::string, std::string> empty; - return PGP_encode(input, length, type, empty); - } - -/* -* OpenPGP Base64 decoding -*/ -secure_vector<byte> PGP_decode(DataSource& source, - std::string& label, - std::map<std::string, std::string>& headers) - { - const size_t RANDOM_CHAR_LIMIT = 5; - - const std::string PGP_HEADER1 = "-----BEGIN PGP "; - const std::string PGP_HEADER2 = "-----"; - size_t position = 0; - - while(position != PGP_HEADER1.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PGP: No PGP header found"); - if(b == PGP_HEADER1[position]) - ++position; - else if(position >= RANDOM_CHAR_LIMIT) - throw Decoding_Error("PGP: Malformed PGP header"); - else - position = 0; - } - position = 0; - while(position != PGP_HEADER2.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PGP: No PGP header found"); - if(b == PGP_HEADER2[position]) - ++position; - else if(position) - throw Decoding_Error("PGP: Malformed PGP header"); - - if(position == 0) - label += static_cast<char>(b); - } - - headers.clear(); - bool end_of_headers = false; - while(!end_of_headers) - { - std::string this_header; - byte b = 0; - while(b != '\n') - { - if(!source.read_byte(b)) - throw Decoding_Error("PGP: Bad armor header"); - if(b != '\n') - this_header += static_cast<char>(b); - } - - end_of_headers = true; - for(size_t j = 0; j != this_header.length(); ++j) - if(!Charset::is_space(this_header[j])) - end_of_headers = false; - - if(!end_of_headers) - { - std::string::size_type pos = this_header.find(": "); - if(pos == std::string::npos) - throw Decoding_Error("OpenPGP: Bad headers"); - - std::string key = this_header.substr(0, pos); - std::string value = this_header.substr(pos + 2, std::string::npos); - headers[key] = value; - } - } - - Pipe base64(new Base64_Decoder, - new Fork(nullptr, - new Chain(new Hash_Filter(new CRC24), - new Base64_Encoder) - ) - ); - base64.start_msg(); - - const std::string PGP_TRAILER = "-----END PGP " + label + "-----"; - position = 0; - bool newline_seen = 0; - std::string crc; - while(position != PGP_TRAILER.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PGP: No PGP trailer found"); - if(b == PGP_TRAILER[position]) - ++position; - else if(position) - throw Decoding_Error("PGP: Malformed PGP trailer"); - - if(b == '=' && newline_seen) - { - while(b != '\n') - { - if(!source.read_byte(b)) - throw Decoding_Error("PGP: Bad CRC tail"); - if(b != '\n') - crc += static_cast<char>(b); - } - } - else if(b == '\n') - newline_seen = true; - else if(position == 0) - { - base64.write(b); - newline_seen = false; - } - } - base64.end_msg(); - - if(crc != "" && crc != base64.read_all_as_string(1)) - throw Decoding_Error("PGP: Corrupt CRC"); - - return base64.read_all(); - } - -/* -* OpenPGP Base64 decoding -*/ -secure_vector<byte> PGP_decode(DataSource& source, std::string& label) - { - std::map<std::string, std::string> ignored; - return PGP_decode(source, label, ignored); - } - -} - diff --git a/src/codec/openpgp/openpgp.h b/src/codec/openpgp/openpgp.h deleted file mode 100644 index de56155f2..000000000 --- a/src/codec/openpgp/openpgp.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -* OpenPGP Codec -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_OPENPGP_CODEC_H__ -#define BOTAN_OPENPGP_CODEC_H__ - -#include <botan/data_src.h> -#include <string> -#include <map> - -namespace Botan { - -/** -* @param input the input data -* @param length length of input in bytes -* @param label the human-readable label -* @param headers a set of key/value pairs included in the header -*/ -BOTAN_DLL std::string PGP_encode( - const byte input[], - size_t length, - const std::string& label, - const std::map<std::string, std::string>& headers); - -/** -* @param input the input data -* @param length length of input in bytes -* @param label the human-readable label -*/ -BOTAN_DLL std::string PGP_encode( - const byte input[], - size_t length, - const std::string& label); - -/** -* @param source the input source -* @param label is set to the human-readable label -* @param headers is set to any headers -* @return decoded output as raw binary -*/ -BOTAN_DLL secure_vector<byte> PGP_decode( - DataSource& source, - std::string& label, - std::map<std::string, std::string>& headers); - -/** -* @param source the input source -* @param label is set to the human-readable label -* @return decoded output as raw binary -*/ -BOTAN_DLL secure_vector<byte> PGP_decode( - DataSource& source, - std::string& label); - -} - -#endif diff --git a/src/codec/pem/info.txt b/src/codec/pem/info.txt deleted file mode 100644 index 74b90eef4..000000000 --- a/src/codec/pem/info.txt +++ /dev/null @@ -1,6 +0,0 @@ -define PEM_CODEC 20131128 - -<requires> -base64 -codec_filt -</requires> diff --git a/src/codec/pem/pem.cpp b/src/codec/pem/pem.cpp deleted file mode 100644 index 03ec33440..000000000 --- a/src/codec/pem/pem.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* -* PEM Encoding/Decoding -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/pem.h> -#include <botan/filters.h> -#include <botan/parsing.h> - -namespace Botan { - -namespace PEM_Code { - -/* -* PEM encode BER/DER-encoded objects -*/ -std::string encode(const byte der[], size_t length, const std::string& label, - size_t width) - { - const std::string PEM_HEADER = "-----BEGIN " + label + "-----\n"; - const std::string PEM_TRAILER = "-----END " + label + "-----\n"; - - Pipe pipe(new Base64_Encoder(true, width)); - pipe.process_msg(der, length); - return (PEM_HEADER + pipe.read_all_as_string() + PEM_TRAILER); - } - -/* -* Decode PEM down to raw BER/DER -*/ -secure_vector<byte> decode_check_label(DataSource& source, - const std::string& label_want) - { - std::string label_got; - secure_vector<byte> ber = decode(source, label_got); - if(label_got != label_want) - throw Decoding_Error("PEM: Label mismatch, wanted " + label_want + - ", got " + label_got); - return ber; - } - -/* -* Decode PEM down to raw BER/DER -*/ -secure_vector<byte> decode(DataSource& source, std::string& label) - { - const size_t RANDOM_CHAR_LIMIT = 8; - - const std::string PEM_HEADER1 = "-----BEGIN "; - const std::string PEM_HEADER2 = "-----"; - size_t position = 0; - - while(position != PEM_HEADER1.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PEM: No PEM header found"); - if(b == PEM_HEADER1[position]) - ++position; - else if(position >= RANDOM_CHAR_LIMIT) - throw Decoding_Error("PEM: Malformed PEM header"); - else - position = 0; - } - position = 0; - while(position != PEM_HEADER2.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PEM: No PEM header found"); - if(b == PEM_HEADER2[position]) - ++position; - else if(position) - throw Decoding_Error("PEM: Malformed PEM header"); - - if(position == 0) - label += static_cast<char>(b); - } - - Pipe base64(new Base64_Decoder); - base64.start_msg(); - - const std::string PEM_TRAILER = "-----END " + label + "-----"; - position = 0; - while(position != PEM_TRAILER.length()) - { - byte b; - if(!source.read_byte(b)) - throw Decoding_Error("PEM: No PEM trailer found"); - if(b == PEM_TRAILER[position]) - ++position; - else if(position) - throw Decoding_Error("PEM: Malformed PEM trailer"); - - if(position == 0) - base64.write(b); - } - base64.end_msg(); - return base64.read_all(); - } - -secure_vector<byte> decode_check_label(const std::string& pem, - const std::string& label_want) - { - DataSource_Memory src(pem); - return decode_check_label(src, label_want); - } - -secure_vector<byte> decode(const std::string& pem, std::string& label) - { - DataSource_Memory src(pem); - return decode(src, label); - } - -/* -* Search for a PEM signature -*/ -bool matches(DataSource& source, const std::string& extra, - size_t search_range) - { - const std::string PEM_HEADER = "-----BEGIN " + extra; - - secure_vector<byte> search_buf(search_range); - size_t got = source.peek(&search_buf[0], search_buf.size(), 0); - - if(got < PEM_HEADER.length()) - return false; - - size_t index = 0; - - for(size_t j = 0; j != got; ++j) - { - if(search_buf[j] == PEM_HEADER[index]) - ++index; - else - index = 0; - if(index == PEM_HEADER.size()) - return true; - } - return false; - } - -} - -} diff --git a/src/codec/pem/pem.h b/src/codec/pem/pem.h deleted file mode 100644 index a0c6f74aa..000000000 --- a/src/codec/pem/pem.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -* PEM Encoding/Decoding -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_PEM_H__ -#define BOTAN_PEM_H__ - -#include <botan/data_src.h> - -namespace Botan { - -namespace PEM_Code { - -/** -* Encode some binary data in PEM format -*/ -BOTAN_DLL std::string encode(const byte data[], - size_t data_len, - const std::string& label, - size_t line_width = 64); - -/** -* Encode some binary data in PEM format -*/ -inline std::string encode(const std::vector<byte>& data, - const std::string& label, - size_t line_width = 64) - { - return encode(&data[0], data.size(), label, line_width); - } - -/** -* Encode some binary data in PEM format -*/ -inline std::string encode(const secure_vector<byte>& data, - const std::string& label, - size_t line_width = 64) - { - return encode(&data[0], data.size(), label, line_width); - } - -/** -* Decode PEM data -* @param pem a datasource containing PEM encoded data -* @param label is set to the PEM label found for later inspection -*/ -BOTAN_DLL secure_vector<byte> decode(DataSource& pem, - std::string& label); - -/** -* Decode PEM data -* @param pem a string containing PEM encoded data -* @param label is set to the PEM label found for later inspection -*/ -BOTAN_DLL secure_vector<byte> decode(const std::string& pem, - std::string& label); - -/** -* Decode PEM data -* @param pem a datasource containing PEM encoded data -* @param label is what we expect the label to be -*/ -BOTAN_DLL secure_vector<byte> decode_check_label( - DataSource& pem, - const std::string& label); - -/** -* Decode PEM data -* @param pem a string containing PEM encoded data -* @param label is what we expect the label to be -*/ -BOTAN_DLL secure_vector<byte> decode_check_label( - const std::string& pem, - const std::string& label); - -/** -* Heuristic test for PEM data. -*/ -BOTAN_DLL bool matches(DataSource& source, - const std::string& extra = "", - size_t search_range = 4096); - -} - -} - -#endif |