# Unit ssl_openssl_lib

Description | uses | Classes, Interfaces, Objects and Records | Functions and Procedures | Types | Constants | Variables

## Description

OpenSSL support

This unit is Pascal interface to OpenSSL library (used by ssl_openssl unit). OpenSSL is loaded dynamicly on-demand. If this library is not found in system, requested OpenSSL function just return errorcode.

## uses

- Classes
- synafpc
- Windows

## Overview

### Classes, Interfaces, Objects and Records

Name | Description
--- | ---
packed record `des_ks_struct` |

### Functions and Procedures

`function SslGetError(s: PSSL; ret_code: Integer):Integer;`
`function SslLibraryInit:Integer;`
`procedure SslLoadErrorStrings;`
`function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer;`
`function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX;`
`procedure SslCtxFree(arg0: PSSL_CTX);`
`function SslSetFd(s: PSSL; fd: Integer):Integer;`
`function SslMethodV2:PSSL_METHOD;`
`function SslMethodV3:PSSL_METHOD;`
`function SslMethodTLSV1:PSSL_METHOD;`
`function SslMethodV23:PSSL_METHOD;`
`function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer;`
`function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer;`
`function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer;`
`function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer;`
`function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer;`
`function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer;`
`function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer;`
`function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer;`
`procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb);`
`procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr);`
`function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer;`
`function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer;`
`function SslNew(ctx: PSSL_CTX):PSSL;`
`procedure SslFree(ssl: PSSL);`
`function SslAccept(ssl: PSSL):Integer;`
`function SslConnect(ssl: PSSL):Integer;`
`function SslShutdown(ssl: PSSL):Integer;`
`function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`
`function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`
`function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`
`function SslPending(ssl: PSSL):Integer;`
`function SslGetVersion(ssl: PSSL):AnsiString;`
`function SslGetPeerCertificate(ssl: PSSL):PX509;`
`procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction);`
`function SSLGetCurrentCipher(s: PSSL):SslPtr;`
`function SSLCipherGetName(c: SslPtr): AnsiString;`
`function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer;`
`function SSLGetVerifyResult(ssl: PSSL):Integer;`
`function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer;`
`function X509New: PX509;`
`procedure X509Free(x: PX509);`
`function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString;`
`function X509GetSubjectName(a: PX509):PX509_NAME;`
`function X509GetIssuerName(a: PX509):PX509_NAME;`
`function X509NameHash(x: PX509_NAME):Cardinal;`
`function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer;`
`function X509print(b: PBIO; a: PX509): integer;`
`function X509SetVersion(x: PX509; version: integer): integer;`
`function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer;`
`function X509SetIssuerName(x: PX509; name: PX509_NAME): integer;`
`function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer;`
`function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer;`
`function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME;`
`function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer;`
`function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer;`
`function X509GetSerialNumber(x: PX509): PASN1_INTEGER;`
`function EvpPkeyNew: EVP_PKEY;`
`procedure EvpPkeyFree(pk: EVP_PKEY);`
`function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer;`
`function EvpGetDigestByName(Name: AnsiString): PEVP_MD;`
`procedure EVPcleanup;`
`function SSLeayversion(t: integer): Ansistring;`
`procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer);`
`function ErrGetError: integer;`
`procedure ErrClearError;`
`procedure ErrFreeStrings;`
`procedure ErrRemoveState(pid: integer);`
`procedure OPENSSLaddallalgorithms;`
`procedure CRYPTOcleanupAllExData;`
`procedure RandScreen;`
`function BioNew(b: PBIO_METHOD): PBIO;`
`procedure BioFreeAll(b: PBIO);`
`function BioSMem: PBIO_METHOD;`
`function BioCtrlPending(b: PBIO): integer;`
`function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer;`
`function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer;`
`function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr;`
`function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer;`
`procedure PKCS12free(p12: SslPtr);`
`function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA;`
`function Asn1UtctimeNew: PASN1_UTCTIME;`
`procedure Asn1UtctimeFree(a: PASN1_UTCTIME);`
`function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer;`
`function Asn1IntegerGet(a: PASN1_INTEGER): integer;`
`function i2dX509bio(b: PBIO; x: PX509): integer;`
`function d2iX509bio(b:PBIO; x:PX509): PX509;`
`function PEMReadBioX509(b:PBIO; x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509;`
`procedure SkX509PopFree(st: PSTACK; func: TSkPopFreeFunc);`
`function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer;`
`procedure DESsetoddparity(Key: des_cblock);`
`function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer;`
`procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer);`
`function IsSSLloaded: Boolean;`
`function InitSSLInterface: Boolean;`
`function DestroySSLInterface: Boolean;`

