| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | //---------------------------------------------------------------------------#ifndef CryptographyH#define CryptographyH//---------------------------------------------------------------------------void __fastcall CryptographyInitialize();void __fastcall CryptographyFinalize();void RequireTls();RawByteString __fastcall ScramblePassword(UnicodeString Password);bool __fastcall UnscramblePassword(RawByteString Scrambled, UnicodeString & Password);void __fastcall AES256EncyptWithMAC(RawByteString Input, UnicodeString Password,  RawByteString & Output);bool __fastcall AES256DecryptWithMAC(RawByteString Input, UnicodeString Password,  RawByteString & Output);void __fastcall AES256CreateVerifier(UnicodeString Input, RawByteString & Verifier);bool __fastcall AES256Verify(UnicodeString Input, RawByteString Verifier);int __fastcall IsValidPassword(UnicodeString Password);int __fastcall PasswordMaxLength();RawByteString GenerateEncryptKey();void ValidateEncryptKey(const RawByteString & Key);//---------------------------------------------------------------------------class TFileBuffer;typedef void AESContext;//---------------------------------------------------------------------------class TEncryption{public:  TEncryption(const RawByteString & Key);  ~TEncryption() EXCEPT;  static bool IsEncryptedFileName(const UnicodeString & FileName);  void Encrypt(TFileBuffer & Buffer, bool Last);  void Decrypt(TFileBuffer & Buffer);  bool DecryptEnd(TFileBuffer & Buffer);  UnicodeString EncryptFileName(const UnicodeString & FileName);  UnicodeString DecryptFileName(const UnicodeString & FileName);  static int GetOverhead();  static int RoundToBlock(int Size);  static int RoundToBlockDown(int Size);private:  RawByteString FKey;  RawByteString FSalt;  RawByteString FInputHeader;  RawByteString FOverflowBuffer;  bool FOutputtedHeader;  AESContext * FContext;  void Init(const RawByteString & Key, const RawByteString & Salt);  void Aes(char * Buffer, int Size);  void Aes(RawByteString & Buffer);  void Aes(TFileBuffer & Buffer, bool Last);  void NeedSalt();  void SetSalt();};//---------------------------------------------------------------------------#endif
 |