📄 synassl.pas
字号:
_CRYPTOcleanupAllExData;
end;
procedure RandScreen;
begin
if InitSSLInterface and Assigned(_RandScreen) then
_RandScreen;
end;
function BioNew(b: PBIO_METHOD): PBIO;
begin
if InitSSLInterface and Assigned(_BioNew) then
Result := _BioNew(b)
else
Result := nil;
end;
procedure BioFreeAll(b: PBIO);
begin
if InitSSLInterface and Assigned(_BioFreeAll) then
_BioFreeAll(b);
end;
function BioSMem: PBIO_METHOD;
begin
if InitSSLInterface and Assigned(_BioSMem) then
Result := _BioSMem
else
Result := nil;
end;
function BioCtrlPending(b: PBIO): integer;
begin
if InitSSLInterface and Assigned(_BioCtrlPending) then
Result := _BioCtrlPending(b)
else
Result := 0;
end;
//function BioRead(b: PBIO; Buf: PChar; Len: integer): integer;
function BioRead(b: PBIO; var Buf: String; Len: integer): integer;
begin
if InitSSLInterface and Assigned(_BioRead) then
Result := _BioRead(b, PChar(Buf), Len)
else
Result := -2;
end;
//function BioWrite(b: PBIO; Buf: PChar; Len: integer): integer;
function BioWrite(b: PBIO; Buf: String; Len: integer): integer;
begin
if InitSSLInterface and Assigned(_BioWrite) then
Result := _BioWrite(b, PChar(Buf), Len)
else
Result := -2;
end;
function X509print(b: PBIO; a: PX509): integer;
begin
if InitSSLInterface and Assigned(_X509print) then
Result := _X509print(b, a)
else
Result := 0;
end;
// 3DES functions
procedure DESsetoddparity(Key: des_cblock);
begin
if InitSSLInterface and Assigned(_DESsetoddparity) then
_DESsetoddparity(Key);
end;
function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer;
begin
if InitSSLInterface and Assigned(_DESsetkeychecked) then
Result := _DESsetkeychecked(key, schedule)
else
Result := -1;
end;
procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer);
begin
if InitSSLInterface and Assigned(_DESecbencrypt) then
_DESecbencrypt(Input, output, ks, enc);
end;
{$ENDIF}
function LoadLib(const Value: String): HModule;
begin
{$IFDEF CIL}
Result := LoadLibrary(Value);
{$ELSE}
Result := LoadLibrary(PChar(Value));
{$ENDIF}
end;
function GetProcAddr(module: HModule; const ProcName: string): SslPtr;
begin
{$IFDEF CIL}
Result := GetProcAddress(module, ProcName);
{$ELSE}
Result := GetProcAddress(module, PChar(ProcName));
{$ENDIF}
end;
function InitSSLInterface: Boolean;
var
s: string;
x: integer;
begin
SSLCS.Enter;
try
if not IsSSLloaded then
begin
{$IFDEF CIL}
SSLLibHandle := 1;
SSLUtilHandle := 1;
{$ELSE}
SSLLibHandle := LoadLib(DLLSSLName);
SSLUtilHandle := LoadLib(DLLUtilName);
{$IFNDEF LINUX}
if (SSLLibHandle = 0) then
SSLLibHandle := LoadLib(DLLSSLName2);
{$ENDIF}
{$ENDIF}
if (SSLLibHandle <> 0) and (SSLUtilHandle <> 0) then
begin
{$IFNDEF CIL}
_SslGetError := GetProcAddr(SSLLibHandle, 'SSL_get_error');
_SslLibraryInit := GetProcAddr(SSLLibHandle, 'SSL_library_init');
_SslLoadErrorStrings := GetProcAddr(SSLLibHandle, 'SSL_load_error_strings');
_SslCtxSetCipherList := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_cipher_list');
_SslCtxNew := GetProcAddr(SSLLibHandle, 'SSL_CTX_new');
_SslCtxFree := GetProcAddr(SSLLibHandle, 'SSL_CTX_free');
_SslSetFd := GetProcAddr(SSLLibHandle, 'SSL_set_fd');
_SslMethodV2 := GetProcAddr(SSLLibHandle, 'SSLv2_method');
_SslMethodV3 := GetProcAddr(SSLLibHandle, 'SSLv3_method');
_SslMethodTLSV1 := GetProcAddr(SSLLibHandle, 'TLSv1_method');
_SslMethodV23 := GetProcAddr(SSLLibHandle, 'SSLv23_method');
_SslCtxUsePrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_PrivateKey_file');
_SslCtxUseCertificateChainFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_chain_file');
_SslCtxCheckPrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_check_private_key');
_SslCtxSetDefaultPasswdCb := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb');
_SslCtxSetDefaultPasswdCbUserdata := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb_userdata');
_SslCtxLoadVerifyLocations := GetProcAddr(SSLLibHandle, 'SSL_CTX_load_verify_locations');
_SslNew := GetProcAddr(SSLLibHandle, 'SSL_new');
_SslFree := GetProcAddr(SSLLibHandle, 'SSL_free');
_SslAccept := GetProcAddr(SSLLibHandle, 'SSL_accept');
_SslConnect := GetProcAddr(SSLLibHandle, 'SSL_connect');
_SslShutdown := GetProcAddr(SSLLibHandle, 'SSL_shutdown');
_SslRead := GetProcAddr(SSLLibHandle, 'SSL_read');
_SslPeek := GetProcAddr(SSLLibHandle, 'SSL_peek');
_SslWrite := GetProcAddr(SSLLibHandle, 'SSL_write');
_SslPending := GetProcAddr(SSLLibHandle, 'SSL_pending');
_SslGetPeerCertificate := GetProcAddr(SSLLibHandle, 'SSL_get_peer_certificate');
_SslGetVersion := GetProcAddr(SSLLibHandle, 'SSL_get_version');
_SslCtxSetVerify := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_verify');
_SslGetCurrentCipher := GetProcAddr(SSLLibHandle, 'SSL_get_current_cipher');
_SslCipherGetName := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_name');
_SslCipherGetBits := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_bits');
_SslGetVerifyResult := GetProcAddr(SSLLibHandle, 'SSL_get_verify_result');
_SslX509Free := GetProcAddr(SSLUtilHandle, 'X509_free');
_SslX509NameOneline := GetProcAddr(SSLUtilHandle, 'X509_NAME_oneline');
_SslX509GetSubjectName := GetProcAddr(SSLUtilHandle, 'X509_get_subject_name');
_SslX509GetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_get_issuer_name');
_SslX509NameHash := GetProcAddr(SSLUtilHandle, 'X509_NAME_hash');
_SslX509Digest := GetProcAddr(SSLUtilHandle, 'X509_digest');
_SslEvpMd5 := GetProcAddr(SSLUtilHandle, 'EVP_md5');
_ErrErrorString := GetProcAddr(SSLUtilHandle, 'ERR_error_string');
_ErrGetError := GetProcAddr(SSLUtilHandle, 'ERR_get_error');
_ErrClearError := GetProcAddr(SSLUtilHandle, 'ERR_clear_error');
_ErrFreeStrings := GetProcAddr(SSLUtilHandle, 'ERR_free_strings');
_ErrRemoveState := GetProcAddr(SSLUtilHandle, 'ERR_remove_state');
_EVPCleanup := GetProcAddr(SSLUtilHandle, 'EVP_cleanup');
_CRYPTOcleanupAllExData := GetProcAddr(SSLUtilHandle, 'CRYPTO_cleanup_all_ex_data');
_RandScreen := GetProcAddr(SSLUtilHandle, 'RAND_screen');
_BioNew := GetProcAddr(SSLUtilHandle, 'BIO_new');
_BioFreeAll := GetProcAddr(SSLUtilHandle, 'BIO_free_all');
_BioSMem := GetProcAddr(SSLUtilHandle, 'BIO_s_mem');
_BioCtrlPending := GetProcAddr(SSLUtilHandle, 'BIO_ctrl_pending');
_BioRead := GetProcAddr(SSLUtilHandle, 'BIO_read');
_BioWrite := GetProcAddr(SSLUtilHandle, 'BIO_write');
_X509print := GetProcAddr(SSLUtilHandle, 'X509_print');
// 3DES functions
_DESsetoddparity := GetProcAddr(SSLUtilHandle, 'DES_set_odd_parity');
_DESsetkeychecked := GetProcAddr(SSLUtilHandle, 'DES_set_key_checked');
_DESecbencrypt := GetProcAddr(SSLUtilHandle, 'DES_ecb_encrypt');
{$ENDIF}
{$IFDEF CIL}
SslLibraryInit;
SslLoadErrorStrings;
RandScreen;
{$ELSE}
SetLength(s, 1024);
x := GetModuleFilename(SSLLibHandle,PChar(s),Length(s));
SetLength(s, x);
SSLLibFile := s;
SetLength(s, 1024);
x := GetModuleFilename(SSLUtilHandle,PChar(s),Length(s));
SetLength(s, x);
SSLUtilFile := s;
//init library
if assigned(_SslLibraryInit) then
_SslLibraryInit;
if assigned(_SslLoadErrorStrings) then
_SslLoadErrorStrings;
if assigned(_RandScreen) then
_RandScreen;
{$ENDIF}
Result := True;
SSLloaded := True;
end
else
begin
//load failed!
if SSLLibHandle <> 0 then
begin
{$IFNDEF CIL}
FreeLibrary(SSLLibHandle);
{$ENDIF}
SSLLibHandle := 0;
end;
if SSLUtilHandle <> 0 then
begin
{$IFNDEF CIL}
FreeLibrary(SSLUtilHandle);
{$ENDIF}
SSLLibHandle := 0;
end;
Result := False;
end;
end
else
//loaded before...
Result := true;
finally
SSLCS.Leave;
end;
end;
function DestroySSLInterface: Boolean;
begin
SSLCS.Enter;
try
if IsSSLLoaded then
begin
//deinit library
EVPCleanup;
CRYPTOcleanupAllExData;
ErrRemoveState(0);
end;
SSLloaded := false;
if SSLLibHandle <> 0 then
begin
{$IFNDEF CIL}
FreeLibrary(SSLLibHandle);
{$ENDIF}
SSLLibHandle := 0;
end;
if SSLUtilHandle <> 0 then
begin
{$IFNDEF CIL}
FreeLibrary(SSLUtilHandle);
{$ENDIF}
SSLLibHandle := 0;
end;
{$IFNDEF CIL}
_SslGetError := nil;
_SslLibraryInit := nil;
_SslLoadErrorStrings := nil;
_SslCtxSetCipherList := nil;
_SslCtxNew := nil;
_SslCtxFree := nil;
_SslSetFd := nil;
_SslMethodV2 := nil;
_SslMethodV3 := nil;
_SslMethodTLSV1 := nil;
_SslMethodV23 := nil;
_SslCtxUsePrivateKeyFile := nil;
_SslCtxUseCertificateChainFile := nil;
_SslCtxCheckPrivateKeyFile := nil;
_SslCtxSetDefaultPasswdCb := nil;
_SslCtxSetDefaultPasswdCbUserdata := nil;
_SslCtxLoadVerifyLocations := nil;
_SslNew := nil;
_SslFree := nil;
_SslAccept := nil;
_SslConnect := nil;
_SslShutdown := nil;
_SslRead := nil;
_SslPeek := nil;
_SslWrite := nil;
_SslPending := nil;
_SslGetPeerCertificate := nil;
_SslGetVersion := nil;
_SslCtxSetVerify := nil;
_SslGetCurrentCipher := nil;
_SslCipherGetName := nil;
_SslCipherGetBits := nil;
_SslGetVerifyResult := nil;
_SslX509Free := nil;
_SslX509NameOneline := nil;
_SslX509GetSubjectName := nil;
_SslX509GetIssuerName := nil;
_SslX509NameHash := nil;
_SslX509Digest := nil;
_SslEvpMd5 := nil;
_ErrErrorString := nil;
_ErrGetError := nil;
_ErrClearError := nil;
_ErrFreeStrings := nil;
_ErrRemoveState := nil;
_EVPCleanup := nil;
_CRYPTOcleanupAllExData := nil;
_RandScreen := nil;
_BioNew := nil;
_BioFreeAll := nil;
_BioSMem := nil;
_BioCtrlPending := nil;
_BioRead := nil;
_BioWrite := nil;
_X509print := nil;
// 3DES functions
_DESsetoddparity := nil;
_DESsetkeychecked := nil;
_DESecbencrypt := nil;
{$ENDIF}
finally
SSLCS.Leave;
end;
Result := True;
end;
function IsSSLloaded: Boolean;
begin
Result := SSLLoaded;
end;
initialization
begin
SSLCS:= TCriticalSection.Create;
end;
finalization
begin
{$IFNDEF CIL}
DestroySSLInterface;
{$ENDIF}
SSLCS.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -