00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef XSCRYPTCRYPTOBASE64_INCLUDE
00029 #define XSCRYPTCRYPTOBASE64_INCLUDE
00030
00031 #include <xsec/framework/XSECDefs.hpp>
00032 #include <xsec/enc/XSECCryptoBase64.hpp>
00033 #include <xsec/utils/XSECSafeBuffer.hpp>
00034
00046 class DSIG_EXPORT XSCryptCryptoBase64 : public XSECCryptoBase64 {
00047
00048
00049 public :
00050
00051
00052
00053 XSCryptCryptoBase64() : m_state(B64_UNINITIALISED) {};
00054 virtual ~XSCryptCryptoBase64() {};
00055
00058
00067 virtual void decodeInit(void);
00068
00082 virtual unsigned int decode(const unsigned char * inData,
00083 unsigned int inLength,
00084 unsigned char * outData,
00085 unsigned int outLength);
00086
00098 virtual unsigned int decodeFinish(unsigned char * outData,
00099 unsigned int outLength);
00100
00102
00105
00113 virtual void encodeInit(void);
00114
00126 virtual unsigned int encode(const unsigned char * inData,
00127 unsigned int inLength,
00128 unsigned char * outData,
00129 unsigned int outLength);
00130
00143 virtual unsigned int encodeFinish(unsigned char * outData,
00144 unsigned int outLength);
00145
00147
00148 private :
00149
00150 enum b64state {
00151
00152 B64_UNINITIALISED,
00153 B64_ENCODE,
00154 B64_DECODE,
00155 };
00156
00157 safeBuffer m_inputBuffer;
00158 safeBuffer m_outputBuffer;
00159
00160 unsigned int m_remainingInput;
00161 unsigned int m_remainingOutput;
00162
00163 bool m_allDone;
00164
00165 b64state m_state;
00166
00167 unsigned int m_charCount;
00168
00169
00170 void canonicaliseInput(const unsigned char *inData, unsigned int inLength);
00171
00172 };
00173
00174 #endif