| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | //---------------------------------------------------------------------------#ifndef KeyGenH#define KeyGenH//---------------------------------------------------------------------------enum TKeyType { ktRSA1, ktRSA2, ktDSA };typedef unsigned TEntropyBit;class TKeyGenerationThread;class TKeyGenerator;enum TKeyGeneratorState { kgInitializing, kgInitialized, kgGenerating, kgComplete };enum TKeyGenerationComplete { kgInProgress, kgSuccess, kgFailure };enum TKeyFormat { kfPutty, kfOpenSSH, kfSSHCom };typedef void __fastcall (__closure *TKeyGeneratorGenerating)  (TKeyGenerator * Generator, int Range, int Position, TKeyGenerationComplete Complete);//---------------------------------------------------------------------------struct ssh2_userkey;struct RSAKey;struct dss_key;//---------------------------------------------------------------------------class TKeyGenerator : public TObject{friend class TKeyGenerationThread;private:  AnsiString FComment;  int FKeySize;  TKeyType FKeyType;  TEntropyBit * FEntropy;  int FEntropyGot;  int FEntropyRequired;  AnsiString FFingerprint;  TKeyGeneratorState FState;  int FGenerationRange;  int FGenerationPosition;  TKeyGeneratorGenerating FOnGenerating;  AnsiString FPublicKey;  TKeyGenerationThread * FThread;  AnsiString __fastcall GetAuthorizedKeysLine();  AnsiString __fastcall GetFingerprint();  bool __fastcall GetIsSSH2();  struct ssh2_userkey * FSSH2Key;  int __fastcall GetPercentGenerated();  AnsiString __fastcall GetPublicKey();  void __fastcall SetComment(AnsiString value);  void __fastcall SetKeySize(int value);  void __fastcall SetKeyType(TKeyType value);protected:  // both written by TKeyGenerationThread (from different thread)  RSAKey * FRSAKey;  dss_key * FDSSKey;  // called by TKeyGenerationThread (from main VCL thread)  void __fastcall ProgressUpdate(int Range, int Position, TKeyGenerationComplete Complete);  void __fastcall ResetKey();public:  __fastcall TKeyGenerator();  virtual __fastcall ~TKeyGenerator();  void __fastcall AddEntropy(TEntropyBit Entropy);  void __fastcall Generate();  void __fastcall SaveKey(const AnsiString FileName,    const AnsiString Passphrase, TKeyFormat Format);  void __fastcall StartGenerationThread();  __property AnsiString AuthorizedKeysLine = { read = GetAuthorizedKeysLine };  __property AnsiString Comment = { read = FComment, write = SetComment };  __property int EntropyGot = { read = FEntropyGot };  __property int EntropyRequired = { read = FEntropyRequired };  __property AnsiString Fingerprint = { read = GetFingerprint };  __property bool IsSSH2 = { read = GetIsSSH2 };  __property TKeyGeneratorState State = { read = FState };  __property int KeySize = { read = FKeySize, write = SetKeySize };  __property TKeyType KeyType = { read = FKeyType, write = SetKeyType };  __property TKeyGeneratorGenerating OnGenerating = { read = FOnGenerating, write = FOnGenerating };  __property int PercentGenerated = { read = GetPercentGenerated };  __property AnsiString PublicKey = { read = GetPublicKey };};//---------------------------------------------------------------------------#endif
 |