pgp2comp.pas
来自「用DELPHI实现的 PGP 加密算法」· PAS 代码 · 共 2,057 行 · 第 1/5 页
PAS
2,057 行
end;
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownServerErr);
end;
end;
function TPGPKeyServer.DoGetDefaultServer: Longint;
var
Entry : TStringList;
Pref : pPGPPref;
pKeyServerEntry: pPGPKeyServerEntry;
ServerCount : PGPUInt32;
FlagValue : PGPUInt32;
begin
Pref:=nil;
pKeyServerEntry:=nil;
try
if PGP7X then begin
Result:=kPGPError_PrefNotFound;
if PrefsFile<>nil then with PrefsFile do if LoadPrefs then begin
try
Entry:=TStringList.Create;
if Entry<>nil then with Entry do begin
try
CommaText:=PrefsData.Values[KeyServers + '1'];
if Count>=8 then with FServerEntry do begin
if Strings[0]<>E then ServerProtocol:=TServerType(StrToInt(Strings[0]));
if Strings[3]<>E then ServerDNS:=Strings[3];
if Strings[4]<>E then ServerPort:=StrToInt(Strings[4]);
if Strings[7]<>E then begin
FlagValue:=StrToInt(Strings[7]);
if FlagValue and kKeyServerListed<>0 then Include(ServerFlags, KeyServerListed);
if FlagValue and kKeyServerIsRoot<>0 then Include(ServerFlags, KeyServerIsRoot);
end;
end;
finally
Entry.Free;
end;
Result:=0;
end;
except
end;
PrefsData.Clear;
end;
end
else begin
Result:=PGPclOpenClientPrefs(PGPGetDefaultMemoryMgr, Pref);
if Result=0 then begin
try
Result:=PGPGetKeyServerPrefs(Pref, pKeyServerEntry, ServerCount);
try
if Result=0 then begin
if ServerCount<>0 then begin
with FServerEntry do begin
ServerProtocol:=TServerType(pKeyServerEntry^.Protocol);
ServerDNS:=pKeyServerEntry^.ServerDNS;
ServerPort:=pKeyServerEntry^.ServerPort;
if pKeyServerEntry^.Flags and kKeyServerListed<>0 then Include(ServerFlags, KeyServerListed);
if pKeyServerEntry^.Flags and kKeyServerIsRoot<>0 then Include(ServerFlags, KeyServerIsRoot);
end;
if Assigned(FOnGetDefaultServer) then FOnGetDefaultServer(FServerEntry);
end
else Result:=kPGPError_PrefNotFound;
end;
finally
PGPFreeData(pKeyServerEntry);
end;
finally
PGPclCloseClientPrefs(Pref, false);
end;
end;
end;
if Result<0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownServerErr);
end;
end;
function TPGPKeyServer.DoSetDefaultServer: Longint;
var
Entry : TStringList;
Pref : pPGPPref;
pKeyServerEntry: pPGPKeyServerEntry;
ServerCount : PGPUInt32;
FlagValue : PGPUint32;
begin
Pref:=nil;
pKeyServerEntry:=nil;
try
if PGP7X then begin
Result:=kPGPError_PrefNotFound;
if PrefsFile<>nil then with PrefsFile do if LoadPrefs then begin
try
Entry:=TStringList.Create;
if Entry<>nil then with Entry do begin
try
CommaText:=PrefsData.Values[KeyServers + '1'];
if Count>=8 then with FServerEntry do begin
FlagValue:=ord(KeyServerListed in ServerFlags) * kKeyServerListed or
ord(KeyServerIsRoot in ServerFlags) * kKeyServerIsRoot;
Text:=IntToStr(ord(ServerProtocol)) + CM +
Strings[1] + CM +
QU + Strings[2] + QU + CM +
QU + ServerDNS + QU + CM +
IntToStr(ServerPort) + CM +
QU + Strings[5] + QU + CM +
Strings[6] + CM +
IntToStr(FlagValue);
end;
PrefsData.Values[KeyServers + '1']:=TrimRight(Text);
finally
Entry.Free;
end;
if SavePrefs then Result:=0;
end;
except
end;
PrefsData.Clear;
end;
end
else begin
Result:=PGPclOpenClientPrefs(PGPGetDefaultMemoryMgr, Pref);
if Result=0 then begin
try
Result:=PGPGetKeyServerPrefs(Pref, pKeyServerEntry, ServerCount);
try
if Result=0 then begin
if ServerCount<>0 then begin
if Assigned(FOnSetDefaultServer) then FOnSetDefaultServer(FServerEntry);
with FServerEntry do begin
pKeyServerEntry^.StructSize:=SizeOf(TPGPKeyServerEntry);
if ServerProtocol<>KeyServerType_Invalid then
pKeyServerEntry^.Protocol:=PGPKeyServerProtocol(ServerProtocol)
else begin
Result:=kPGPError_BadParams;
Exit;
end;
if ServerDNS<>EMPTY then
StrPLCopy(pKeyServerEntry^.ServerDNS, ServerDNS, kMaxServerNameLength)
else begin
Result:=kPGPError_BadParams;
Exit;
end;
pKeyServerEntry^.ServerPort:=ServerPort;
pKeyServerEntry^.Flags:=ord(KeyServerListed in ServerFlags) * kKeyServerListed or
ord(KeyServerIsRoot in ServerFlags) * kKeyServerIsRoot;
end;
Result:=PGPSetKeyServerPrefs(Pref, pKeyServerEntry, ServerCount);
if Result=0 then PGPclNotifyPrefsChanges(GetCurrentProcessID);
end
else Result:=kPGPError_PrefNotFound;
end;
finally
PGPFreeData(pKeyServerEntry);
end;
finally
PGPclCloseClientPrefs(Pref, true);
end;
end;
end;
if Result<0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownServerErr);
end;
end;
// TPGPKeysGenerate ------------------------------------------------------------
constructor TPGPKeysGenerate.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if AOwner is TForm then ParentHandle:=TForm(AOwner).Handle;
end;
function TPGPKeysGenerate.DHDSSKeyGenerate: Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited DHDSSKeyGenerate;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else ShowError(FOnFailure, -1, UnknownKeyGenErr);
end;
end;
function TPGPKeysGenerate.DHSubKeyGenerate: Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited DHSubKeyGenerate;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else ShowError(FOnFailure, -1, UnknownKeyGenErr);
end;
end;
function TPGPKeysGenerate.DSAKeyGenerate: Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited DSAKeyGenerate;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else ShowError(FOnFailure, -1, UnknownKeyGenErr);
end;
end;
function TPGPKeysGenerate.RSASubKeyGenerate: Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited RSASubKeyGenerate;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else ShowError(FOnFailure, -1, UnknownKeyGenErr);
end;
end;
function TPGPKeysGenerate.RSAKeyGenerate(Legacy: Longbool): Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited RSAKeyGenerate(Legacy);
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else ShowError(FOnFailure, -1, UnknownKeyGenErr);
end;
end;
// TPGPKeyImport ---------------------------------------------------------------
constructor TPGPKeyImport.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if AOwner is TForm then FParentHandle:=TForm(AOwner).Handle;
end;
destructor TPGPKeyImport.Destroy;
begin
inherited Destroy;
end;
function TPGPKeyImport.DoKeyImport: Longint;
var
KeyPropsList : TKeyPropsList;
begin
Result:=kPGPError_ItemNotFound;
KeyPropsList:=nil;
FKeyProps:=FKeyProps + KeyProps_IDComplete;
try
if FKeyData<>EMPTY then begin
Result:=KeyImportDialog(FKeyDlgPrompt, FKeyData, KeyPropsList, false,
ord(Ignore_ByHexID in FIgnoreKnownKeys)*IgnoreFlag_ByHexID or
ord(Ignore_ByUserID in FIgnoreKnownKeys)*IgnoreFlag_ByUserID,
GetKeyPropsFlag(FKeyProps), FParentHandle);
try
if (Result=0) or ((Result=kPGPError_FilePermissions) and (KeyPropsList.Count>0)) then begin
if Assigned(FOnKeyImported) then FOnKeyImported(KeyPropsList, KeyPropsList.Count);
end;
finally
KeyPropsList.Free;
end;
end;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownKeyImportErr);
end;
end;
function TPGPKeyImport.DoKeyImportFile: Longint;
var
KeyPropsList : TKeyPropsList;
begin
Result:=kPGPError_FileNotFound;
KeyPropsList:=nil;
FKeyProps:=FKeyProps + KeyProps_IDComplete;
try
if Assigned(FOnGetFileIn) then FOnGetFileIn(FFileIn);
if FFileIn<>EMPTY then begin
Result:=KeyImportDialog(FKeyDlgPrompt, FFileIn, KeyPropsList, true,
ord(Ignore_ByHexID in FIgnoreKnownKeys)*IgnoreFlag_ByHexID or
ord(Ignore_ByUserID in FIgnoreKnownKeys)*IgnoreFlag_ByUserID,
GetKeyPropsFlag(FKeyProps), FParentHandle);
try
if (Result=0) or ((Result=kPGPError_FilePermissions) and (KeyPropsList.Count>0)) then begin
if Assigned(FOnKeyImported) then FOnKeyImported(KeyPropsList, KeyPropsList.Count);
end;
finally
KeyPropsList.Free;
end;
end;
if Result<>0 then ShowError(FOnFailure, Result, EMPTY);
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownKeyImportErr);
end;
end;
// TPGPKeyExport ---------------------------------------------------------------
constructor TPGPKeyExport.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FExportCompatible:=true;
FKeyIDs:=TStringList.Create;
if AOwner is TForm then FParentHandle:=TForm(AOwner).Handle;
end;
destructor TPGPKeyExport.Destroy;
begin
FKeyIDs.Free;
inherited Destroy;
end;
procedure TPGPKeyExport.SetKeyIDs(const Value: TStrings);
begin
FKeyIDs.Assign(Value);
end;
function TPGPKeyExport.DoKeyExport: Longint;
var
KeyPropsList : TKeyPropsList;
begin
Result:=kPGPError_ItemNotFound;
FKeyData:=EMPTY;
KeyPropsList:=nil;
FKeyProps:=FKeyProps + KeyProps_IDComplete;
try
if (FKeyIDs<>nil) or (FKeyDlgPrompt<>EMPTY) then begin
Result:=KeyExportDialog(FKeyDlgPrompt, FKeyIDs, FKeyData,
KeyPropsList, false,
FExportCompatible, FExportPrivate,
GetKeyPropsFlag(FKeyProps), FParentHandle);
end;
try
if Result=0 then begin
if Assigned(FOnKeyExported) then FOnKeyExported(KeyPropsList, FKeyData, EMPTY);
end
else ShowError(FOnFailure, Result, EMPTY);
finally
KeyPropsList.Free;
end;
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownKeyExportErr);
end;
end;
function TPGPKeyExport.DoKeyExportFile: Longint;
var
KeyPropsList : TKeyPropsList;
begin
Result:=kPGPError_FileNotFound;
FKeyData:=EMPTY;
KeyPropsList:=nil;
FKeyProps:=FKeyProps + KeyProps_IDComplete;
try
if Assigned(FOnGetFileOut) then FOnGetFileOut(FFileOut);
if FFileOut<>EMPTY then begin
Result:=kPGPError_ItemNotFound;
if (FKeyIDs<>nil) or (FKeyDlgPrompt<>EMPTY) then begin
Result:=KeyExportDialog(FKeyDlgPrompt, FKeyIDs, FFileOut,
KeyPropsList, true,
FExportCompatible, FExportPrivate,
GetKeyPropsFlag(FKeyProps), FParentHandle);
end;
try
if Result=0 then begin
if Assigned(FOnKeyExported) then FOnKeyExported(KeyPropsList, EMPTY, FFileOut);
end
else ShowError(FOnFailure, Result, EMPTY);
finally
KeyPropsList.Free;
end;
end;
except
on EFailException do Raise;
else Result:=ShowError(FOnFailure, -1, UnknownKeyExportErr);
end;
end;
// TPGPEncode ------------------------------------------------------------------
constructor TPGPEncode.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if AOwner is TForm then ParentHandle:=TForm(AOwner).Handle;
end;
function TPGPEncode.KeyEncryptBuffer(const DataBuffer: String; Sign: Longbool): Longint;
begin
Result:=kPGPError_UnknownError;
try
Result:=inherited KeyEncryptBuffer(DataBuffer, Sign);
if Result=0 then begin
if Assigned(FOnEncoded) then FOnEncoded(Outp
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?