home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 January / Chip_1999-01_cd.bin / zkuste / delphi / D4 / BLOWNREG.ZIP / CBUILD3 / BLOWFISH.HPP < prev    next >
C/C++ Source or Header  |  1998-09-03  |  4KB  |  148 lines

  1. // Borland C++ Builder
  2. // Copyright (c) 1995, 1998 by Borland International
  3. // All rights reserved
  4.  
  5. // (DO NOT EDIT: machine generated header) 'Blowfish.pas' rev: 3.00
  6.  
  7. #ifndef BlowfishHPP
  8. #define BlowfishHPP
  9. #include <Classes.hpp>
  10. #include <SysInit.hpp>
  11. #include <System.hpp>
  12.  
  13. //-- user supplied -----------------------------------------------------------
  14.  
  15. namespace Blowfish
  16. {
  17. //-- type declarations -------------------------------------------------------
  18. #pragma pack(push, 1)
  19. struct SingleBytes
  20. {
  21.     Byte byte3;
  22.     Byte byte2;
  23.     Byte byte1;
  24.     Byte byte0;
  25. } ;
  26. #pragma pack(pop)
  27.  
  28. #pragma pack(push, 1)
  29. struct DoublWord
  30. {
  31.     
  32.     union
  33.     {
  34.         Byte fByte[4];
  35.         SingleBytes w;
  36.         int LWord;
  37.         
  38.     };
  39. } ;
  40. #pragma pack(pop)
  41.  
  42. typedef DoublWord *PDoublWord;
  43.  
  44. typedef Byte TBlock[8];
  45.  
  46. typedef TBlock *PBlock;
  47.  
  48. typedef int PArray[18];
  49.  
  50. typedef int SArray[4][256];
  51.  
  52. #pragma pack(push, 1)
  53. struct Tblf_ctx
  54. {
  55.     bool Initialised;
  56.     bool IVInitialised;
  57.     Byte IV[8];
  58.     Byte ct[8];
  59.     int S[4][256];
  60.     int P[18];
  61.     union
  62.     {
  63.         int LongBuffer[2];
  64.         Byte ByteBuffer[8];
  65.         
  66.     };
  67. } ;
  68. #pragma pack(pop)
  69.  
  70. enum TCipherMode { ECB, CBC, CFB, OFB };
  71.  
  72. enum TStringMode { smEncode, smNormal };
  73.  
  74. class DELPHICLASS TBlowfish;
  75. class PASCALIMPLEMENTATION TBlowfish : public Classes::TComponent 
  76. {
  77.     typedef Classes::TComponent inherited;
  78.     
  79. private:
  80.     Tblf_ctx ctx;
  81.     DoublWord *FPtrL;
  82.     DoublWord *FPtrR;
  83.     Byte FBuffer[4105];
  84.     TBlock *PtrBuffer;
  85.     TCipherMode FCipherMode;
  86.     TStringMode FStringMode;
  87.     void __fastcall NagRegister(void);
  88.     void __fastcall InitialiseCore(const System::AnsiString key, int keybytes);
  89.     void __fastcall Core_Encipher(void);
  90.     void __fastcall Core_Decipher(void);
  91.     int __fastcall EncryptBuffer(int &Len);
  92.     int __fastcall DecryptBuffer(int &Len);
  93.     void __fastcall EncryptBlockMode(void);
  94.     void __fastcall DecryptBlockMode(void);
  95.     void __fastcall DoRound(DoublWord &a, DoublWord &b, Byte n);
  96.     void __fastcall InitArray(void);
  97.     void __fastcall EncBlock(void);
  98.     void __fastcall DecBlock(void);
  99.     System::AnsiString __fastcall EncodeString(System::AnsiString InputString);
  100.     System::AnsiString __fastcall DecodeString(System::AnsiString InputString);
  101.     
  102. public:
  103.     int __fastcall InitialiseString(const System::AnsiString Key);
  104.     int __fastcall InitialiseByte(const Byte * Key, const int Key_Size, int keylength);
  105.     void __fastcall LoadIVString(const System::AnsiString IVString);
  106.     void __fastcall LoadIVByte(const Byte * IVByte, const int IVByte_Size, int IVLength);
  107.     int __fastcall EncryptString(const System::AnsiString Input, System::AnsiString &Output);
  108.     int __fastcall DecryptString(const System::AnsiString Input, System::AnsiString &Output);
  109.     int __fastcall EncryptBlock(const Byte * Input, Byte * Output);
  110.     int __fastcall DecryptBlock(const Byte * Input, Byte * Output);
  111.     int __fastcall EncryptFile(const System::AnsiString InputFileName, System::AnsiString OutputFileName
  112.         );
  113.     int __fastcall DecryptFile(const System::AnsiString InputFileName, System::AnsiString OutputFileName
  114.         );
  115.     int __fastcall CBCMACBlock(Byte * MAC);
  116.     int __fastcall CBCMACString(System::AnsiString &MAC);
  117.     void __fastcall Burn(void);
  118.     System::AnsiString __fastcall GetVersion(void);
  119.     
  120. __published:
  121.     __property TCipherMode CipherMode = {read=FCipherMode, write=FCipherMode, nodefault};
  122.     __property TStringMode StringMode = {read=FStringMode, write=FStringMode, nodefault};
  123. public:
  124.     /* TComponent.Create */ __fastcall virtual TBlowfish(Classes::TComponent* AOwner) : Classes::TComponent(
  125.         AOwner) { }
  126.     /* TComponent.Destroy */ __fastcall virtual ~TBlowfish(void) { }
  127.     
  128. };
  129.  
  130. //-- var, const, procedure ---------------------------------------------------
  131. #define OK (Byte)(0)
  132. #define KEY_NOT_SET (Shortint)(-1)
  133. #define ZERO_KEY_LENGTH (Shortint)(-2)
  134. #define MSG_TOO_SHORT (Shortint)(-3)
  135. #define IV_NOT_SET (Shortint)(-4)
  136. #define FILE_ERROR (Shortint)(-5)
  137. #define MODE_NOT_CBC (Shortint)(-6)
  138. #define BLOCKSIZE (Byte)(8)
  139. #define BUFFERLENGTH (Word)(4096)
  140. extern PACKAGE void __fastcall Register(void);
  141.  
  142. }    /* namespace Blowfish */
  143. #if !defined(NO_IMPLICIT_NAMESPACE_USE)
  144. using namespace Blowfish;
  145. #endif
  146. //-- end unit ----------------------------------------------------------------
  147. #endif    // Blowfish
  148.