### Types

`SslPtr = Pointer;`
`PSslPtr = ˆSslPtr;`
`PSSL_CTX = SslPtr;`
`PSSL = SslPtr;`
`PSSL_METHOD = SslPtr;`
`PX509 = SslPtr;`
`PX509_NAME = SslPtr;`
`PEVP_MD = SslPtr;`
`PInteger = ˆInteger;`
`PBIO_METHOD = SslPtr;`
`PBIO = SslPtr;`
`EVP_PKEY = SslPtr;`
`PRSA = SslPtr;`
`PASN1_UTCTIME = SslPtr;`
`PASN1_INTEGER = SslPtr;`
`PPasswdCb = SslPtr;`
`PFunction = procedure;`
`PSTACK = SslPtr;`
`TSkPopFreeFunc = procedure(p:SslPtr); cdecl;`
`TX509Free = procedure(x: PX509); cdecl;`
`DES_cblock = array[0..7] of Byte;`
`PDES_cblock = ˆDES_cblock;`
`des_key_schedule = array[1..16] of des_ks_struct;`

### Constants

`EVP_MAX_MD_SIZE = 16 + 20;`
`SSL_ERROR_NONE = 0;`
`SSL_ERROR_SSL = 1;`
`SSL_ERROR_WANT_READ = 2;`
`SSL_ERROR_WANT_WRITE = 3;`
`SSL_ERROR_WANT_X509_LOOKUP = 4;`
`SSL_ERROR_SYSCALL = 5;`
`SSL_ERROR_ZERO_RETURN = 6;`
`SSL_ERROR_WANT_CONNECT = 7;`
`SSL_ERROR_WANT_ACCEPT = 8;`
`SSL_OP_NO_SSLv2 = $01000000;`
`SSL_OP_NO_SSLv3 = $02000000;`
`SSL_OP_NO_TLSv1 = $04000000;`
`SSL_OP_ALL = $000FFFFF;`
`SSL_VERIFY_NONE = $00;`
`SSL_VERIFY_PEER = $01;`
`OPENSSL_DES_DECRYPT = 0;`
`OPENSSL_DES_ENCRYPT = 1;`
`X509_V_OK = 0;`
`X509_V_ILLEGAL = 1;`
`X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 2;`
`X509_V_ERR_UNABLE_TO_GET_CRL = 3;`
`X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = 4;`
`X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = 5;`
`X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = 6;`
`X509_V_ERR_CERT_SIGNATURE_FAILURE = 7;`
`X509_V_ERR_CRL_SIGNATURE_FAILURE = 8;`
`X509_V_ERR_CERT_NOT_YET_VALID = 9;`
`X509_V_ERR_CERT_HAS_EXPIRED = 10;`
`X509_V_ERR_CRL_NOT_YET_VALID = 11;`
`X509_V_ERR_CRL_HAS_EXPIRED = 12;`
`X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 13;`
`X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 14;`
`X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = 15;`
`X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 16;`
`X509_V_ERR_OUT_OF_MEM = 17;`
`X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 18;`
`X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 19;`
`X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 20;`
`X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 21;`
`X509_V_ERR_CERT_CHAIN_TOO_LONG = 22;`
`X509_V_ERR_CERT_REVOKED = 23;`
`X509_V_ERR_INVALID_CA = 24;`
`X509_V_ERR_PATH_LENGTH_EXCEEDED = 25;`
`X509_V_ERR_INVALID_PURPOSE = 26;`
`X509_V_ERR_CERT_UNTRUSTED = 27;`
`X509_V_ERR_CERT_REJECTED = 28;`
`X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29;`
`X509_V_ERR_AKID_SKID_MISMATCH = 30;`
`X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH = 31;`
`X509_V_ERR_KEYUSAGE_NO_CERTSIGN = 32;`
`X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER = 33;`
`X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION = 34;`
`X509_V_ERR_APPLICATION_VERIFICATION = 50;`
`SSL_FILETYPE_ASN1 = 2;`
`SSL_FILETYPE_PEM = 1;`
`EVP_PKEY_RSA = 6;`
`SSL_CTRL_SET_TLSEXT_HOSTNAME = 55;`
`TLSEXT_NAMETYPE_host_name = 0;`

### Variables

