#include "StdAfx.h"
#include "Interno.h"
#include "Cryptopp/osrng.h"
#include "Cryptopp/base64.h"
//#include "Cryptopp/default.h"
#include "Cryptopp/gzip.h"
//#include "Cryptopp/zlib.h"
#include "RSAEnc.h"
using namespace std;
using namespace CryptoPP;
CInterno::CInterno()
{
encrsa = new CRSAEnc();
}
CInterno::~CInterno()
{
delete encrsa;
}
void ProcessBuffTrans(BufferedTransformation& buf, const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
buf.Put(input, inputlen);
buf.MessageEnd();
int len = buf.MaxRetrievable();
*output = new BYTE[len];
buf.Get(*output, len);
*outputlen = len;
}
void ReplaceEnter(BYTE** input, int* inputlen)
{
int shift = 0;
BYTE car;
for (int i=0;i<(*inputlen);i++)
{
car = (*input)[i];
if (car == 13 || car == 10)
shift++;
else
{
if (shift > 0)
(*input)[i-shift] = (*input)[i];
}
}
*inputlen = *inputlen - shift;
}
void CInterno::EncodeB64(const BYTE* input, int inputlen,BYTE** output, int* outputlen, BOOL Enters)
{
Base64Encoder ber;
ProcessBuffTrans(ber, input, inputlen, output, outputlen);
if (!Enters)
ReplaceEnter(output, outputlen);
}
void CInterno::DecodeB64(const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
Base64Decoder ber;
ProcessBuffTrans(ber, input, inputlen, output, outputlen);
}
void CInterno::GZip(const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
Gzip zip;
ProcessBuffTrans(zip, input, inputlen, output, outputlen);
}
void CInterno::UnGZip(const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
Gunzip unzip;
ProcessBuffTrans(unzip, input, inputlen, output, outputlen);
}
void CInterno::EncryptRSA(const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
((CRSAEnc*)encrsa)->Encrypt(input, inputlen,output, outputlen);
}
void CInterno::DecryptRSA(const BYTE* input, int inputlen,BYTE** output, int* outputlen)
{
((CRSAEnc*)encrsa)->Decrypt(input, inputlen,output, outputlen);
}
void CInterno::InitRSA(CRSAKey& rsakey)
{
((CRSAEnc*)encrsa)->Init(rsakey);
}