diff options
author | lloyd <[email protected]> | 2009-11-17 07:19:37 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2009-11-17 07:19:37 +0000 |
commit | e00b46cf9c1dcb364ebb7d5968d6ff9dcd600c4e (patch) | |
tree | 8ffb8d032f06bbcb7ab376c7469751a25b556dca /src/codec | |
parent | a98a9ff5f95bd4dca9c1eda11e27e712c869cd66 (diff) |
Move most code that relies heavily on Filters into src/filters.
Remove support for (unused) modset settings.
Move tss, fpe, cryptobox, and aont to new dir constructs
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/base64/b64_char.cpp | 47 | ||||
-rw-r--r-- | src/codec/base64/base64.cpp | 228 | ||||
-rw-r--r-- | src/codec/base64/base64.h | 94 | ||||
-rw-r--r-- | src/codec/base64/info.txt | 13 | ||||
-rw-r--r-- | src/codec/bzip2/bzip2.cpp | 275 | ||||
-rw-r--r-- | src/codec/bzip2/bzip2.h | 61 | ||||
-rw-r--r-- | src/codec/bzip2/info.txt | 20 | ||||
-rw-r--r-- | src/codec/hex/hex.cpp | 193 | ||||
-rw-r--r-- | src/codec/hex/hex.h | 90 | ||||
-rw-r--r-- | src/codec/hex/hex_char.cpp | 48 | ||||
-rw-r--r-- | src/codec/hex/info.txt | 13 | ||||
-rw-r--r-- | src/codec/openpgp/info.txt | 5 | ||||
-rw-r--r-- | src/codec/openpgp/openpgp.cpp | 2 | ||||
-rw-r--r-- | src/codec/openpgp/openpgp.h | 6 | ||||
-rw-r--r-- | src/codec/zlib/info.txt | 20 | ||||
-rw-r--r-- | src/codec/zlib/zlib.cpp | 287 | ||||
-rw-r--r-- | src/codec/zlib/zlib.h | 58 |
17 files changed, 4 insertions, 1456 deletions
diff --git a/src/codec/base64/b64_char.cpp b/src/codec/base64/b64_char.cpp deleted file mode 100644 index e5722a0fd..000000000 --- a/src/codec/base64/b64_char.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* -* Base64 Codec Character Tables -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/base64.h> - -namespace Botan { - -/* -* Base64 Encoder Lookup Table -*/ -const byte Base64_Encoder::BIN_TO_BASE64[64] = { -0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, -0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, -0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, -0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F }; - -/* -* Base64 Decoder Lookup Table -*/ -const byte Base64_Decoder::BASE64_TO_BIN[256] = { -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x3E, 0x80, 0x80, 0x80, 0x3F, 0x34, 0x35, 0x36, 0x37, -0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -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, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 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, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; - -} diff --git a/src/codec/base64/base64.cpp b/src/codec/base64/base64.cpp deleted file mode 100644 index 9110dc57e..000000000 --- a/src/codec/base64/base64.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/* -* Base64 Encoder/Decoder -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/base64.h> -#include <botan/charset.h> -#include <botan/exceptn.h> -#include <algorithm> - -namespace Botan { - -/* -* Base64_Encoder Constructor -*/ -Base64_Encoder::Base64_Encoder(bool breaks, u32bit length, bool t_n) : - line_length(breaks ? length : 0), trailing_newline(t_n) - { - in.resize(48); - out.resize(4); - - counter = position = 0; - } - -/* -* Base64 Encoding Operation -*/ -void Base64_Encoder::encode(const byte in[3], byte out[4]) - { - 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) )]; - } - -/* -* Encode and send a block -*/ -void Base64_Encoder::encode_and_send(const byte block[], u32bit length) - { - for(u32bit j = 0; j != length; j += 3) - { - encode(block + j, out); - do_output(out, 4); - } - } - -/* -* Handle the output -*/ -void Base64_Encoder::do_output(const byte input[], u32bit length) - { - if(line_length == 0) - send(input, length); - else - { - u32bit remaining = length, offset = 0; - while(remaining) - { - u32bit sent = std::min(line_length - counter, remaining); - send(input + offset, sent); - counter += sent; - remaining -= sent; - offset += sent; - if(counter == line_length) - { - send('\n'); - counter = 0; - } - } - } - } - -/* -* Convert some data into Base64 -*/ -void Base64_Encoder::write(const byte input[], u32bit length) - { - in.copy(position, input, length); - if(position + length >= in.size()) - { - encode_and_send(in, in.size()); - input += (in.size() - position); - length -= (in.size() - position); - while(length >= in.size()) - { - encode_and_send(input, in.size()); - input += in.size(); - length -= in.size(); - } - in.copy(input, length); - position = 0; - } - position += length; - } - -/* -* Flush buffers -*/ -void Base64_Encoder::end_msg() - { - u32bit start_of_last_block = 3 * (position / 3), - left_over = position % 3; - encode_and_send(in, start_of_last_block); - - if(left_over) - { - SecureBuffer<byte, 3> remainder(in + start_of_last_block, left_over); - - encode(remainder, out); - - u32bit empty_bits = 8 * (3 - left_over), index = 4 - 1; - while(empty_bits >= 8) - { - out[index--] = '='; - empty_bits -= 6; - } - - do_output(out, 4); - } - - if(trailing_newline || (counter && line_length)) - send('\n'); - - counter = position = 0; - } - -/* -* Base64_Decoder Constructor -*/ -Base64_Decoder::Base64_Decoder(Decoder_Checking c) : checking(c) - { - in.resize(48); - out.resize(3); - position = 0; - } - -/* -* Check if a character is a valid Base64 char -*/ -bool Base64_Decoder::is_valid(byte in) - { - return (BASE64_TO_BIN[in] != 0x80); - } - -/* -* Base64 Decoding Operation -*/ -void Base64_Decoder::decode(const byte in[4], byte out[3]) - { - out[0] = ((BASE64_TO_BIN[in[0]] << 2) | (BASE64_TO_BIN[in[1]] >> 4)); - out[1] = ((BASE64_TO_BIN[in[1]] << 4) | (BASE64_TO_BIN[in[2]] >> 2)); - out[2] = ((BASE64_TO_BIN[in[2]] << 6) | (BASE64_TO_BIN[in[3]])); - } - -/* -* Decode and send a block -*/ -void Base64_Decoder::decode_and_send(const byte block[], u32bit length) - { - for(u32bit j = 0; j != length; j += 4) - { - decode(block + j, out); - send(out, 3); - } - } - -/* -* Handle processing an invalid character -*/ -void Base64_Decoder::handle_bad_char(byte c) - { - if(c == '=' || checking == NONE) - return; - - if((checking == IGNORE_WS) && Charset::is_space(c)) - return; - - throw Decoding_Error( - std::string("Base64_Decoder: Invalid base64 character '") + - static_cast<char>(c) + "'" - ); - } - -/* -* Convert some data from Base64 -*/ -void Base64_Decoder::write(const byte input[], u32bit length) - { - for(u32bit j = 0; j != length; ++j) - { - if(is_valid(input[j])) - in[position++] = input[j]; - else - handle_bad_char(input[j]); - - if(position == in.size()) - { - decode_and_send(in, in.size()); - position = 0; - } - } - } - -/* -* Flush buffers -*/ -void Base64_Decoder::end_msg() - { - if(position != 0) - { - u32bit start_of_last_block = 4 * (position / 4), - left_over = position % 4; - decode_and_send(in, start_of_last_block); - - if(left_over) - { - SecureBuffer<byte, 4> remainder(in + start_of_last_block, left_over); - decode(remainder, out); - send(out, ((left_over == 1) ? (1) : (left_over - 1))); - } - } - position = 0; - } - -} diff --git a/src/codec/base64/base64.h b/src/codec/base64/base64.h deleted file mode 100644 index aca02da14..000000000 --- a/src/codec/base64/base64.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -* Base64 Encoder/Decoder -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_BASE64_H__ -#define BOTAN_BASE64_H__ - -#include <botan/filter.h> - -namespace Botan { - -/** -* This class represents a Base64 encoder. -*/ -class BOTAN_DLL Base64_Encoder : public Filter - { - public: - static void encode(const byte in[3], byte out[4]); - - /** - * Input a part of a message to the encoder. - * @param input the message to input as a byte array - * @param length the length of the byte array input - */ - void write(const byte input[], u32bit length); - - /** - * Inform the Encoder that the current message shall be closed. - */ - void end_msg(); - - /** - * Create a base64 encoder. - * @param breaks whether to use line breaks in the Streamcipheroutput - * @param length the length of the lines of the output - * @param t_n whether to use a trailing newline - */ - Base64_Encoder(bool breaks = false, u32bit length = 72, - bool t_n = false); - private: - void encode_and_send(const byte[], u32bit); - void do_output(const byte[], u32bit); - static const byte BIN_TO_BASE64[64]; - - const u32bit line_length; - const bool trailing_newline; - SecureVector<byte> in, out; - u32bit position, counter; - }; - -/** -* This object represents a Base64 decoder. -*/ -class BOTAN_DLL Base64_Decoder : public Filter - { - public: - static void decode(const byte input[4], byte output[3]); - - static bool is_valid(byte); - - /** - * Input a part of a message to the decoder. - * @param input the message to input as a byte array - * @param length the length of the byte array input - */ - void write(const byte input[], u32bit length); - - /** - * Inform the Encoder that the current message shall be closed. - */ - void end_msg(); - - /** - * Create a base64 encoder. - * @param checking the type of checking that shall be performed by - * the decoder - */ - Base64_Decoder(Decoder_Checking checking = NONE); - private: - void decode_and_send(const byte[], u32bit); - void handle_bad_char(byte); - static const byte BASE64_TO_BIN[256]; - - const Decoder_Checking checking; - SecureVector<byte> in, out; - u32bit position; - }; - -} - -#endif diff --git a/src/codec/base64/info.txt b/src/codec/base64/info.txt deleted file mode 100644 index 1d36b948e..000000000 --- a/src/codec/base64/info.txt +++ /dev/null @@ -1,13 +0,0 @@ -define BASE64_CODEC - -load_on auto - -<add> -base64.cpp -b64_char.cpp -base64.h -</add> - -<requires> -filters -</requires> diff --git a/src/codec/bzip2/bzip2.cpp b/src/codec/bzip2/bzip2.cpp deleted file mode 100644 index 4cdca5355..000000000 --- a/src/codec/bzip2/bzip2.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/* -* Bzip Compressor -* (C) 2001 Peter J Jones -* 2001-2007 Jack Lloyd -* 2006 Matt Johnston -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/bzip2.h> -#include <botan/exceptn.h> - -#include <map> -#include <cstring> -#define BZ_NO_STDIO -#include <bzlib.h> - -namespace Botan { - -namespace { - -/* -* Allocation Information for Bzip -*/ -class Bzip_Alloc_Info - { - public: - std::map<void*, u32bit> current_allocs; - Allocator* alloc; - - Bzip_Alloc_Info() { alloc = Allocator::get(false); } - }; - -/* -* Allocation Function for Bzip -*/ -void* bzip_malloc(void* info_ptr, int n, int size) - { - Bzip_Alloc_Info* info = static_cast<Bzip_Alloc_Info*>(info_ptr); - void* ptr = info->alloc->allocate(n * size); - info->current_allocs[ptr] = n * size; - return ptr; - } - -/* -* Allocation Function for Bzip -*/ -void bzip_free(void* info_ptr, void* ptr) - { - Bzip_Alloc_Info* info = static_cast<Bzip_Alloc_Info*>(info_ptr); - std::map<void*, u32bit>::const_iterator i = info->current_allocs.find(ptr); - if(i == info->current_allocs.end()) - throw Invalid_Argument("bzip_free: Got pointer not allocated by us"); - info->alloc->deallocate(ptr, i->second); - } - -} - -/* -* Wrapper Type for Bzip2 Stream -*/ -class Bzip_Stream - { - public: - bz_stream stream; - - Bzip_Stream() - { - std::memset(&stream, 0, sizeof(bz_stream)); - stream.bzalloc = bzip_malloc; - stream.bzfree = bzip_free; - stream.opaque = new Bzip_Alloc_Info; - } - ~Bzip_Stream() - { - Bzip_Alloc_Info* info = static_cast<Bzip_Alloc_Info*>(stream.opaque); - delete info; - std::memset(&stream, 0, sizeof(bz_stream)); - } - }; - -/* -* Bzip_Compression Constructor -*/ -Bzip_Compression::Bzip_Compression(u32bit l) : - level((l >= 9) ? 9 : l), buffer(DEFAULT_BUFFERSIZE) - { - bz = 0; - } - -/* -* Start Compressing with Bzip -*/ -void Bzip_Compression::start_msg() - { - clear(); - bz = new Bzip_Stream; - if(BZ2_bzCompressInit(&(bz->stream), level, 0, 0) != BZ_OK) - throw Exception("Bzip_Compression: Memory allocation error"); - } - -/* -* Compress Input with Bzip -*/ -void Bzip_Compression::write(const byte input[], u32bit length) - { - bz->stream.next_in = reinterpret_cast<char*>(const_cast<byte*>(input)); - bz->stream.avail_in = length; - - while(bz->stream.avail_in != 0) - { - bz->stream.next_out = reinterpret_cast<char*>(buffer.begin()); - bz->stream.avail_out = buffer.size(); - BZ2_bzCompress(&(bz->stream), BZ_RUN); - send(buffer, buffer.size() - bz->stream.avail_out); - } - } - -/* -* Finish Compressing with Bzip -*/ -void Bzip_Compression::end_msg() - { - bz->stream.next_in = 0; - bz->stream.avail_in = 0; - - int rc = BZ_OK; - while(rc != BZ_STREAM_END) - { - bz->stream.next_out = reinterpret_cast<char*>(buffer.begin()); - bz->stream.avail_out = buffer.size(); - rc = BZ2_bzCompress(&(bz->stream), BZ_FINISH); - send(buffer, buffer.size() - bz->stream.avail_out); - } - clear(); - } - -/* -* Flush the Bzip Compressor -*/ -void Bzip_Compression::flush() - { - bz->stream.next_in = 0; - bz->stream.avail_in = 0; - - int rc = BZ_OK; - while(rc != BZ_RUN_OK) - { - bz->stream.next_out = reinterpret_cast<char*>(buffer.begin()); - bz->stream.avail_out = buffer.size(); - rc = BZ2_bzCompress(&(bz->stream), BZ_FLUSH); - send(buffer, buffer.size() - bz->stream.avail_out); - } - } - -/* -* Clean up Compression Context -*/ -void Bzip_Compression::clear() - { - if(!bz) return; - BZ2_bzCompressEnd(&(bz->stream)); - delete bz; - bz = 0; - } - -/* -* Bzip_Decompression Constructor -*/ -Bzip_Decompression::Bzip_Decompression(bool s) : - small_mem(s), buffer(DEFAULT_BUFFERSIZE) - { - no_writes = true; - bz = 0; - } - -/* -* Decompress Input with Bzip -*/ -void Bzip_Decompression::write(const byte input_arr[], u32bit length) - { - if(length) no_writes = false; - - char* input = reinterpret_cast<char*>(const_cast<byte*>(input_arr)); - - bz->stream.next_in = input; - bz->stream.avail_in = length; - - while(bz->stream.avail_in != 0) - { - bz->stream.next_out = reinterpret_cast<char*>(buffer.begin()); - bz->stream.avail_out = buffer.size(); - - int rc = BZ2_bzDecompress(&(bz->stream)); - - if(rc != BZ_OK && rc != BZ_STREAM_END) - { - clear(); - if(rc == BZ_DATA_ERROR) - throw Decoding_Error("Bzip_Decompression: Data integrity error"); - if(rc == BZ_DATA_ERROR_MAGIC) - throw Decoding_Error("Bzip_Decompression: Invalid input"); - if(rc == BZ_MEM_ERROR) - throw Exception("Bzip_Decompression: Memory allocation error"); - throw Exception("Bzip_Decompression: Unknown decompress error"); - } - - send(buffer, buffer.size() - bz->stream.avail_out); - - if(rc == BZ_STREAM_END) - { - u32bit read_from_block = length - bz->stream.avail_in; - start_msg(); - bz->stream.next_in = input + read_from_block; - bz->stream.avail_in = length - read_from_block; - input += read_from_block; - length -= read_from_block; - } - } - } - -/* -* Start Decompressing with Bzip -*/ -void Bzip_Decompression::start_msg() - { - clear(); - bz = new Bzip_Stream; - - if(BZ2_bzDecompressInit(&(bz->stream), 0, small_mem) != BZ_OK) - throw Exception("Bzip_Decompression: Memory allocation error"); - - no_writes = true; - } - -/* -* Finish Decompressing with Bzip -*/ -void Bzip_Decompression::end_msg() - { - if(no_writes) return; - bz->stream.next_in = 0; - bz->stream.avail_in = 0; - - int rc = BZ_OK; - while(rc != BZ_STREAM_END) - { - bz->stream.next_out = reinterpret_cast<char*>(buffer.begin()); - bz->stream.avail_out = buffer.size(); - rc = BZ2_bzDecompress(&(bz->stream)); - - if(rc != BZ_OK && rc != BZ_STREAM_END) - { - clear(); - throw Exception("Bzip_Decompression: Error finalizing decompression"); - } - - send(buffer, buffer.size() - bz->stream.avail_out); - } - - clear(); - } - -/* -* Clean up Decompression Context -*/ -void Bzip_Decompression::clear() - { - if(!bz) return; - BZ2_bzDecompressEnd(&(bz->stream)); - delete bz; - bz = 0; - } - -} diff --git a/src/codec/bzip2/bzip2.h b/src/codec/bzip2/bzip2.h deleted file mode 100644 index f42263537..000000000 --- a/src/codec/bzip2/bzip2.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Bzip Compressor -* (C) 2001 Peter J Jones -* 2001-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_BZIP2_H__ -#define BOTAN_BZIP2_H__ - -#include <botan/filter.h> - -namespace Botan { - -/* -* Bzip Compression Filter -*/ -class BOTAN_DLL Bzip_Compression : public Filter - { - public: - void write(const byte input[], u32bit length); - void start_msg(); - void end_msg(); - - void flush(); - - Bzip_Compression(u32bit = 9); - ~Bzip_Compression() { clear(); } - private: - void clear(); - - const u32bit level; - SecureVector<byte> buffer; - class Bzip_Stream* bz; - }; - -/* -* Bzip Decompression Filter -*/ -class BOTAN_DLL Bzip_Decompression : public Filter - { - public: - void write(const byte input[], u32bit length); - void start_msg(); - void end_msg(); - - Bzip_Decompression(bool = false); - ~Bzip_Decompression() { clear(); } - private: - void clear(); - - const bool small_mem; - SecureVector<byte> buffer; - class Bzip_Stream* bz; - bool no_writes; - }; - -} - -#endif diff --git a/src/codec/bzip2/info.txt b/src/codec/bzip2/info.txt deleted file mode 100644 index 7fd426f90..000000000 --- a/src/codec/bzip2/info.txt +++ /dev/null @@ -1,20 +0,0 @@ -# This module was written by Peter J. Jones - - -define COMPRESSOR_BZIP2 -modset compression - -load_on request - -<add> -bzip2.h -bzip2.cpp -</add> - -<libs> -all -> bz2 -</libs> - -<requires> -filters -</requires> diff --git a/src/codec/hex/hex.cpp b/src/codec/hex/hex.cpp deleted file mode 100644 index 651899b73..000000000 --- a/src/codec/hex/hex.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* -* Hex Encoder/Decoder -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/hex.h> -#include <botan/parsing.h> -#include <botan/charset.h> -#include <botan/exceptn.h> -#include <algorithm> - -namespace Botan { - -const u32bit HEX_CODEC_BUFFER_SIZE = 256; - -/* -* Hex_Encoder Constructor -*/ -Hex_Encoder::Hex_Encoder(bool breaks, u32bit length, Case c) : - casing(c), line_length(breaks ? length : 0) - { - in.resize(HEX_CODEC_BUFFER_SIZE); - out.resize(2*in.size()); - counter = position = 0; - } - -/* -* Hex_Encoder Constructor -*/ -Hex_Encoder::Hex_Encoder(Case c) : casing(c), line_length(0) - { - in.resize(HEX_CODEC_BUFFER_SIZE); - out.resize(2*in.size()); - counter = position = 0; - } - -/* -* Hex Encoding Operation -*/ -void Hex_Encoder::encode(byte in, byte out[2], Hex_Encoder::Case casing) - { - const byte* BIN_TO_HEX = ((casing == Uppercase) ? BIN_TO_HEX_UPPER : - BIN_TO_HEX_LOWER); - - out[0] = BIN_TO_HEX[((in >> 4) & 0x0F)]; - out[1] = BIN_TO_HEX[((in ) & 0x0F)]; - } - -/* -* Encode and send a block -*/ -void Hex_Encoder::encode_and_send(const byte block[], u32bit length) - { - for(u32bit j = 0; j != length; ++j) - encode(block[j], out + 2*j, casing); - - if(line_length == 0) - send(out, 2*length); - else - { - u32bit remaining = 2*length, offset = 0; - while(remaining) - { - u32bit sent = std::min(line_length - counter, remaining); - send(out + offset, sent); - counter += sent; - remaining -= sent; - offset += sent; - if(counter == line_length) - { - send('\n'); - counter = 0; - } - } - } - } - -/* -* Convert some data into hex format -*/ -void Hex_Encoder::write(const byte input[], u32bit length) - { - in.copy(position, input, length); - if(position + length >= in.size()) - { - encode_and_send(in, in.size()); - input += (in.size() - position); - length -= (in.size() - position); - while(length >= in.size()) - { - encode_and_send(input, in.size()); - input += in.size(); - length -= in.size(); - } - in.copy(input, length); - position = 0; - } - position += length; - } - -/* -* Flush buffers -*/ -void Hex_Encoder::end_msg() - { - encode_and_send(in, position); - if(counter && line_length) - send('\n'); - counter = position = 0; - } - -/* -* Hex_Decoder Constructor -*/ -Hex_Decoder::Hex_Decoder(Decoder_Checking c) : checking(c) - { - in.resize(HEX_CODEC_BUFFER_SIZE); - out.resize(in.size() / 2); - position = 0; - } - -/* -* Check if a character is a valid hex char -*/ -bool Hex_Decoder::is_valid(byte in) - { - return (HEX_TO_BIN[in] != 0x80); - } - -/* -* Handle processing an invalid character -*/ -void Hex_Decoder::handle_bad_char(byte c) - { - if(checking == NONE) - return; - - if((checking == IGNORE_WS) && Charset::is_space(c)) - return; - - throw Decoding_Error("Hex_Decoder: Invalid hex character: " + - to_string(c)); - } - -/* -* Hex Decoding Operation -*/ -byte Hex_Decoder::decode(const byte hex[2]) - { - return ((HEX_TO_BIN[hex[0]] << 4) | HEX_TO_BIN[hex[1]]); - } - -/* -* Decode and send a block -*/ -void Hex_Decoder::decode_and_send(const byte block[], u32bit length) - { - for(u32bit j = 0; j != length / 2; ++j) - out[j] = decode(block + 2*j); - send(out, length / 2); - } - -/* -* Convert some data from hex format -*/ -void Hex_Decoder::write(const byte input[], u32bit length) - { - for(u32bit j = 0; j != length; ++j) - { - if(is_valid(input[j])) - in[position++] = input[j]; - else - handle_bad_char(input[j]); - if(position == in.size()) - { - decode_and_send(in, in.size()); - position = 0; - } - } - } - -/* -* Flush buffers -*/ -void Hex_Decoder::end_msg() - { - decode_and_send(in, position); - position = 0; - } - -} diff --git a/src/codec/hex/hex.h b/src/codec/hex/hex.h deleted file mode 100644 index 035bf4ef9..000000000 --- a/src/codec/hex/hex.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -* Hex Encoder/Decoder -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_HEX_H__ -#define BOTAN_HEX_H__ - -#include <botan/filter.h> - -namespace Botan { - -/** -* This class represents a hex encoder. It encodes byte arrays to hex strings. -*/ -class BOTAN_DLL Hex_Encoder : public Filter - { - public: - /** - * Whether to use uppercase or lowercase letters for the encoded string. - */ - enum Case { Uppercase, Lowercase }; - - /** - Encode a single byte into two hex characters - */ - static void encode(byte in, byte out[2], Case the_case = Uppercase); - - void write(const byte in[], u32bit length); - void end_msg(); - - /** - * Create a hex encoder. - * @param the_case the case to use in the encoded strings. - */ - Hex_Encoder(Case the_case); - - /** - * Create a hex encoder. - * @param newlines should newlines be used - * @param line_length if newlines are used, how long are lines - * @param the_case the case to use in the encoded strings - */ - Hex_Encoder(bool newlines = false, - u32bit line_length = 72, - Case the_case = Uppercase); - private: - void encode_and_send(const byte[], u32bit); - static const byte BIN_TO_HEX_UPPER[16]; - static const byte BIN_TO_HEX_LOWER[16]; - - const Case casing; - const u32bit line_length; - SecureVector<byte> in, out; - u32bit position, counter; - }; - -/** -* This class represents a hex decoder. It converts hex strings to byte arrays. -*/ -class BOTAN_DLL Hex_Decoder : public Filter - { - public: - static byte decode(const byte[2]); - static bool is_valid(byte); - - void write(const byte[], u32bit); - void end_msg(); - - /** - * Construct a Hex Decoder using the specified - * character checking. - * @param checking the checking to use during decoding. - */ - Hex_Decoder(Decoder_Checking checking = NONE); - private: - void decode_and_send(const byte[], u32bit); - void handle_bad_char(byte); - static const byte HEX_TO_BIN[256]; - - const Decoder_Checking checking; - SecureVector<byte> in, out; - u32bit position; - }; - -} - -#endif diff --git a/src/codec/hex/hex_char.cpp b/src/codec/hex/hex_char.cpp deleted file mode 100644 index c28efc5f7..000000000 --- a/src/codec/hex/hex_char.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Hex Character Table -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/hex.h> - -namespace Botan { - -/* -* Hex Encoder Lookup Tables -*/ -const byte Hex_Encoder::BIN_TO_HEX_UPPER[16] = { -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, -0x44, 0x45, 0x46 }; - -const byte Hex_Encoder::BIN_TO_HEX_LOWER[16] = { -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, -0x64, 0x65, 0x66 }; - -/* -* Hex Decoder Lookup Table -*/ -const byte Hex_Decoder::HEX_TO_BIN[256] = { -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x01, 0x02, 0x03, -0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; - -} diff --git a/src/codec/hex/info.txt b/src/codec/hex/info.txt deleted file mode 100644 index 817ff1a00..000000000 --- a/src/codec/hex/info.txt +++ /dev/null @@ -1,13 +0,0 @@ -define HEX_CODEC - -load_on auto - -<add> -hex.cpp -hex_char.cpp -hex.h -</add> - -<requires> -filters -</requires> diff --git a/src/codec/openpgp/info.txt b/src/codec/openpgp/info.txt index f7774b147..af7d3738c 100644 --- a/src/codec/openpgp/info.txt +++ b/src/codec/openpgp/info.txt @@ -2,11 +2,6 @@ define OPENPGP_CODEC load_on auto -<add> -openpgp.cpp -openpgp.h -</add> - <requires> crc24 filters diff --git a/src/codec/openpgp/openpgp.cpp b/src/codec/openpgp/openpgp.cpp index bfba828af..f55caf1c8 100644 --- a/src/codec/openpgp/openpgp.cpp +++ b/src/codec/openpgp/openpgp.cpp @@ -1,5 +1,5 @@ /* -* OpenPGP +* OpenPGP Codec * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license diff --git a/src/codec/openpgp/openpgp.h b/src/codec/openpgp/openpgp.h index 890fcf0e3..7021d5675 100644 --- a/src/codec/openpgp/openpgp.h +++ b/src/codec/openpgp/openpgp.h @@ -1,12 +1,12 @@ /* -* OpenPGP +* OpenPGP Codec * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license */ -#ifndef BOTAN_OPENPGP_H__ -#define BOTAN_OPENPGP_H__ +#ifndef BOTAN_OPENPGP_CODEC_H__ +#define BOTAN_OPENPGP_CODEC_H__ #include <botan/data_src.h> #include <string> diff --git a/src/codec/zlib/info.txt b/src/codec/zlib/info.txt deleted file mode 100644 index 6556359a8..000000000 --- a/src/codec/zlib/info.txt +++ /dev/null @@ -1,20 +0,0 @@ -define COMPRESSOR_ZLIB -#define COMPRESSOR_ZLIB,COMPRESSOR_GZIP - -load_on request -modset compression - -<add> -zlib.h -zlib.cpp -#gzip.h -#gzip.cpp -</add> - -<libs> -all -> z -</libs> - -<requires> -filters -</requires> diff --git a/src/codec/zlib/zlib.cpp b/src/codec/zlib/zlib.cpp deleted file mode 100644 index 246e32924..000000000 --- a/src/codec/zlib/zlib.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/* -* Zlib Compressor -* (C) 2001 Peter J Jones -* 2001-2007 Jack Lloyd -* 2006 Matt Johnston -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/zlib.h> -#include <botan/exceptn.h> - -#include <cstring> -#include <map> -#include <zlib.h> - -namespace Botan { - -namespace { - -/* -* Allocation Information for Zlib -*/ -class Zlib_Alloc_Info - { - public: - std::map<void*, u32bit> current_allocs; - Allocator* alloc; - - Zlib_Alloc_Info() { alloc = Allocator::get(false); } - }; - -/* -* Allocation Function for Zlib -*/ -void* zlib_malloc(void* info_ptr, unsigned int n, unsigned int size) - { - Zlib_Alloc_Info* info = static_cast<Zlib_Alloc_Info*>(info_ptr); - void* ptr = info->alloc->allocate(n * size); - info->current_allocs[ptr] = n * size; - return ptr; - } - -/* -* Allocation Function for Zlib -*/ -void zlib_free(void* info_ptr, void* ptr) - { - Zlib_Alloc_Info* info = static_cast<Zlib_Alloc_Info*>(info_ptr); - std::map<void*, u32bit>::const_iterator i = info->current_allocs.find(ptr); - if(i == info->current_allocs.end()) - throw Invalid_Argument("zlib_free: Got pointer not allocated by us"); - info->alloc->deallocate(ptr, i->second); - } - -} - -/* -* Wrapper Type for Zlib z_stream -*/ -class Zlib_Stream - { - public: - z_stream stream; - - Zlib_Stream() - { - std::memset(&stream, 0, sizeof(z_stream)); - stream.zalloc = zlib_malloc; - stream.zfree = zlib_free; - stream.opaque = new Zlib_Alloc_Info; - } - ~Zlib_Stream() - { - Zlib_Alloc_Info* info = static_cast<Zlib_Alloc_Info*>(stream.opaque); - delete info; - std::memset(&stream, 0, sizeof(z_stream)); - } - }; - -/* -* Zlib_Compression Constructor -*/ -Zlib_Compression::Zlib_Compression(u32bit l) : - level((l >= 9) ? 9 : l), buffer(DEFAULT_BUFFERSIZE) - { - zlib = 0; - } - -/* -* Start Compressing with Zlib -*/ -void Zlib_Compression::start_msg() - { - clear(); - zlib = new Zlib_Stream; - if(deflateInit(&(zlib->stream), level) != Z_OK) - throw Exception("Zlib_Compression: Memory allocation error"); - } - -/* -* Compress Input with Zlib -*/ -void Zlib_Compression::write(const byte input[], u32bit length) - { - zlib->stream.next_in = static_cast<Bytef*>(const_cast<byte*>(input)); - zlib->stream.avail_in = length; - - while(zlib->stream.avail_in != 0) - { - zlib->stream.next_out = static_cast<Bytef*>(buffer.begin()); - zlib->stream.avail_out = buffer.size(); - deflate(&(zlib->stream), Z_NO_FLUSH); - send(buffer.begin(), buffer.size() - zlib->stream.avail_out); - } - } - -/* -* Finish Compressing with Zlib -*/ -void Zlib_Compression::end_msg() - { - zlib->stream.next_in = 0; - zlib->stream.avail_in = 0; - - int rc = Z_OK; - while(rc != Z_STREAM_END) - { - zlib->stream.next_out = reinterpret_cast<Bytef*>(buffer.begin()); - zlib->stream.avail_out = buffer.size(); - rc = deflate(&(zlib->stream), Z_FINISH); - send(buffer.begin(), buffer.size() - zlib->stream.avail_out); - } - clear(); - } - -/* -* Flush the Zlib Compressor -*/ -void Zlib_Compression::flush() - { - zlib->stream.next_in = 0; - zlib->stream.avail_in = 0; - - while(true) - { - zlib->stream.avail_out = buffer.size(); - - zlib->stream.next_out = reinterpret_cast<Bytef*>(buffer.begin()); - - - deflate(&(zlib->stream), Z_FULL_FLUSH); - send(buffer.begin(), buffer.size() - zlib->stream.avail_out); - if(zlib->stream.avail_out == buffer.size()) break; - } - } - -/* -* Clean up Compression Context -*/ -void Zlib_Compression::clear() - { - if(zlib) - { - deflateEnd(&(zlib->stream)); - delete zlib; - zlib = 0; - } - - buffer.clear(); - } - -/* -* Zlib_Decompression Constructor -*/ -Zlib_Decompression::Zlib_Decompression() : buffer(DEFAULT_BUFFERSIZE) - { - zlib = 0; - no_writes = true; - } - -/* -* Start Decompressing with Zlib -*/ -void Zlib_Decompression::start_msg() - { - clear(); - zlib = new Zlib_Stream; - if(inflateInit(&(zlib->stream)) != Z_OK) - throw Exception("Zlib_Decompression: Memory allocation error"); - } - -/* -* Decompress Input with Zlib -*/ -void Zlib_Decompression::write(const byte input_arr[], u32bit length) - { - if(length) no_writes = false; - - // non-const needed by zlib api :( - Bytef* input = reinterpret_cast<Bytef*>(const_cast<byte*>(input_arr)); - - zlib->stream.next_in = input; - zlib->stream.avail_in = length; - - while(zlib->stream.avail_in != 0) - { - zlib->stream.next_out = reinterpret_cast<Bytef*>(buffer.begin()); - zlib->stream.avail_out = buffer.size(); - - int rc = inflate(&(zlib->stream), Z_SYNC_FLUSH); - - if(rc != Z_OK && rc != Z_STREAM_END) - { - clear(); - if(rc == Z_DATA_ERROR) - throw Decoding_Error("Zlib_Decompression: Data integrity error"); - if(rc == Z_NEED_DICT) - throw Decoding_Error("Zlib_Decompression: Need preset dictionary"); - if(rc == Z_MEM_ERROR) - throw Exception("Zlib_Decompression: Memory allocation error"); - throw Exception("Zlib_Decompression: Unknown decompress error"); - } - - send(buffer.begin(), buffer.size() - zlib->stream.avail_out); - - if(rc == Z_STREAM_END) - { - u32bit read_from_block = length - zlib->stream.avail_in; - start_msg(); - - zlib->stream.next_in = input + read_from_block; - zlib->stream.avail_in = length - read_from_block; - - input += read_from_block; - length -= read_from_block; - } - } - } - -/* -* Finish Decompressing with Zlib -*/ -void Zlib_Decompression::end_msg() - { - if(no_writes) return; - zlib->stream.next_in = 0; - zlib->stream.avail_in = 0; - - int rc = Z_OK; - - while(rc != Z_STREAM_END) - { - zlib->stream.next_out = reinterpret_cast<Bytef*>(buffer.begin()); - zlib->stream.avail_out = buffer.size(); - rc = inflate(&(zlib->stream), Z_SYNC_FLUSH); - - if(rc != Z_OK && rc != Z_STREAM_END) - { - clear(); - throw Exception("Zlib_Decompression: Error finalizing decompression"); - } - - send(buffer.begin(), buffer.size() - zlib->stream.avail_out); - } - - clear(); - } - -/* -* Clean up Decompression Context -*/ -void Zlib_Decompression::clear() - { - no_writes = true; - - if(zlib) - { - inflateEnd(&(zlib->stream)); - delete zlib; - zlib = 0; - } - - buffer.clear(); - } - -} diff --git a/src/codec/zlib/zlib.h b/src/codec/zlib/zlib.h deleted file mode 100644 index 4a7f3bc80..000000000 --- a/src/codec/zlib/zlib.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Zlib Compressor -* (C) 2001 Peter J Jones -* 2001-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ZLIB_H__ -#define BOTAN_ZLIB_H__ - -#include <botan/filter.h> - -namespace Botan { - -/* -* Zlib Compression Filter -*/ -class BOTAN_DLL Zlib_Compression : public Filter - { - public: - void write(const byte input[], u32bit length); - void start_msg(); - void end_msg(); - - void flush(); - - Zlib_Compression(u32bit = 6); - ~Zlib_Compression() { clear(); } - private: - void clear(); - const u32bit level; - SecureVector<byte> buffer; - class Zlib_Stream* zlib; - }; - -/* -* Zlib Decompression Filter -*/ -class BOTAN_DLL Zlib_Decompression : public Filter - { - public: - void write(const byte input[], u32bit length); - void start_msg(); - void end_msg(); - - Zlib_Decompression(); - ~Zlib_Decompression() { clear(); } - private: - void clear(); - SecureVector<byte> buffer; - class Zlib_Stream* zlib; - bool no_writes; - }; - -} - -#endif |