- Main Page
- Namespaces
- Classes
- Files

# basecode.h

    00001 #ifndef CRYPTOPP_BASECODE_H
    00002 #define CRYPTOPP_BASECODE_H
    00003
    00004 #include "filters.h"
    00005 #include "algparam.h"
    00006 #include "argnames.h"
    00007
    00008 NAMESPACE_BEGIN(CryptoPP)
    00009
    00010 //! base n encoder, where n is a power of 2
    00011 class CRYPTOPP_DLL BaseN_Encoder : public Unflushable<Filter>
    00012 {
    00013 public:
    00014         BaseN_Encoder(BufferedTransformation *attachment=NULL)
    00015                 {Detach(attachment);}
    00016
    00017         BaseN_Encoder(const byte *alphabet, int log2base, BufferedTransformation *attachment=NULL, int padding=-1)
    00018         {
    00019                 Detach(attachment);
    00020                 IsolatedInitialize(MakeParameters(Name::EncodingLookupArray(), alphabet)
    00021                         (Name::Log2Base(), log2base)
    00022                         (Name::Pad(), padding != -1)
    00023                         (Name::PaddingByte(), byte(padding)));
    00024         }
    00025
    00026         void IsolatedInitialize(const NameValuePairs &parameters);
    00027         size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);
    00028
    00029 private:
    00030         const byte *m_alphabet;
    00031         int m_padding, m_bitsPerChar, m_outputBlockSize;
    00032         int m_bytePos, m_bitPos;
    00033         SecByteBlock m_outBuf;
    00034 };
    00035
    00036 //! base n decoder, where n is a power of 2
    00037 class CRYPTOPP_DLL BaseN_Decoder : public Unflushable<Filter>
    00038 {
    00039 public:
    00040         BaseN_Decoder(BufferedTransformation *attachment=NULL)
    00041                 {Detach(attachment);}
    00042
    00043         BaseN_Decoder(const int *lookup, int log2base, BufferedTransformation *attachment=NULL)
    00044         {
    00045                 Detach(attachment);
    00046                 IsolatedInitialize(MakeParameters(Name::DecodingLookupArray(), lookup)(Name::Log2Base(), log2base));
    00047         }
    00048
    00049         void IsolatedInitialize(const NameValuePairs &parameters);
    00050         size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);
    00051
    00052         static void CRYPTOPP_API InitializeDecodingLookupArray(int *lookup, const byte *alphabet, unsigned int base, bool caseInsensitive);
    00053
    00054 private:
    00055         const int *m_lookup;
    00056         int m_padding, m_bitsPerChar, m_outputBlockSize;
    00057         int m_bytePos, m_bitPos;
    00058         SecByteBlock m_outBuf;
    00059 };
    00060
    00061 //! filter that breaks input stream into groups of fixed size
    00062 class CRYPTOPP_DLL Grouper : public Bufferless<Filter>
    00063 {
    00064 public:
    00065         Grouper(BufferedTransformation *attachment=NULL)
    00066                 {Detach(attachment);}
    00067
    00068         Grouper(int groupSize, const std::string &separator, const std::string &terminator, BufferedTransformation *attachment=NULL)
    00069         {
    00070                 Detach(attachment);
    00071                 IsolatedInitialize(MakeParameters(Name::GroupSize(), groupSize)
    00072                         (Name::Separator(), ConstByteArrayParameter(separator))
    00073                         (Name::Terminator(), ConstByteArrayParameter(terminator)));
    00074         }
    00075
    00076         void IsolatedInitialize(const NameValuePairs &parameters);
    00077         size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);
    00078
    00079 private:
    00080         SecByteBlock m_separator, m_terminator;
    00081         size_t m_groupSize, m_counter;
    00082 };
    00083
    00084 NAMESPACE_END
    00085
    00086 #endif