umain.cpp
来自「著名的SecureBlackBox控件完整源码」· C++ 代码 · 共 252 行
CPP
252 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
SetLicenseKey((AnsiString)
"ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76" +
"FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C" +
"F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47" +
"5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9" +
"F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A" +
"8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43" +
"DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8" +
"BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
FKey = new TElSSHKey;
FKeyGenerated = false;
cbKeyLen->ItemIndex = 2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormDestroy(TObject *Sender)
{
delete FKey;
}
//---------------------------------------------------------------------------
bool TfrmMain::GetSaveFileName(AnsiString DialogTitle)
{
sdKeys->Title = DialogTitle;
if (!sdKeys->Execute())
return false;
return true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbSavePrivateClick(TObject *Sender)
{
AnsiString Password;
if(!FKeyGenerated)
return;
if(!GetSaveFileName("Select file name for private key"))
return;
TfrmGetPassword::GetPassword(Password);
FKey->SavePrivateKey(sdKeys->FileName,Password);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbSavePublicClick(TObject *Sender)
{
if(!FKeyGenerated)
return;
if(!GetSaveFileName("Select file name for public key"))
return;
FKey->SavePublicKey(sdKeys->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbGenerateClick(TObject *Sender)
{
int Bits,KeySize,Status;
AnsiString Key;
// Algorithm
switch (rgAlgorithm->ItemIndex)
{
case 0:
FKey->Algorithm = ALGORITHM_RSA;
break;
case 1:
FKey->Algorithm = ALGORITHM_DSS;
break;
}
// KeyFormat
switch(rgKeyFormat->ItemIndex)
{
case 0:
FKey->KeyFormat = kfOpenSSH;
break;
case 1:
FKey->KeyFormat = kfIETF;
break;
case 2:
FKey->KeyFormat = kfPuTTY;
break;
case 3:
FKey->KeyFormat = kfX509;
break;
}
FKey->Comment = edtComment->Text;
FKey->Subject = edtSubject->Text;
try
{
Bits = StrToInt(cbKeyLen->Text);
}
catch(Exception &e)
{
SetStatus("Invalid key length");
return;
}
// Generating keys
SetStatus("Please wait...Generating key...");
Status = FKey->Generate(FKey->Algorithm,Bits);
ShowStatus(Status);
if (Status != 0)
return;
SetStatus("Keys generated");
ShowKeys();
AllowKeySaving();
}
//---------------------------------------------------------------------------
void TfrmMain::SetStatus(AnsiString AStatus)
{
sbStatus->SimpleText = AStatus;
Update();
Application->ProcessMessages();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void TfrmMain::ShowStatus(int Status)
{
switch(Status)
{
case SB_ERROR_SSH_KEYS_INVALID_PUBLIC_KEY:
SetStatus("SB_ERROR_SSH_KEYS_INVALID_PUBLIC_KEY");
break;
case SB_ERROR_SSH_KEYS_INVALID_PRIVATE_KEY:
SetStatus("SB_ERROR_SSH_KEYS_INVALID_PRIVATE_KEY");
break;
case SB_ERROR_SSH_KEYS_FILE_READ_ERROR:
SetStatus("SB_ERROR_SSH_KEYS_FILE_READ_ERROR");
break;
case SB_ERROR_SSH_KEYS_FILE_WRITE_ERROR:
SetStatus("SB_ERROR_SSH_KEYS_FILE_WRITE_ERROR");
break;
case SB_ERROR_SSH_KEYS_UNSUPPORTED_ALGORITHM:
SetStatus("SB_ERROR_SSH_KEYS_UNSUPPORTED_ALGORITHM");
break;
case SB_ERROR_SSH_KEYS_INTERNAL_ERROR:
SetStatus("SB_ERROR_SSH_KEYS_INTERNAL_ERROR");
break;
case SB_ERROR_SSH_KEYS_BUFFER_TOO_SMALL:
SetStatus("SB_ERROR_SSH_KEYS_BUFFER_TOO_SMALL");
break;
case SB_ERROR_SSH_KEYS_NO_PRIVATE_KEY:
SetStatus("SB_ERROR_SSH_KEYS_NO_PRIVATE_KEY");
break;
case SB_ERROR_SSH_KEYS_INVALID_PASSPHRASE:
SetStatus("SB_ERROR_SSH_KEYS_INVALID_PASSPHRASE");
break;
case SB_ERROR_SSH_KEYS_UNSUPPORTED_PEM_ALGORITHM:
SetStatus("SB_ERROR_SSH_KEYS_UNSUPPORTED_PEM_ALGORITHM");
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::rgKeyFormatClick(TObject *Sender)
{
edtSubject->Enabled = rgKeyFormat->ItemIndex == 1;
if(edtSubject->Enabled)
edtSubject->Color = clWindow;
else
edtSubject->Color = clGrayText;
}
//---------------------------------------------------------------------------
bool TfrmMain::GetOpenFileName(AnsiString DialogTitle)
{
odKeys->Title = DialogTitle;
return odKeys->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbLoadPrivateClick(TObject *Sender)
{
int Status;
AnsiString Password;
if(!GetOpenFileName("Select private key"))
return;
Status = FKey->LoadPrivateKey(odKeys->FileName,Password);
if (Status != 0)
{
Password = "";
if(!TfrmGetPassword::GetPassword(Password))
Password = "";
Status = FKey->LoadPrivateKey(odKeys->FileName,Password);
}
ShowStatus(Status);
if(Status == 0)
{
ShowKeys();
AllowKeySaving();
SetStatus("Private key loaded.");
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbLoadPublicClick(TObject *Sender)
{
int Status;
if(!GetOpenFileName("Select public key"))
return;
Status = FKey->LoadPublicKey(odKeys->FileName);
ShowStatus(Status);
if (Status == 0)
{
ShowKeys();
AllowKeySaving();
SetStatus("Public key loaded.");
}
}
//---------------------------------------------------------------------------
void TfrmMain::ShowKeys(void)
{
int KeySize = 0;
FKey->SavePrivateKey(NULL,KeySize,"");
char* Key = new char[KeySize+1];
memset(Key,0,KeySize+1);
FKey->SavePrivateKey(Key,KeySize,"");
memPrivateKey->Lines->Text = AnsiString(Key);
KeySize = 0;
delete[] Key;
FKey->SavePublicKey(NULL,KeySize);
Key = new char[KeySize+1];
memset(Key,0,KeySize+1);
FKey->SavePublicKey(Key,KeySize);
memPublicKey->Lines->Text = AnsiString(Key);
delete[] Key;
edtSubject->Text = FKey->Subject;
edtComment->Text = FKey->Comment;
}
//---------------------------------------------------------------------------
void TfrmMain::AllowKeySaving(void)
{
FKeyGenerated = true;
tbSavePublic->Enabled = true;
tbSavePrivate->Enabled = true;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?