`DLLSSLName: string = 'ssleay32.dll';`
`DLLSSLName2: string = 'libssl32.dll';`
`DLLUtilName: string = 'libeay32.dll';`
`SSLLibHandle: TLibHandle = 0;`
`SSLUtilHandle: TLibHandle = 0;`
`SSLLibFile: string = '';`
`SSLUtilFile: string = '';`
`_X509Free: TX509Free = nil;`

## Description

### Functions and Procedures

`function SslGetError(s: PSSL; ret_code: Integer):Integer;`

`function SslLibraryInit:Integer;`

`procedure SslLoadErrorStrings;`

`function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer;`

`function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX;`

`procedure SslCtxFree(arg0: PSSL_CTX);`

`function SslSetFd(s: PSSL; fd: Integer):Integer;`

`function SslMethodV2:PSSL_METHOD;`

`function SslMethodV3:PSSL_METHOD;`

`function SslMethodTLSV1:PSSL_METHOD;`

`function SslMethodV23:PSSL_METHOD;`

`function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer;`

`function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer;`

`function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer;`

`function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer;`

`function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer;`

`function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer;`

`function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer;`

`function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer;`

`procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb);`

`procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr);`

`function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer;`

`function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer;`

`function SslNew(ctx: PSSL_CTX):PSSL;`

`procedure SslFree(ssl: PSSL);`

`function SslAccept(ssl: PSSL):Integer;`

`function SslConnect(ssl: PSSL):Integer;`

`function SslShutdown(ssl: PSSL):Integer;`

`function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`

`function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`

`function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer;`

`function SslPending(ssl: PSSL):Integer;`

`function SslGetVersion(ssl: PSSL):AnsiString;`

`function SslGetPeerCertificate(ssl: PSSL):PX509;`

`procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction);`

`function SSLGetCurrentCipher(s: PSSL):SslPtr;`

`function SSLCipherGetName(c: SslPtr): AnsiString;`

`function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer;`

`function SSLGetVerifyResult(ssl: PSSL):Integer;`

`function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer;`

`function X509New: PX509;`

`procedure X509Free(x: PX509);`

`function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString;`

`function X509GetSubjectName(a: PX509):PX509_NAME;`

`function X509GetIssuerName(a: PX509):PX509_NAME;`

`function X509NameHash(x: PX509_NAME):Cardinal;`

`function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer;`

`function X509print(b: PBIO; a: PX509): integer;`

`function X509SetVersion(x: PX509; version: integer): integer;`

`function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer;`

`function X509SetIssuerName(x: PX509; name: PX509_NAME): integer;`

`function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer;`

`function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer;`

`function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME;`

`function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer;`

`function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer;`

`function X509GetSerialNumber(x: PX509): PASN1_INTEGER;`

`function EvpPkeyNew: EVP_PKEY;`

`procedure EvpPkeyFree(pk: EVP_PKEY);`

`function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer;`

`function EvpGetDigestByName(Name: AnsiString): PEVP_MD;`

`procedure EVPcleanup;`

`function SSLeayversion(t: integer): Ansistring;`

`procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer);`

`function ErrGetError: integer;`

`procedure ErrClearError;`

`procedure ErrFreeStrings;`

`procedure ErrRemoveState(pid: integer);`

`procedure OPENSSLaddallalgorithms;`

`procedure CRYPTOcleanupAllExData;`

`procedure RandScreen;`

`function BioNew(b: PBIO_METHOD): PBIO;`

`procedure BioFreeAll(b: PBIO);`

`function BioSMem: PBIO_METHOD;`

`function BioCtrlPending(b: PBIO): integer;`

`function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer;`

`function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer;`

`function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr;`

`function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer;`

`procedure PKCS12free(p12: SslPtr);`

`function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA;`

`function Asn1UtctimeNew: PASN1_UTCTIME;`

`procedure Asn1UtctimeFree(a: PASN1_UTCTIME);`

`function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer;`

`function Asn1IntegerGet(a: PASN1_INTEGER): integer;`

`function i2dX509bio(b: PBIO; x: PX509): integer;`

`function d2iX509bio(b:PBIO; x:PX509): PX509;`

`function PEMReadBioX509(b:PBIO; x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509;`

`procedure SkX509PopFree(st: PSTACK; func: TSkPopFreeFunc);`

`function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer;`

`procedure DESsetoddparity(Key: des_cblock);`

`function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer;`

`procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer);`

`function IsSSLloaded: Boolean;`

`function InitSSLInterface: Boolean;`

`function DestroySSLInterface: Boolean;`

### Types

`SslPtr = Pointer;`

`PSslPtr = ˆSslPtr;`

`PSSL_CTX = SslPtr;`

`PSSL = SslPtr;`

