summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-06-21 10:13:54 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-06-21 10:13:54 +0000
commit6579465803a09e087561def025ec009ebf2d6182 (patch)
tree46ebc5f3656bfaac1aa700a280e7ab61f2c8d2d8
parent499966b53d5b2e811b18569a1e0c5c66f7301e83 (diff)
downloadfpc-6579465803a09e087561def025ec009ebf2d6182.tar.gz
--- Merging r34476 into '.':
U packages/openssl/src/openssl.pas --- Recording mergeinfo for merge of r34476 into '.': U . --- Merging r35332 into '.': G packages/openssl/src/openssl.pas U packages/openssl/src/fpopenssl.pp --- Recording mergeinfo for merge of r35332 into '.': G . --- Merging r35342 into '.': G packages/openssl/src/openssl.pas G packages/openssl/src/fpopenssl.pp --- Recording mergeinfo for merge of r35342 into '.': G . --- Merging r35946 into '.': U rtl/objpas/classes/compon.inc --- Recording mergeinfo for merge of r35946 into '.': G . --- Merging r36062 into '.': U . --- Recording mergeinfo for merge of r36062 into '.': G . --- Merging r36215 into '.': U packages/hash/src/md5.pp --- Recording mergeinfo for merge of r36215 into '.': G . # revisions: 34476,35332,35342,35946,36062,36215 git-svn-id: https://svn.freepascal.org/svn/fpc/branches/fixes_3_0@36559 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/hash/src/md5.pp27
-rw-r--r--packages/openssl/src/fpopenssl.pp65
-rw-r--r--packages/openssl/src/openssl.pas187
-rw-r--r--rtl/objpas/classes/compon.inc12
4 files changed, 268 insertions, 23 deletions
diff --git a/packages/hash/src/md5.pp b/packages/hash/src/md5.pp
index 3bba93add1..1a7b4156d2 100644
--- a/packages/hash/src/md5.pp
+++ b/packages/hash/src/md5.pp
@@ -15,6 +15,33 @@
**********************************************************************}
+
+{
+
+Original implementor copyright:
+
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+}
+
// Define to use original MD5 code on i386 processors.
// Undefine to use original implementation.
{ the assembler implementation does not work on Darwin }
diff --git a/packages/openssl/src/fpopenssl.pp b/packages/openssl/src/fpopenssl.pp
index 78081c0715..81fc486e3e 100644
--- a/packages/openssl/src/fpopenssl.pp
+++ b/packages/openssl/src/fpopenssl.pp
@@ -42,6 +42,14 @@ Type
{ TSSLContext }
+ TSSLContext = Class;
+ TRTlsExtCtx = record
+ CTX: TSSLContext;
+ domains: array of string; // SSL Certificate with one or more alternative names (SAN)
+ end;
+ TTlsExtCtx = array of TRTlsExtCtx;
+ PTlsExtCtx = ^TTlsExtCtx;
+
TSSLContext = Class(TObject)
private
FCTX: PSSL_CTX;
@@ -67,6 +75,10 @@ Type
function LoadPFX(Const S,APassword : AnsiString) : cint;
function LoadPFX(Data : TSSLData; Const APAssword : Ansistring) : cint;
function SetOptions(AOptions: cLong): cLong;
+ procedure SetTlsextServernameCallback(cb: PCallbackCb);
+ procedure SetTlsextServernameArg(ATlsextcbp: SslPtr);
+ procedure ActivateServerSNI(ATlsextcbp: TTlsExtCtx);
+ procedure SetEcdhAuto(const onoff: boolean);
Property CTX: PSSL_CTX Read FCTX;
end;
@@ -128,6 +140,33 @@ begin
SetLength(Result,0);
end;
+function SelectSNIContextCallback(ASSL: TSSL; ad: integer; arg: TTlsExtCtx): integer; cdecl;
+var
+ sHostName: string;
+ o, i, f: integer;
+begin
+ sHostName := SSLGetServername(ASSL, TLSEXT_NAMETYPE_host_name);
+ if (sHostName <> '') and (length(arg) > 0) then
+ begin
+ f := -1;
+ for o:=0 to length(arg)-1 do
+ begin
+ for i:=0 to length(arg[o].domains)-1 do
+ if sHostName = arg[o].domains[i] then
+ begin
+ f := o;
+ break;
+ end;
+ if f <> -1 then break
+ end;
+ if f = -1 then
+ result := SSL_TLSEXT_ERR_NOACK
+ else if f > 1 then // first one should be the main certificate
+ SslSetSslCtx(ASSL, arg[f].CTX);
+ end;
+ result := SSL_TLSEXT_ERR_OK;
+end;
+
{ TSSLContext }
Constructor TSSLContext.Create(AContext: PSSL_CTX);
@@ -336,6 +375,32 @@ begin
result := SslCtxCtrl(FCTX, SSL_CTRL_OPTIONS, AOptions, nil);
end;
+procedure TSSLContext.SetTlsextServernameCallback(cb: PCallbackCb);
+begin
+ SslCtxCallbackCtrl(FCTX, SSL_CTRL_SET_TLSEXT_SERVERNAME_CB, cb);
+end;
+
+procedure TSSLContext.SetTlsextServernameArg(ATlsextcbp: SslPtr);
+begin
+ SslCtxCtrl(FCTX, SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG, 0, ATlsextcbp);
+end;
+
+procedure TSSLContext.ActivateServerSNI(ATlsextcbp: TTlsExtCtx);
+begin
+ SetTlsextServernameCallback(@SelectSNIContextCallback);
+ SetTlsextServernameArg(Pointer(ATlsextcbp));
+end;
+
+procedure TSSLContext.SetEcdhAuto(const onoff: boolean);
+var larg: clong;
+begin
+ if onoff then
+ larg := 1
+ else
+ larg := 0;
+ SslCtxCtrl(FCTX, SSL_CTRL_SET_ECDH_AUTO, larg, nil);
+end;
+
{ TSSLData }
Function TSSLData.Empty: Boolean;
diff --git a/packages/openssl/src/openssl.pas b/packages/openssl/src/openssl.pas
index fb54ddc2e7..2f8cc458d2 100644
--- a/packages/openssl/src/openssl.pas
+++ b/packages/openssl/src/openssl.pas
@@ -207,7 +207,8 @@ type
aux: pointer; // ^X509_CERT_AUX
end;
pX509 = ^X509;
-
+ PPX509 = ^PX509;
+
DSA = record
pad: integer;
version: integer;
@@ -252,6 +253,7 @@ type
PPRSA = ^PRSA;
PASN1_cInt = SslPtr;
PPasswdCb = SslPtr;
+ PCallbackCb = SslPtr;
PFunction = procedure;
DES_cblock = array[0..7] of Byte;
PDES_cblock = ^DES_cblock;
@@ -567,7 +569,9 @@ const
SSL_ERROR_ZERO_RETURN = 6;
SSL_ERROR_WANT_CONNECT = 7;
SSL_ERROR_WANT_ACCEPT = 8;
-
+ SSL_ERROR_WANT_CHANNEL_ID_LOOKUP = 9;
+ SSL_ERROR_PENDING_SESSION = 11;
+
SSL_CTRL_NEED_TMP_RSA = 1;
SSL_CTRL_SET_TMP_RSA = 2;
SSL_CTRL_SET_TMP_DH = 3;
@@ -640,7 +644,36 @@ const
SSL_CTRL_TLS_EXT_SEND_HEARTBEAT = 85;
SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING = 86;
SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS = 87;
- // Some missing values ?
+ SSL_CTRL_CHAIN = 88;
+ SSL_CTRL_CHAIN_CERT = 89;
+ SSL_CTRL_GET_CURVES = 90;
+ SSL_CTRL_SET_CURVES = 91;
+ SSL_CTRL_SET_CURVES_LIST = 92;
+ SSL_CTRL_GET_SHARED_CURVE = 93;
+ SSL_CTRL_SET_ECDH_AUTO = 94;
+ SSL_CTRL_SET_SIGALGS = 97;
+ SSL_CTRL_SET_SIGALGS_LIST = 98;
+ SSL_CTRL_CERT_FLAGS = 99;
+ SSL_CTRL_CLEAR_CERT_FLAGS = 100;
+ SSL_CTRL_SET_CLIENT_SIGALGS = 101;
+ SSL_CTRL_SET_CLIENT_SIGALGS_LIST = 102;
+ SSL_CTRL_GET_CLIENT_CERT_TYPES = 103;
+ SSL_CTRL_SET_CLIENT_CERT_TYPES = 104;
+ SSL_CTRL_BUILD_CERT_CHAIN = 105;
+ SSL_CTRL_SET_VERIFY_CERT_STORE = 106;
+ SSL_CTRL_SET_CHAIN_CERT_STORE = 107;
+ SSL_CTRL_GET_PEER_SIGNATURE_NID = 108;
+ SSL_CTRL_GET_SERVER_TMP_KEY = 109;
+ SSL_CTRL_GET_RAW_CIPHERLIST = 110;
+ SSL_CTRL_GET_EC_POINT_FORMATS = 111;
+ SSL_CTRL_GET_TLSA_RECORD = 112;
+ SSL_CTRL_SET_TLSA_RECORD = 113;
+ SSL_CTRL_PULL_TLSA_RECORD = 114;
+ SSL_CTRL_GET_CHAIN_CERTS = 115;
+ SSL_CTRL_SELECT_CURRENT_CERT = 116;
+ SSL_CTRL_CHANNEL_ID = 117;
+ SSL_CTRL_GET_CHANNEL_ID = 118;
+ SSL_CTRL_SET_CHANNEL_ID = 119;
DTLS_CTRL_GET_TIMEOUT = 73;
@@ -649,13 +682,56 @@ const
SSL_CTRL_GET_RI_SUPPORT = 76;
SSL_CTRL_CLEAR_OPTIONS = 77;
SSL_CTRL_CLEAR_MODE = 78;
-
- TLSEXT_NAMETYPE_host_name = 0;
- SSL_MODE_ENABLE_PARTIAL_WRITE = 1;
- SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 2;
- SSL_MODE_AUTO_RETRY = 4;
- SSL_MODE_NO_AUTO_CHAIN = 8;
+ TLSEXT_TYPE_server_name = 0;
+ TLSEXT_TYPE_max_fragment_length = 1;
+ TLSEXT_TYPE_client_certificate_url = 2;
+ TLSEXT_TYPE_trusted_ca_keys = 3;
+ TLSEXT_TYPE_truncated_hmac = 4;
+ TLSEXT_TYPE_status_request = 5;
+ TLSEXT_TYPE_user_mapping = 6;
+ TLSEXT_TYPE_client_authz = 7;
+ TLSEXT_TYPE_server_authz = 8;
+ TLSEXT_TYPE_cert_type = 9;
+ TLSEXT_TYPE_elliptic_curves = 10;
+ TLSEXT_TYPE_ec_point_formats = 11;
+ TLSEXT_TYPE_srp = 12;
+ TLSEXT_TYPE_signature_algorithms = 13;
+ TLSEXT_TYPE_use_srtp = 14;
+ TLSEXT_TYPE_heartbeat = 15;
+ TLSEXT_TYPE_session_ticket = 35;
+ TLSEXT_TYPE_renegotiate = $ff01;
+ TLSEXT_TYPE_next_proto_neg = 13172;
+ TLSEXT_NAMETYPE_host_name = 0;
+ TLSEXT_STATUSTYPE_ocsp = 1;
+ TLSEXT_ECPOINTFORMAT_first = 0;
+ TLSEXT_ECPOINTFORMAT_uncompressed = 0;
+ TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime = 1;
+ TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 = 2;
+ TLSEXT_ECPOINTFORMAT_last = 2;
+ TLSEXT_signature_anonymous = 0;
+ TLSEXT_signature_rsa = 1;
+ TLSEXT_signature_dsa = 2;
+ TLSEXT_signature_ecdsa = 3;
+ TLSEXT_hash_none = 0;
+ TLSEXT_hash_md5 = 1;
+ TLSEXT_hash_sha1 = 2;
+ TLSEXT_hash_sha224 = 3;
+ TLSEXT_hash_sha256 = 4;
+ TLSEXT_hash_sha384 = 5;
+ TLSEXT_hash_sha512 = 6;
+ TLSEXT_MAXLEN_host_name = 255;
+
+ SSL_TLSEXT_ERR_OK = 0;
+ SSL_TLSEXT_ERR_ALERT_WARNING = 1;
+ SSL_TLSEXT_ERR_ALERT_FATAL = 2;
+ SSL_TLSEXT_ERR_NOACK = 3;
+
+ SSL_MODE_ENABLE_PARTIAL_WRITE = $00000001;
+ SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = $00000002;
+ SSL_MODE_AUTO_RETRY = $00000004;
+ SSL_MODE_NO_AUTO_CHAIN = $00000008;
+ SSL_MODE_RELEASE_BUFFERS = $00000010;
SSL_OP_MICROSOFT_SESS_ID_BUG = $00000001;
SSL_OP_NETSCAPE_CHALLENGE_BUG = $00000002;
@@ -664,6 +740,7 @@ const
SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = $00000010;
SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = $00000020;
SSL_OP_MSIE_SSLV2_RSA_PADDING = $00000040;
+ SSL_OP_SAFARI_ECDHE_ECDSA_BUG = $00000040;
SSL_OP_SSLEAY_080_CLIENT_DH_BUG = $00000080;
SSL_OP_TLS_D5_BUG = $00000100;
SSL_OP_TLS_BLOCK_PADDING_BUG = $00000200;
@@ -693,6 +770,12 @@ const
SSL_VERIFY_NONE = $00;
SSL_VERIFY_PEER = $01;
+ SSL_CERT_FLAG_TLS_STRICT = $00000001;
+
+ // Used in SSL_set_shutdown()/SSL_get_shutdown();
+ SSL_SENT_SHUTDOWN = 1;
+ SSL_RECEIVED_SHUTDOWN = 2;
+
OPENSSL_DES_DECRYPT = 0;
OPENSSL_DES_ENCRYPT = 1;
@@ -863,8 +946,16 @@ const
//DES modes
DES_ENCRYPT = 1;
DES_DECRYPT = 0;
-
-
+
+// Error codes for ECDH Function
+ ECDH_F_ECDH_COMPUTE_KEY = 100;
+ ECDH_F_ECDH_DATA_NEW_METHOD = 101;
+
+// Error codes for ECDH Reason
+ ECDH_R_NO_PRIVATE_VALUE = 100;
+ ECDH_R_POINT_ARITHMETIC_FAILURE = 101;
+ ECDH_R_KDF_FAILED = 102;
+
var
SSLLibHandle: TLibHandle = 0;
SSLUtilHandle: TLibHandle = 0;
@@ -925,6 +1016,9 @@ var
function SSLCipherGetName(c: SslPtr): String;
function SSLCipherGetBits(c: SslPtr; var alg_bits: cInt):cInt;
function SSLGetVerifyResult(ssl: PSSL):cLong;
+ function SSLGetServername(ssl: PSSL; _type: cInt = TLSEXT_NAMETYPE_host_name): string;
+ procedure SslCtxCallbackCtrl(ssl: PSSL; _type: cInt; cb: PCallbackCb);
+ function SslSetSslCtx(ssl: PSSL; ctx: PSSL_CTX): PSSL;
// libeay.dll
procedure ERR_load_crypto_strings;
@@ -939,6 +1033,7 @@ var
function X509print(b: PBIO; a: PX509): cInt;
function X509SetVersion(x: PX509; version: cInt): cInt;
function X509SetPubkey(x: PX509; pkey: PEVP_PKEY): cInt;
+ function X509GetPubkey(x: PX509): PEVP_PKEY;
function X509SetIssuerName(x: PX509; name: PX509_NAME): cInt;
function X509NameAddEntryByTxt(name: PX509_NAME; field: string; _type: cInt;
bytes: string; len, loc, _set: cInt): cInt;
@@ -1102,7 +1197,8 @@ var
const enc: pEVP_CIPHER; kstr: PChar; klen: Integer; cb: Ppem_password_cb;
u: pointer): integer;
function PEM_write_bio_PUBKEY(bp: pBIO; x: pEVP_PKEY): integer;
-
+ function PEM_read_bio_X509(bp: PBIO; x: PPX509; cb: ppem_password_cb; u: pointer): PX509;
+
// BIO Functions - bio.h
function BioNew(b: PBIO_METHOD): PBIO;
procedure BioFreeAll(b: PBIO);
@@ -1319,6 +1415,9 @@ type
TSSLCipherGetName = function(c: Sslptr):PChar; cdecl;
TSSLCipherGetBits = function(c: SslPtr; alg_bits: PcInt):cInt; cdecl;
TSSLGetVerifyResult = function(ssl: PSSL):cInt; cdecl;
+ TSSLGetServername = function(ssl: PSSL; _type: cInt = TLSEXT_NAMETYPE_host_name): PChar; cdecl;
+ TSSLCtxCallbackCtrl = procedure(ctx: PSSL_CTX; _type: cInt; cb: PCallbackCb); cdecl;
+ TSSLSetSslCtx = function(ssl: PSSL; ctx: PSSL_CTX): PSSL; cdecl;
// libeay.dll
TERR_load_crypto_strings = procedure; cdecl;
@@ -1332,6 +1431,7 @@ type
TX509print = function(b: PBIO; a: PX509): cInt; cdecl;
TX509SetVersion = function(x: PX509; version: cInt): cInt; cdecl;
TX509SetPubkey = function(x: PX509; pkey: PEVP_PKEY): cInt; cdecl;
+ TX509GetPubkey = function(x: PX509): PEVP_PKEY; cdecl;
TX509SetIssuerName = function(x: PX509; name: PX509_NAME): cInt; cdecl;
TX509NameAddEntryByTxt = function(name: PX509_NAME; field: PChar; _type: cInt;
bytes: PChar; len, loc, _set: cInt): cInt; cdecl;
@@ -1480,6 +1580,7 @@ type
const enc: pEVP_CIPHER; kstr: PChar; klen: Integer; cb: Ppem_password_cb;
u: pointer): integer; cdecl;
TPEM_write_bio_PUBKEY = function(bp: pBIO; x: pEVP_PKEY): integer; cdecl;
+ TPEM_read_bio_X509 = function(bp: pBIO; x: PPX509; cb: Ppem_password_cb; u: pointer): px509; cdecl;
// BIO Functions
@@ -1533,6 +1634,9 @@ var
_SSLCipherGetName: TSSLCipherGetName = nil;
_SSLCipherGetBits: TSSLCipherGetBits = nil;
_SSLGetVerifyResult: TSSLGetVerifyResult = nil;
+ _SSLGetServername: TSSLGetServername = nil;
+ _SslCtxCallbackCtrl: TSSLCtxCallbackCtrl = nil;
+ _SslSetSslCtx: TSSLSetSslCtx = nil;
// libeay.dll
_ERR_load_crypto_strings: TERR_load_crypto_strings = nil;
@@ -1546,6 +1650,7 @@ var
_X509print: TX509print = nil;
_X509SetVersion: TX509SetVersion = nil;
_X509SetPubkey: TX509SetPubkey = nil;
+ _X509GetPubkey: TX509GetPubkey = nil;
_X509SetIssuerName: TX509SetIssuerName = nil;
_X509NameAddEntryByTxt: TX509NameAddEntryByTxt = nil;
_X509Sign: TX509Sign = nil;
@@ -1698,7 +1803,7 @@ var
_PEM_read_bio_PUBKEY: TPEM_read_bio_PUBKEY = nil;
_PEM_write_bio_PrivateKey: TPEM_write_bio_PrivateKey = nil;
_PEM_write_bio_PUBKEY: TPEM_write_bio_PUBKEY = nil;
-
+ _PEM_read_bio_X509: TPEM_read_bio_X509 = nil;
// BIO Functions
_BIO_ctrl: TBIO_ctrl = nil;
@@ -2135,6 +2240,27 @@ begin
Result := X509_V_ERR_APPLICATION_VERIFICATION;
end;
+function SSLGetServername(ssl: PSSL; _type: cInt = TLSEXT_NAMETYPE_host_name): string;
+begin
+ if InitSSLInterface and Assigned(_SSLGetServername) then
+ result := PChar(_SSLGetServername(ssl, _type))
+ else
+ result := '';
+end;
+
+procedure SslCtxCallbackCtrl(ssl: PSSL; _type: cInt; cb: PCallbackCb);
+begin
+ if InitSSLInterface and Assigned(_SslCtxCallbackCtrl) then
+ _SslCtxCallbackCtrl(ssl, _type, cb);
+end;
+
+function SslSetSslCtx(ssl: PSSL; ctx: PSSL_CTX): PSSL;
+begin
+ if InitSSLInterface and Assigned(_SslSetSslCtx) then
+ result := _SslSetSslCtx(ssl, ctx)
+ else
+ result := nil;
+end;
// libeay.dll
function SSLeayversion(t: cInt): string;
@@ -2366,6 +2492,15 @@ begin
Result := 0;
end;
+function X509GetPubkey(x: PX509): PEVP_PKEY;
+begin
+ if InitSSLInterface and Assigned(_X509GetPubkey) then
+ Result := _X509GetPubkey(x)
+ else
+ Result := 0;
+end;
+
+
function X509SetIssuerName(x: PX509; name: PX509_NAME): cInt;
begin
if InitSSLInterface and Assigned(_X509SetIssuerName) then
@@ -3163,6 +3298,15 @@ Begin
Result := -1;
end;
+function PEM_read_bio_X509(bp: pBIO; x: ppx509; cb: Ppem_password_cb; u: pointer): px509;
+begin
+ if InitSSLInterface and Assigned(_PEM_read_bio_X509) then
+ Result := _PEM_read_bio_X509(bp, x, cb, u)
+ else
+ Result := nil;
+end;
+
+
// BIO Functions
function BIO_ctrl(bp: PBIO; cmd: cint; larg: clong; parg: Pointer): clong;
@@ -3860,6 +4004,9 @@ begin
_SslCipherGetName := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_name');
_SslCipherGetBits := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_bits');
_SslGetVerifyResult := GetProcAddr(SSLLibHandle, 'SSL_get_verify_result');
+ _SslGetServername := GetProcAddr(SSLLibHandle, 'SSL_get_servername');
+ _SslCtxCallbackCtrl := GetProcAddr(SSLLibHandle, 'SSL_CTX_callback_ctrl');
+ _SslSetSslCtx := GetProcAddr(SSLLibHandle, 'SSL_set_SSL_CTX');
end;
Procedure LoadUtilEntryPoints;
@@ -3876,6 +4023,7 @@ begin
_X509print := GetProcAddr(SSLUtilHandle, 'X509_print');
_X509SetVersion := GetProcAddr(SSLUtilHandle, 'X509_set_version');
_X509SetPubkey := GetProcAddr(SSLUtilHandle, 'X509_set_pubkey');
+ _X509GetPubkey := GetProcAddr(SSLUtilHandle, 'X509_get_pubkey');
_X509SetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_set_issuer_name');
_X509NameAddEntryByTxt := GetProcAddr(SSLUtilHandle, 'X509_NAME_add_entry_by_txt');
_X509Sign := GetProcAddr(SSLUtilHandle, 'X509_sign');
@@ -4005,6 +4153,8 @@ begin
_PEM_read_bio_PUBKEY := GetProcAddr(SSLUtilHandle, 'PEM_read_bio_PUBKEY');
_PEM_write_bio_PrivateKey := GetProcAddr(SSLUtilHandle, 'PEM_write_bio_PrivateKey');
_PEM_write_bio_PUBKEY := GetProcAddr(SSLUtilHandle, 'PEM_write_bio_PUBKEY');
+ _PEM_read_bio_X509 := GetProcAddr(SSLUtilHandle, 'PEM_read_bio_X509');
+
// BIO
_BIO_ctrl := GetProcAddr(SSLUtilHandle, 'BIO_ctrl');
_BIO_s_file := GetProcAddr(SSLUtilHandle, 'BIO_s_file');
@@ -4136,7 +4286,9 @@ begin
_SslCipherGetName := nil;
_SslCipherGetBits := nil;
_SslGetVerifyResult := nil;
-
+ _SslGetServername := nil;
+ _SslCtxCallbackCtrl := nil;
+ _SslSetSslCtx := nil;
_PKCS7_ISSUER_AND_SERIAL_new:=nil;
_PKCS7_ISSUER_AND_SERIAL_free:=nil;
_PKCS7_ISSUER_AND_SERIAL_digest:=nil;
@@ -4236,6 +4388,7 @@ begin
_X509print := nil;
_X509SetVersion := nil;
_X509SetPubkey := nil;
+ _X509GetPubkey := nil;
_X509SetIssuerName := nil;
_X509NameAddEntryByTxt := nil;
_X509Sign := nil;
@@ -4359,10 +4512,10 @@ begin
// PEM
_PEM_read_bio_PrivateKey := nil;
- _PEM_read_bio_PrivateKey := nil;
+ _PEM_read_bio_PrivateKey := nil;
_PEM_read_bio_PUBKEY := nil;
- _PEM_write_bio_PrivateKey := nil;
- _PEM_write_bio_PUBKEY := nil;
+ _PEM_write_bio_PrivateKey := nil;
+ _PEM_read_bio_X509 := nil;
// BIO
diff --git a/rtl/objpas/classes/compon.inc b/rtl/objpas/classes/compon.inc
index c15285c331..4c8fbba218 100644
--- a/rtl/objpas/classes/compon.inc
+++ b/rtl/objpas/classes/compon.inc
@@ -543,16 +543,16 @@ end;
Function TComponent.FindComponent(const AName: string): TComponent;
Var I : longint;
-
+ C : TComponent;
begin
Result:=Nil;
If (AName='') or Not assigned(FComponents) then exit;
For i:=0 to FComponents.Count-1 do
- if (CompareText(TComponent(FComponents[I]).Name,AName)=0) then
- begin
- Result:=TComponent(FComponents.Items[I]);
- exit;
- end;
+ Begin
+ c:=TComponent(FComponents[I]);
+ If (CompareText(C.Name,AName)=0) then
+ Exit(C);
+ End;
end;