Added libb64-1.2.1 for base64 encoding/decoding
This commit is contained in:
29
external/libb64-1.2.1/include/b64/cdecode.h
vendored
Normal file
29
external/libb64-1.2.1/include/b64/cdecode.h
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
cdecode.h - c header for a base64 decoding algorithm
|
||||
|
||||
This is part of the libb64 project, and has been placed in the public domain.
|
||||
For details, see http://sourceforge.net/projects/libb64
|
||||
*/
|
||||
|
||||
#ifndef BASE64_CDECODE_H
|
||||
#define BASE64_CDECODE_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
step_a, step_b, step_c, step_d
|
||||
} base64_decodestep;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
base64_decodestep step;
|
||||
char plainchar;
|
||||
} base64_decodestate;
|
||||
|
||||
void base64_init_decodestate(base64_decodestate* state_in);
|
||||
|
||||
int base64_decode_value(char value_in);
|
||||
|
||||
int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in);
|
||||
|
||||
#endif /* BASE64_CDECODE_H */
|
||||
|
32
external/libb64-1.2.1/include/b64/cencode.h
vendored
Normal file
32
external/libb64-1.2.1/include/b64/cencode.h
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
cencode.h - c header for a base64 encoding algorithm
|
||||
|
||||
This is part of the libb64 project, and has been placed in the public domain.
|
||||
For details, see http://sourceforge.net/projects/libb64
|
||||
*/
|
||||
|
||||
#ifndef BASE64_CENCODE_H
|
||||
#define BASE64_CENCODE_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
step_A, step_B, step_C
|
||||
} base64_encodestep;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
base64_encodestep step;
|
||||
char result;
|
||||
int stepcount;
|
||||
} base64_encodestate;
|
||||
|
||||
void base64_init_encodestate(base64_encodestate* state_in);
|
||||
|
||||
char base64_encode_value(char value_in);
|
||||
|
||||
int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in);
|
||||
|
||||
int base64_encode_blockend(char* code_out, base64_encodestate* state_in);
|
||||
|
||||
#endif /* BASE64_CENCODE_H */
|
||||
|
70
external/libb64-1.2.1/include/b64/decode.h
vendored
Normal file
70
external/libb64-1.2.1/include/b64/decode.h
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
// :mode=c++:
|
||||
/*
|
||||
decode.h - c++ wrapper for a base64 decoding algorithm
|
||||
|
||||
This is part of the libb64 project, and has been placed in the public domain.
|
||||
For details, see http://sourceforge.net/projects/libb64
|
||||
*/
|
||||
#ifndef BASE64_DECODE_H
|
||||
#define BASE64_DECODE_H
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace base64
|
||||
{
|
||||
extern "C"
|
||||
{
|
||||
#include "cdecode.h"
|
||||
}
|
||||
|
||||
struct decoder
|
||||
{
|
||||
base64_decodestate _state;
|
||||
int _buffersize;
|
||||
|
||||
decoder(int buffersize_in = BUFFERSIZE)
|
||||
: _buffersize(buffersize_in)
|
||||
{}
|
||||
|
||||
int decode(char value_in)
|
||||
{
|
||||
return base64_decode_value(value_in);
|
||||
}
|
||||
|
||||
int decode(const char* code_in, const int length_in, char* plaintext_out)
|
||||
{
|
||||
return base64_decode_block(code_in, length_in, plaintext_out, &_state);
|
||||
}
|
||||
|
||||
void decode(std::istream& istream_in, std::ostream& ostream_in)
|
||||
{
|
||||
base64_init_decodestate(&_state);
|
||||
//
|
||||
const int N = _buffersize;
|
||||
char* code = new char[N];
|
||||
char* plaintext = new char[N];
|
||||
int codelength;
|
||||
int plainlength;
|
||||
|
||||
do
|
||||
{
|
||||
istream_in.read((char*)code, N);
|
||||
codelength = istream_in.gcount();
|
||||
plainlength = decode(code, codelength, plaintext);
|
||||
ostream_in.write((const char*)plaintext, plainlength);
|
||||
}
|
||||
while (istream_in.good() && codelength > 0);
|
||||
//
|
||||
base64_init_decodestate(&_state);
|
||||
|
||||
delete [] code;
|
||||
delete [] plaintext;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace base64
|
||||
|
||||
|
||||
|
||||
#endif // BASE64_DECODE_H
|
||||
|
77
external/libb64-1.2.1/include/b64/encode.h
vendored
Normal file
77
external/libb64-1.2.1/include/b64/encode.h
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
// :mode=c++:
|
||||
/*
|
||||
encode.h - c++ wrapper for a base64 encoding algorithm
|
||||
|
||||
This is part of the libb64 project, and has been placed in the public domain.
|
||||
For details, see http://sourceforge.net/projects/libb64
|
||||
*/
|
||||
#ifndef BASE64_ENCODE_H
|
||||
#define BASE64_ENCODE_H
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace base64
|
||||
{
|
||||
extern "C"
|
||||
{
|
||||
#include "cencode.h"
|
||||
}
|
||||
|
||||
struct encoder
|
||||
{
|
||||
base64_encodestate _state;
|
||||
int _buffersize;
|
||||
|
||||
encoder(int buffersize_in = BUFFERSIZE)
|
||||
: _buffersize(buffersize_in)
|
||||
{}
|
||||
|
||||
int encode(char value_in)
|
||||
{
|
||||
return base64_encode_value(value_in);
|
||||
}
|
||||
|
||||
int encode(const char* code_in, const int length_in, char* plaintext_out)
|
||||
{
|
||||
return base64_encode_block(code_in, length_in, plaintext_out, &_state);
|
||||
}
|
||||
|
||||
int encode_end(char* plaintext_out)
|
||||
{
|
||||
return base64_encode_blockend(plaintext_out, &_state);
|
||||
}
|
||||
|
||||
void encode(std::istream& istream_in, std::ostream& ostream_in)
|
||||
{
|
||||
base64_init_encodestate(&_state);
|
||||
//
|
||||
const int N = _buffersize;
|
||||
char* plaintext = new char[N];
|
||||
char* code = new char[2*N];
|
||||
int plainlength;
|
||||
int codelength;
|
||||
|
||||
do
|
||||
{
|
||||
istream_in.read(plaintext, N);
|
||||
plainlength = istream_in.gcount();
|
||||
//
|
||||
codelength = encode(plaintext, plainlength, code);
|
||||
ostream_in.write(code, codelength);
|
||||
}
|
||||
while (istream_in.good() && plainlength > 0);
|
||||
|
||||
codelength = encode_end(code);
|
||||
ostream_in.write(code, codelength);
|
||||
//
|
||||
base64_init_encodestate(&_state);
|
||||
|
||||
delete [] code;
|
||||
delete [] plaintext;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace base64
|
||||
|
||||
#endif // BASE64_ENCODE_H
|
||||
|
Reference in New Issue
Block a user