#pragma once
#include <string>

using namespace std;


class CFlashFileUtils
{
	public:
		CFlashFileUtils();
		~CFlashFileUtils();

	public:
		bool InitRSA(const string& strRSAPrivateKeyFileName, const string& strKeyInfo);
		bool DecryptFlashFile(unsigned char* pOutBuffer, unsigned char* pDataBuffer, unsigned int& nDataLen);
		bool EncryptRSAPrivateKey(unsigned char* pOutBuffer, unsigned int& nOutLen, unsigned char* pDataBuffer, unsigned int nDataLen);
		bool DecryptRSAPrivateKey(unsigned char* pOutBuffer, unsigned char* pDataBuffer, unsigned int& nDataLen);
		bool DecryptConfig(string& strConfig, const string& strBuffer);
		bool LoadConfig(std::string& strConfig, const std::string& strFileName);
		void Dump(std::string strFileName, unsigned char* pBuffer, int nDataLen);
		
	private:
		bool RSA_Decrypt(unsigned char* key, const string& strRSAPrivateKeyFileName, const std::string& strKeyInfo);
		bool AES_EncryptRSAPrivateKey(unsigned char* pOutBuffer, unsigned char* pDataBuffer, int nDataLen);
		bool AES_DecryptRSAPrivateKey(unsigned char* pOutBuffer, unsigned char* pDataBuffer, int nDataLen);
		bool AES_DecryptConfig(unsigned char* pOutBuffer, unsigned char* pDataBuffer, int nDataLen);
		bool AES_DecryptEx(unsigned char* pOutBuffer, unsigned char* pDataBuffer, int nDataLen);
		int PKCS7Padding(unsigned char* pBuffer, int nDataLen);
		int DePKCS7Padding(unsigned char* pBuffer, int nDataLen);


	private:
		std::string m_strInitVector;
		bool m_bInitRSA = false;
		unsigned char m_Key[1024] = { 0 };

};