`PSSL_METHOD = SslPtr;`

`PX509 = SslPtr;`

`PX509_NAME = SslPtr;`

`PEVP_MD = SslPtr;`

`PInteger = ˆInteger;`

`PBIO_METHOD = SslPtr;`

`PBIO = SslPtr;`

`EVP_PKEY = SslPtr;`

`PRSA = SslPtr;`

`PASN1_UTCTIME = SslPtr;`

`PASN1_INTEGER = SslPtr;`

`PPasswdCb = SslPtr;`

`PFunction = procedure;`

`PSTACK = SslPtr;`

`TSkPopFreeFunc = procedure(p:SslPtr); cdecl;`

`TX509Free = procedure(x: PX509); cdecl;`

`DES_cblock = array[0..7] of Byte;`

`PDES_cblock = ˆDES_cblock;`

`des_key_schedule = array[1..16] of des_ks_struct;`

### Constants

`EVP_MAX_MD_SIZE = 16 + 20;`

`SSL_ERROR_NONE = 0;`

`SSL_ERROR_SSL = 1;`

`SSL_ERROR_WANT_READ = 2;`

`SSL_ERROR_WANT_WRITE = 3;`

`SSL_ERROR_WANT_X509_LOOKUP = 4;`

`SSL_ERROR_SYSCALL = 5;`

`SSL_ERROR_ZERO_RETURN = 6;`

`SSL_ERROR_WANT_CONNECT = 7;`

`SSL_ERROR_WANT_ACCEPT = 8;`

`SSL_OP_NO_SSLv2 = $01000000;`

`SSL_OP_NO_SSLv3 = $02000000;`

`SSL_OP_NO_TLSv1 = $04000000;`

`SSL_OP_ALL = $000FFFFF;`

`SSL_VERIFY_NONE = $00;`

`SSL_VERIFY_PEER = $01;`

`OPENSSL_DES_DECRYPT = 0;`

`OPENSSL_DES_ENCRYPT = 1;`

`X509_V_OK = 0;`

`X509_V_ILLEGAL = 1;`

`X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 2;`

`X509_V_ERR_UNABLE_TO_GET_CRL = 3;`

`X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = 4;`

`X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = 5;`

`X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = 6;`

`X509_V_ERR_CERT_SIGNATURE_FAILURE = 7;`

`X509_V_ERR_CRL_SIGNATURE_FAILURE = 8;`

`X509_V_ERR_CERT_NOT_YET_VALID = 9;`

`X509_V_ERR_CERT_HAS_EXPIRED = 10;`

`X509_V_ERR_CRL_NOT_YET_VALID = 11;`

`X509_V_ERR_CRL_HAS_EXPIRED = 12;`

`X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 13;`

`X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 14;`

`X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = 15;`

`X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 16;`

`X509_V_ERR_OUT_OF_MEM = 17;`

`X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 18;`

`X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 19;`

`X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 20;`

`X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 21;`

`X509_V_ERR_CERT_CHAIN_TOO_LONG = 22;`

`X509_V_ERR_CERT_REVOKED = 23;`

`X509_V_ERR_INVALID_CA = 24;`

`X509_V_ERR_PATH_LENGTH_EXCEEDED = 25;`

`X509_V_ERR_INVALID_PURPOSE = 26;`

`X509_V_ERR_CERT_UNTRUSTED = 27;`

`X509_V_ERR_CERT_REJECTED = 28;`

`X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29;`

`X509_V_ERR_AKID_SKID_MISMATCH = 30;`

`X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH = 31;`

`X509_V_ERR_KEYUSAGE_NO_CERTSIGN = 32;`

`X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER = 33;`

`X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION = 34;`

`X509_V_ERR_APPLICATION_VERIFICATION = 50;`

`SSL_FILETYPE_ASN1 = 2;`

`SSL_FILETYPE_PEM = 1;`

`EVP_PKEY_RSA = 6;`

`SSL_CTRL_SET_TLSEXT_HOSTNAME = 55;`

`TLSEXT_NAMETYPE_host_name = 0;`

### Variables

`DLLSSLName: string = 'ssleay32.dll';`

`DLLSSLName2: string = 'libssl32.dll';`

`DLLUtilName: string = 'libeay32.dll';`

`SSLLibHandle: TLibHandle = 0;`

`SSLUtilHandle: TLibHandle = 0;`

`SSLLibFile: string = '';`

`SSLUtilFile: string = '';`

`_X509Free: TX509Free = nil;`

Generated by PasDoc 0.9.0 on 2012-04-23 21:38:52