//--------------------------------------------------------------------------- #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