├── .gitignore ├── demo ├── mycert.dpr ├── mycomp.dpr ├── mydigest.dpr ├── mygost.dpr ├── myprime.dpr ├── mysign.dpr └── myuncomp.dpr ├── ssl.inc ├── ssl_aes.pas ├── ssl_asn.pas ├── ssl_bf.pas ├── ssl_bio.pas ├── ssl_bn.pas ├── ssl_buffer.pas ├── ssl_camellia.pas ├── ssl_cast.pas ├── ssl_cmac.pas ├── ssl_cms.pas ├── ssl_comp.pas ├── ssl_conf.pas ├── ssl_const.pas ├── ssl_des.pas ├── ssl_dh.pas ├── ssl_dsa.pas ├── ssl_ec.pas ├── ssl_ecdh.pas ├── ssl_ecdsa.pas ├── ssl_engine.pas ├── ssl_err.pas ├── ssl_evp.pas ├── ssl_hmac.pas ├── ssl_idea.pas ├── ssl_init.pas ├── ssl_lhash.pas ├── ssl_lib.pas ├── ssl_md4.pas ├── ssl_md5.pas ├── ssl_mdc2.pas ├── ssl_obj_id.pas ├── ssl_objects.pas ├── ssl_ocsp.pas ├── ssl_pem.pas ├── ssl_pkcs12.pas ├── ssl_pkcs7.pas ├── ssl_rand.pas ├── ssl_rc2.pas ├── ssl_rc4.pas ├── ssl_rc5.pas ├── ssl_ripemd.pas ├── ssl_rsa.pas ├── ssl_sha.pas ├── ssl_sk.pas ├── ssl_types.pas ├── ssl_util.pas └── ssl_x509.pas /.gitignore: -------------------------------------------------------------------------------- 1 | # Uncomment these types if you want even more clean repository. But be careful. 2 | # It can make harm to an existing project source. Read explanations below. 3 | # 4 | # Resource files are binaries containing manifest, project icon and version info. 5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. 6 | *.res 7 | # 8 | # Type library file (binary). In old Delphi versions it should be stored. 9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. 10 | #*.tlb 11 | # 12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7. 13 | # Uncomment this if you are not using diagrams or use newer Delphi version. 14 | #*.ddp 15 | # 16 | # Visual LiveBindings file. Added in Delphi XE2. 17 | # Uncomment this if you are not using LiveBindings Designer. 18 | #*.vlb 19 | # 20 | # Deployment Manager configuration file for your project. Added in Delphi XE2. 21 | # Uncomment this if it is not mobile development and you do not use remote debug feature. 22 | #*.deployproj 23 | # 24 | 25 | # Delphi compiler-generated binaries (safe to delete) 26 | *.exe 27 | *.dll 28 | *.bpl 29 | *.bpi 30 | *.dcp 31 | *.so 32 | *.apk 33 | *.drc 34 | *.map 35 | *.dres 36 | *.rsm 37 | *.tds 38 | *.dcu 39 | *.lib 40 | 41 | # Delphi autogenerated files (duplicated info) 42 | *.cfg 43 | *Resource.rc 44 | 45 | # Delphi local files (user-specific info) 46 | *.local 47 | *.identcache 48 | *.projdata 49 | *.tvsconfig 50 | *.dsk 51 | 52 | # Delphi history and backups 53 | __history/ 54 | *.~* 55 | 56 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi) 57 | *.stat 58 | -------------------------------------------------------------------------------- /demo/mycert.dpr: -------------------------------------------------------------------------------- 1 | program mycert; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | ssl_const in '..\ssl_const.pas', 10 | ssl_rsa in '..\ssl_rsa.pas', 11 | ssl_types in '..\ssl_types.pas', 12 | ssl_x509 in '..\ssl_x509.pas', 13 | ssl_lib in '..\ssl_lib.pas', 14 | ssl_evp in '..\ssl_evp.pas', 15 | ssl_err in '..\ssl_err.pas', 16 | ssl_asn in '..\ssl_asn.pas', 17 | ssl_bio in '..\ssl_bio.pas', 18 | ssl_pem in '..\ssl_pem.pas'; 19 | 20 | function add_ext(cert: PX509; nid: TC_INT; value: PAnsiChar): Boolean; 21 | var ex: PX509_EXTENSION; 22 | ctx: X509V3_CTX; 23 | begin 24 | Result := false; 25 | ctx.db := nil; 26 | X509V3_set_ctx(ctx, cert, cert, nil, nil, 0); 27 | ex := X509V3_EXT_conf_nid(nil, @ctx, nid, value); 28 | if ex <> nil then 29 | begin 30 | X509_add_ext(cert, ex, -1); 31 | X509_EXTENSION_free(ex); 32 | Result := True; 33 | end; 34 | 35 | end; 36 | 37 | function _OnGetPassword(buf: PAnsiString; size: TC_INT; rwflag: TC_INT; userdata: pointer): integer; cdecl; 38 | var P: AnsiString; 39 | begin 40 | 41 | repeat 42 | Write('Password: '); 43 | Readln(P); 44 | Result := Length(P); 45 | if Result = 0 then 46 | writeln('Password is not empty!') 47 | else 48 | Break; 49 | until False; 50 | 51 | if Result > size then 52 | Result := size; 53 | if Result > 0 then 54 | Move(P[1], buf^, Result); 55 | end; 56 | 57 | 58 | procedure keycallback(p, n: TC_INT; arg: Pointer); cdecl; 59 | var c: AnsiString; 60 | begin 61 | c := 'B'; 62 | case p of 63 | 0: c := c+'.'#13; 64 | 1: c := c+'+'#13; 65 | 2: c := c+'*'#13; 66 | 3: c := #13#10; 67 | end; 68 | write(c); 69 | end; 70 | 71 | procedure mkcert(var x509p: PX509; var pkeyp: PEVP_PKEY; bits: TC_INT; serial: TC_INT; days: TC_INT); 72 | var FRSA: PRSA; 73 | name: PX509_NAME; 74 | begin 75 | if pkeyp = nil then 76 | begin 77 | pkeyp := EVP_PKEY_new; 78 | SSL_CheckError; 79 | end; 80 | if x509p = nil then 81 | begin 82 | x509p := X509_new; 83 | SSL_CheckError; 84 | end; 85 | writeln('Generate RSA key, ', bits, ' bits'); 86 | FRSA := RSA_generate_key(bits, $10001, keycallback, nil); 87 | SSL_CheckError; 88 | EVP_PKEY_assign_RSA(pkeyp, FRSA); 89 | SSL_CheckError; 90 | X509_set_version(x509p, 2); 91 | Writeln('Set certificate parameters'); 92 | ASN1_INTEGER_set(X509_get_serialNumber(x509p), 1); 93 | 94 | X509_gmtime_adj(x509p.cert_info.validity.notBefore, 0); 95 | X509_gmtime_adj(x509p.cert_info.validity.notAfter, 60*60*24*days); 96 | X509_set_pubkey(x509p, pkeyp); 97 | Name := X509_get_subject_name(x509p); 98 | X509_NAME_add_entry_by_txt(Name, 'C', MBSTRING_ASC, 'RU', -1, -1, 0); 99 | X509_NAME_add_entry_by_txt(Name, 'CN', MBSTRING_ASC, 'OpenSSL Group', -1, -1, 0); 100 | X509_set_issuer_name(x509p, name); 101 | add_ext(x509p, NID_basic_constraints, 'critical,CA:TRUE'); 102 | add_ext(x509p, NID_key_usage, 'critical,keyCertSign,cRLSign'); 103 | add_ext(x509p, NID_subject_key_identifier, 'hash'); 104 | add_ext(x509p, NID_netscape_cert_type, 'sslCA'); 105 | 106 | add_ext(x509p, NID_netscape_comment, 'example comment extension'); 107 | 108 | X509_sign(x509p, pkeyp, EVP_sha1); 109 | SSL_CheckError; 110 | end; 111 | 112 | var 113 | FX509: PX509; 114 | FKey: PEVP_PKEY; 115 | FBio: PBIO; 116 | FFilePath: String; 117 | FPrivKeyFile, FPubKeyFile, FCertFile: AnsiString; 118 | begin 119 | try 120 | { TODO -oUser -cConsole Main : Insert code here } 121 | Writeln('mkcert'); 122 | writeln('DEMO generate self-signed certificate and private key'); 123 | SSL_InitERR; 124 | SSL_InitEVP; 125 | SSL_InitRSA; 126 | SSL_InitX509; 127 | SSL_InitBIO; 128 | SSL_InitASN1; 129 | SSL_InitPEM; 130 | 131 | mkcert(FX509, FKey, 2048, 1, 365); 132 | 133 | FFilePath := ExtractFilePath(ParamStr(0)); 134 | FPrivKeyFile := FFilePath + 'private.pem'; 135 | FPubKeyFile := FFilePath + 'public.pem'; 136 | FCertFile := FFilePath + 'cacert.pem'; 137 | Writeln('Write private key (private.pem), encrypted by AES-129-CBC'); 138 | FBio := BIO_new_file(PAnsiChar(FPrivKeyFile), 'w'); 139 | try 140 | PEM_write_bio_RSAPrivateKey(FBio, FKey.pkey.rsa, EVP_aes_128_cbc(), nil, 0, _OnGetPassword, nil); 141 | finally 142 | BIO_free(FBio); 143 | end; 144 | Writeln('Write public key (public.pem)'); 145 | FBio := BIO_new_file(PAnsiChar(FPubKeyFile), 'w'); 146 | try 147 | PEM_write_bio_PUBKEY(FBio, FKey); 148 | finally 149 | BIO_free(FBio); 150 | end; 151 | 152 | Writeln('Write self-signed certificate (cacert.pem)'); 153 | FBio := BIO_new_file(PAnsiChar(FCertFile), 'w'); 154 | try 155 | PEM_write_bio_X509(FBio, FX509); 156 | finally 157 | BIO_free(FBio); 158 | end; 159 | 160 | X509_free(FX509); 161 | EVP_PKEY_free(FKey); 162 | 163 | except 164 | on E: Exception do 165 | Writeln(E.ClassName, ': ', E.Message); 166 | end; 167 | end. 168 | -------------------------------------------------------------------------------- /demo/mycomp.dpr: -------------------------------------------------------------------------------- 1 | program mycomp; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | ssl_types, 10 | ssl_const, 11 | ssl_util, 12 | ssl_bio, 13 | ssl_err, 14 | ssl_evp, 15 | ssl_cms; 16 | 17 | var 18 | _in, _out: PBIO; 19 | cms: PCMS_ContentInfo; 20 | flags: TC_INT; 21 | fname, foutname: AnsiString; 22 | begin 23 | try 24 | Writeln('DEMO CMS compress'); 25 | if ParamCount = 0 then 26 | begin 27 | Writeln('usage mycomp.exe filename'); 28 | halt(1); 29 | end; 30 | fname := ParamStr(1); 31 | foutname := ChangeFileExt(fname, '.comp'); 32 | SSL_InitERR; 33 | SSL_InitEVP; 34 | SSL_InitCMS; 35 | SSL_InitBIO; 36 | OPENSSL_add_all_algorithms_noconf; 37 | try 38 | _in := BIO_new_file(PansiChar(fname), 'r'); 39 | SSL_CheckError; 40 | flags := CMS_STREAM or CMS_BINARY; 41 | 42 | cms := CMS_compress(_in, NID_zlib_compression, flags); 43 | SSL_CheckError; 44 | _out := BIO_new_file(PAnsiChar(foutname), 'w'); 45 | SSL_CheckError; 46 | SMIME_write_CMS(_out, cms, _in, flags); 47 | Writeln('Compressed data write into ', foutname); 48 | finally 49 | if Assigned(_in) then 50 | BIO_free(_in); 51 | if Assigned(cms) then 52 | CMS_ContentInfo_free(cms); 53 | if Assigned(_out) then 54 | BIO_free(_out); 55 | end; 56 | { TODO -oUser -cConsole Main : Insert code here } 57 | except 58 | on E: Exception do 59 | Writeln(E.ClassName, ': ', E.Message); 60 | end; 61 | end. 62 | -------------------------------------------------------------------------------- /demo/mydigest.dpr: -------------------------------------------------------------------------------- 1 | program mydigest; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | Classes, 10 | ssl_md5, 11 | ssl_mdc2, 12 | ssl_hmac, 13 | ssl_sha, 14 | ssl_types, 15 | ssl_err, 16 | ssl_evp, 17 | ssl_const, 18 | ssl_util; 19 | 20 | var F: TFileStream; 21 | Buf: PAnsiChar; 22 | Dgst: PAnsiChar; 23 | Len: Integer; 24 | FName: String; 25 | _md5: MD5_CTX; 26 | _mdc2: MDC2_CTX; 27 | _sha: SHA_CTX; 28 | _sha256: SHA256_CTX; 29 | _sha512: SHA512_CTX; 30 | _hmac: HMAC_CTX; 31 | _hmac_key: PAnsiChar; 32 | _hmac_key_len: Integer; 33 | _hmac_dgst_len: TC_UINT; 34 | 35 | const 36 | BufSize = 2048; 37 | 38 | procedure WriteDigest(ADgst: PAnsiChar; ALen: Word); 39 | var i: Word; 40 | begin 41 | for i := 0 to ALen - 1 do 42 | Write(IntToHex(Ord(ADgst[I]), 2)); 43 | Writeln; 44 | end; 45 | 46 | begin 47 | try 48 | { TODO -oUser -cConsole Main : Insert code here } 49 | Writeln('DEMO mydigest'); 50 | if ParamCount = 0 then 51 | begin 52 | Writeln('Usage: mydigest.exe filename'); 53 | Halt(1); 54 | end; 55 | SSL_InitERR; 56 | SSL_InitMDC2; 57 | SSL_InitMD5; 58 | SSL_Initsha; 59 | SSL_InitUtil; 60 | SSL_InitEVP; 61 | SSL_InitHMAC; 62 | 63 | Fname := ParamStr(1); 64 | Writeln(FName, ' readed'); 65 | F := TFileStream.Create(FName, fmOpenRead); 66 | try 67 | Buf := OpenSSL_malloc(BufSize); 68 | try 69 | if MD5_Init(@_md5) = 1 then 70 | begin 71 | Dgst := OpenSSL_malloc(MD5_DIGEST_LENGTH); 72 | try 73 | while F.Position < F.Size do 74 | begin 75 | Len := F.Read(Buf^, BufSize); 76 | MD5_Update(@_md5, Buf, Len); 77 | Write('Read:', F.Position:10, ' bytes', #13); 78 | end; 79 | MD5_Final(Dgst, @_md5); 80 | Writeln; 81 | Write('MD5 Digest: '); 82 | WriteDigest(Dgst, MD5_DIGEST_LENGTH); 83 | finally 84 | OpenSSL_free(Dgst); 85 | end; 86 | Writeln; 87 | end; 88 | F.Position := 0; 89 | if MDC2_Init(@_mdc2) = 1 then 90 | begin 91 | Dgst := OpenSSL_malloc(MDC2_DIGEST_LENGTH); 92 | try 93 | while F.Position < F.Size do 94 | begin 95 | Len := F.Read(Buf^, BufSize); 96 | MDC2_Update(@_mdc2, Buf, Len); 97 | Write('Read:', F.Position:10, ' bytes', #13); 98 | end; 99 | MDC2_Final(Dgst, @_mdc2); 100 | Writeln; 101 | Write('MDC2 Digest: '); 102 | WriteDigest(Dgst, MDC2_DIGEST_LENGTH); 103 | finally 104 | OpenSSL_free(Dgst); 105 | end; 106 | Writeln; 107 | 108 | end; 109 | 110 | 111 | F.Position := 0; 112 | if SHA_Init(@_sha) = 1 then 113 | begin 114 | Dgst := OpenSSL_malloc(SHA_DIGEST_LENGTH); 115 | try 116 | while F.Position < F.Size do 117 | begin 118 | Len := F.Read(Buf^, BufSize); 119 | SHA_Update(@_SHA, Buf, Len); 120 | Write('Read:', F.Position:10, ' bytes', #13); 121 | end; 122 | SHA_Final(Dgst, @_sha); 123 | Writeln; 124 | Write('SHA Digest: '); 125 | WriteDigest(Dgst, SHA_DIGEST_LENGTH); 126 | finally 127 | OpenSSL_free(Dgst); 128 | end; 129 | Writeln; 130 | 131 | end; 132 | 133 | 134 | F.Position := 0; 135 | if SHA256_Init(@_sha256) = 1 then 136 | begin 137 | Dgst := OpenSSL_malloc(SHA256_DIGEST_LENGTH); 138 | try 139 | while F.Position < F.Size do 140 | begin 141 | Len := F.Read(Buf^, BufSize); 142 | SHA256_Update(@_SHA256, Buf, Len); 143 | Write('Read:', F.Position:10, ' bytes', #13); 144 | end; 145 | SHA256_Final(Dgst, @_sha256); 146 | Writeln; 147 | Write('SHA256 Digest: '); 148 | WriteDigest(Dgst, SHA256_DIGEST_LENGTH); 149 | finally 150 | OpenSSL_free(Dgst); 151 | end; 152 | Writeln; 153 | 154 | end; 155 | 156 | F.Position := 0; 157 | if SHA512_Init(@_sha512) = 1 then 158 | begin 159 | Dgst := OpenSSL_malloc(SHA512_DIGEST_LENGTH); 160 | try 161 | while F.Position < F.Size do 162 | begin 163 | Len := F.Read(Buf^, BufSize); 164 | SHA512_Update(@_SHA512, Buf, Len); 165 | Write('Read:', F.Position:10, ' bytes', #13); 166 | end; 167 | SHA512_Final(Dgst, @_sha512); 168 | Writeln; 169 | Write('SHA512 Digest: '); 170 | WriteDigest(Dgst, SHA512_DIGEST_LENGTH); 171 | finally 172 | OpenSSL_free(Dgst); 173 | end; 174 | Writeln; 175 | 176 | end; 177 | 178 | F.Position := 0; 179 | 180 | _hmac_key_len := 10; 181 | _hmac_key := OpenSSL_malloc(_hmac_key_len); 182 | _hmac_key := '1234567890'; 183 | 184 | HMAC_CTX_init(@_hmac); 185 | HMAC_Init(@_hmac, _hmac_key, _hmac_key_len, EVP_sha1()); 186 | while F.Position < F.Size do 187 | begin 188 | Len := F.Read(Buf^, BufSize); 189 | HMAC_Update(@_hmac, Buf, Len); 190 | Write('Read:', F.Position:10, ' bytes', #13); 191 | end; 192 | Dgst := OpenSSL_malloc(1024); 193 | Write('HMAC with SHA1 digest: '); 194 | HMAC_Final(@_hmac, Dgst, _hmac_dgst_len); 195 | WriteDigest(Dgst, _hmac_dgst_len); 196 | Writeln; 197 | OpenSSL_free(Dgst); 198 | 199 | finally 200 | OpenSSL_free(Buf); 201 | end; 202 | finally 203 | F.Free; 204 | end; 205 | except 206 | on E: Exception do 207 | Writeln(E.ClassName, ': ', E.Message); 208 | end; 209 | end. 210 | -------------------------------------------------------------------------------- /demo/mygost.dpr: -------------------------------------------------------------------------------- 1 | program mygost; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | ssl_engine in '..\ssl_engine.pas', 10 | ssl_err in '..\ssl_err.pas', 11 | ssl_types in '..\ssl_types.pas', 12 | ssl_const in '..\ssl_const.pas', 13 | ssl_lib in '..\ssl_lib.pas', 14 | ssl_evp in '..\ssl_evp.pas', 15 | ssl_bio in '..\ssl_bio.pas', 16 | ssl_pem in '..\ssl_pem.pas', 17 | ssl_objects in '..\ssl_objects.pas', 18 | ssl_util in '..\ssl_util.pas', 19 | ssl_asn in '..\ssl_asn.pas'; 20 | 21 | var 22 | GostLib: AnsiString; 23 | E: PENGINE; 24 | 25 | 26 | // Callback for keygen 27 | function EVP_KEYGENCB(ctx: PEVP_PKEY_CTX): TC_INT; cdecl; 28 | begin 29 | Result := 1; 30 | end; 31 | 32 | function EVP_PASS_CB(buf: PAnsiString; size: TC_INT; rwflag: TC_INT; userdata: pointer): integer; cdecl; 33 | var P: AnsiString; 34 | begin 35 | 36 | repeat 37 | Write('Password: '); 38 | Readln(P); 39 | Result := Length(P); 40 | if Result = 0 then 41 | writeln('Password is not empty!') 42 | else 43 | Break; 44 | until False; 45 | 46 | if Result > size then 47 | Result := size; 48 | if Result > 0 then 49 | Move(P[1], buf^, Result); 50 | end; 51 | 52 | procedure Encrypt(Src: PAnsiChar; SrcLen: Cardinal; Dst: PAnsiChar; var DstLen: Cardinal; AKey: PEVP_PKEY); 53 | var Ctx: PEVP_PKEY_CTX; 54 | r: TC_INT; 55 | begin 56 | Ctx := EVP_PKEY_CTX_new(AKey, nil); 57 | SSL_CheckError; 58 | if Ctx <> nil then 59 | begin 60 | r := EVP_PKEY_encrypt_init(Ctx); 61 | SSL_CheckError; 62 | r := EVP_PKEY_encrypt(Ctx, Dst, DstLen, Src, SrcLen); 63 | SSL_CheckError; 64 | if Ctx <> nil then 65 | EVP_PKEY_CTX_free(Ctx); 66 | end else 67 | raise Exception.Create('Error create cipher context'); 68 | end; 69 | 70 | procedure Decrypt(Src: PAnsiChar; SrcLen: Cardinal; Dst: PAnsiChar; var DstLen: Cardinal; AKey: PEVP_PKEY); 71 | var Ctx: PEVP_PKEY_CTX; 72 | r: TC_INT; 73 | begin 74 | Ctx := EVP_PKEY_CTX_new(AKey, nil); 75 | SSL_CheckError; 76 | if Ctx <> nil then 77 | begin 78 | r := EVP_PKEY_decrypt_init(Ctx); 79 | SSL_CheckError; 80 | r := EVP_PKEY_decrypt(Ctx, Dst, DstLen, Src, SrcLen); 81 | SSL_CheckError; 82 | if Ctx <> nil then 83 | EVP_PKEY_CTX_free(Ctx); 84 | end else 85 | raise Exception.Create('Error create cipher context'); 86 | end; 87 | 88 | 89 | procedure EncryptDecryptGOST(AKey: PEVP_PKEY); 90 | var Dst, Src: AnsiString; 91 | inlen: TC_SIZE_T; 92 | Buf, outBuf: PAnsiChar; 93 | outlen, tmplen: TC_SIZE_T; 94 | DecStr: PAnsiChar; 95 | EncMsg: array of PAnsiChar; 96 | I: Integer; 97 | begin 98 | Src := 'Test string for encrypt and decrypt with GOST algorithm and key'; 99 | Writeln; 100 | Writeln('ENCRYPT test'); 101 | inlen := Length(Src); 102 | Encrypt(PAnsiChar(Src), inlen, nil, outlen, AKey); 103 | inlen := Length(Src); 104 | Writeln('Need ', outlen, ' bytes for encrypt block of 32 bytes'); 105 | 106 | try 107 | Dst := ''; 108 | 109 | 110 | repeat 111 | Buf := OpenSSL_malloc(outlen); 112 | outBuf := PAnsiChar(Copy(Src, 1, 32)); 113 | Encrypt(outBuf, 32, Buf, outlen, AKey); 114 | Delete(Src, 1, 32); 115 | SetLength(EncMsg, Length(EncMsg) + 1); 116 | EncMsg[Length(EncMsg)-1] := Buf; 117 | until Src = ''; 118 | Writeln('ENCRYPTED Data: '); 119 | for i := 0 to Length(EncMsg) - 1 do 120 | Writeln(EncMsg[I]); 121 | 122 | 123 | Decrypt(PAnsiChar(EncMsg[0]), Length(EncMsg[0]), nil, outlen, AKey); 124 | Src := ''; 125 | Buf := OpenSSL_malloc(outlen); 126 | Src := ''; 127 | for I := 0 to Length(EncMsg) - 1 do 128 | begin 129 | FillChar(Buf^, outlen, 0); 130 | outBuf := EncMsg[I]; 131 | 132 | // 133 | Decrypt(outBuf, 167, Buf, outlen, AKey); 134 | // 167 WTF???? 135 | 136 | Src := Src + Buf; 137 | end; 138 | OpenSSL_free(Buf); 139 | Writeln('DECRYPTED Data: ', Src); 140 | 141 | finally 142 | 143 | end; 144 | 145 | end; 146 | 147 | 148 | procedure GenerateGOST2001Key; 149 | var 150 | am: PEVP_PKEY_ASN1_METHOD; 151 | e: PENGINE; 152 | Ciph: PEVP_CIPHER; 153 | pkey_id, pkey_base_id, pkey_flags: TC_INT; 154 | info, pem_str: PAnsiChar; 155 | ctx: PEVP_PKEY_CTX; 156 | key: PEVP_PKEY; 157 | fname: AnsiString; 158 | bp: PBIO; 159 | begin 160 | e := nil; 161 | am := nil; 162 | am := EVP_PKEY_asn1_find_str(@e, 'GOST2001', -1); 163 | try 164 | if am <> nil then 165 | begin 166 | Ciph := EVP_camellia_128_cbc; 167 | 168 | EVP_PKEY_asn1_get0_info(pkey_id, pkey_base_id, pkey_flags, @info, @pem_str, am); 169 | Writeln('NID = ', pkey_id); 170 | Writeln(OBJ_nid2ln(pkey_id)); 171 | Writeln('ALGORITHM = ', pem_str, ',', info); 172 | ctx := EVP_PKEY_CTX_new_id(pkey_id, nil); 173 | SSL_CheckError; 174 | EVP_PKEY_keygen_init(ctx); 175 | SSL_CheckError; 176 | EVP_PKEY_CTX_ctrl_str(ctx, 'paramset', 'XB'); 177 | 178 | EVP_PKEY_CTX_set_cb(ctx, EVP_KEYGENCB); 179 | EVP_PKEY_CTX_set_app_data(ctx, nil); 180 | SSL_CheckError; 181 | key := nil; 182 | EVP_PKEY_keygen(ctx, @key); 183 | SSL_CheckError; 184 | fName := ExtractFilePath(ParamStr(0))+'gost.pem'; 185 | bp := BIO_new_file(PAnsiChar(fName), 'wb'); 186 | try 187 | PEM_write_bio_PrivateKey(bp, key, Ciph, nil, 0, EVP_PASS_CB, nil); 188 | SSL_CheckError; 189 | Writeln('GOST 2001 key SIZE = ', EVP_PKEY_bits(key), ' bit'); 190 | Writeln('Saved to ', fname); 191 | Writeln('Encrypted with ', OBJ_nid2sn(Ciph.nid), ' (', Ciph.nid, ')'); 192 | EncryptDecryptGOST(key); 193 | finally 194 | BIO_free(bp); 195 | end; 196 | EVP_PKEY_free(key); 197 | EVP_PKEY_CTX_free(ctx); 198 | end; 199 | finally 200 | ENGINE_free(E); 201 | end; 202 | end; 203 | 204 | 205 | 206 | 207 | begin 208 | Writeln('mygost'); 209 | Writeln('DEMO load gost.dll'); 210 | try 211 | SSL_InitERR; 212 | SSL_InitENGINE; 213 | SSL_InitBIO; 214 | SSL_InitEVP; 215 | SSL_InitPEM; 216 | SSL_InitOBJ; 217 | SSL_InitUtil; 218 | ENGINE_load_builtin_engines; 219 | ENGINE_load_dynamic; 220 | GostLib := ExtractFilePath(ParamStr(0))+'gost.dll'; 221 | if FileExists(GostLib) then 222 | begin 223 | E := ENGINE_by_id('dynamic'); 224 | if E = nil then 225 | raise Exception.Create('Dynamic engine not loaded!'); 226 | SSL_CheckError; 227 | if ENGINE_cmd_is_executable(e, 200) = 1 then 228 | ENGINE_ctrl_cmd_string(e, 'SO_PATH', PAnsiChar(GostLib), 0); 229 | SSL_CheckError; 230 | ENGINE_ctrl_cmd_string(e, 'LIST_ADD', '2', 0); 231 | ENGINE_ctrl_cmd_string(e, 'LOAD', nil, 0); 232 | ENGINE_set_default_string(e, 'ALL'); 233 | ENGINE_ctrl_cmd_string(e, 'CRYPT_PARAMS', 'id-Gost28147-89-CryptoPro-B-ParamSet', 0); 234 | ENGINE_free(e); 235 | 236 | OpenSSL_add_all_ciphers; 237 | OpenSSL_add_all_digests; 238 | 239 | GenerateGOST2001Key; 240 | end else 241 | raise Exception.Create('Library gost.dll not found!'); 242 | 243 | 244 | except 245 | 246 | on E: Exception do 247 | Writeln(E.ClassName, ': ', E.Message); 248 | end; 249 | end. 250 | -------------------------------------------------------------------------------- /demo/myprime.dpr: -------------------------------------------------------------------------------- 1 | program myprime; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | 8 | uses 9 | System.SysUtils, 10 | ssl_types, 11 | ssl_bio, 12 | ssl_bn; 13 | 14 | procedure callback(_type, _num: TC_INT; p3: Pointer ); cdecl; 15 | begin 16 | case _type of 17 | 0: Write('.'); 18 | 1: Write('+', #13); 19 | 2: Write('*', #13); 20 | end; 21 | end; 22 | 23 | var r: PBIGNUM; 24 | bp: PBIO; 25 | a: TC_INT; 26 | buf: AnsiString; 27 | Res: AnsiString; 28 | num: TC_INT; 29 | begin 30 | try 31 | 32 | if ParamCount > 0 then 33 | Num := StrToIntDef(ParamStr(1), 256) 34 | else 35 | Num := 256; 36 | writeln('Generate a strong prime ', Num, ' bits'); 37 | SSL_InitBN; 38 | SSL_InitBIO; 39 | r := BN_generate_prime(nil, Num, 1, nil, nil, callback, nil); 40 | Buf := BN_bn2hex(r); 41 | Writeln('BN_bn2hex: ', buf); 42 | 43 | bp := BIO_new(BIO_s_mem); 44 | BN_print(bp, r); 45 | Writeln('BN_print: ',BIO_ReadAnsiString(bp)); 46 | BN_free(r); 47 | { TODO -oUser -cConsole Main : Insert code here } 48 | except 49 | on E: Exception do 50 | Writeln(E.ClassName, ': ', E.Message); 51 | end; 52 | end. 53 | -------------------------------------------------------------------------------- /demo/mysign.dpr: -------------------------------------------------------------------------------- 1 | program mysign; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | ssl_evp, 10 | ssl_bio, 11 | ssl_err, 12 | ssl_const, 13 | ssl_types, 14 | ssl_pem, 15 | ssl_engine, 16 | ssl_x509; 17 | 18 | var 19 | certFile: AnsiString; 20 | PrivKey: AnsiString; 21 | signFile: AnsiString; 22 | Path: AnsiString; 23 | pkey: PEVP_PKEY; 24 | bp, mbp: PBIO; 25 | md_ctx: EVP_MD_CTX; 26 | Buf: AnsiString; 27 | Len: Integer; 28 | SigBuf: Array [0..4095] of AnsiChar; 29 | SigLen: Integer; 30 | InBuf: Array[0..511] of AnsiChar; 31 | _x509: PX509; 32 | b64: PBIO; 33 | a, i : Integer; 34 | 35 | function _OnGetPassword(buf: PAnsiString; size: TC_INT; rwflag: TC_INT; userdata: pointer): integer; cdecl; 36 | var P: AnsiString; 37 | begin 38 | 39 | repeat 40 | Write('Private key password: '); 41 | Readln(P); 42 | Result := Length(P); 43 | if Result = 0 then 44 | writeln('Password is not empty!') 45 | else 46 | Break; 47 | until False; 48 | 49 | if Result > size then 50 | Result := size; 51 | if Result > 0 then 52 | Move(P[1], buf^, Result); 53 | end; 54 | 55 | 56 | begin 57 | try 58 | { TODO -oUser -cConsole Main : Insert code here } 59 | Writeln('DEMO: mysign'); 60 | 61 | SSL_InitPEM; 62 | SSL_InitERR; 63 | SSL_InitBIO; 64 | SSL_InitEVP; 65 | SSL_InitENGINE; 66 | SSL_InitX509; 67 | 68 | ENGINE_load_builtin_engines; 69 | OpenSSL_add_all_ciphers; 70 | OpenSSL_add_all_digests; 71 | Path := ExtractFilePath(ParamStr(0)); 72 | certFile := Path + 'cacert.pem'; 73 | PrivKey := Path + 'private.pem'; 74 | signFile := Path+'sign.pem'; 75 | 76 | if (not FileExists(certFile)) or (not FileExists(PrivKey)) then 77 | raise Exception.Create('Certificate or Private Key not found. Use mycert.exe first'); 78 | 79 | Buf := 'Test string for sign'; 80 | Len := Length(Buf); 81 | Writeln('Sign test phrase: '+Buf); 82 | { Sign } 83 | bp := BIO_new_file(PAnsiChar(PrivKey), 'r'); 84 | SSL_CheckError; 85 | try 86 | pkey := PEM_read_bio_PrivateKey(bp, nil, _OnGetPassword, nil); 87 | SSL_CheckError; 88 | finally 89 | BIO_free(bp); 90 | end; 91 | 92 | 93 | EVP_SignInit(@md_ctx, EVP_sha384); 94 | SSL_CheckError; 95 | EVP_SignUpdate(@md_ctx, PAnsiChar(buf), len); 96 | SSL_CheckError; 97 | 98 | EVP_SignFinal(@md_ctx, @SigBuf, SigLen, pkey); 99 | SSL_CheckError; 100 | Writeln('Sign size ', SigLen, ' bytes'); 101 | 102 | EVP_PKEY_free(pkey); 103 | 104 | bp := BIO_new_file(PAnsiChar(signFile), 'w'); 105 | 106 | b64 := BIO_new(BIO_f_base64); 107 | mbp := BIO_push(b64, bp); 108 | 109 | BIO_write(mbp, @SigBuf, SigLen); 110 | BIO_flush(mbp); 111 | Writeln('Bytes written ', BIO_number_written(bp), ' file ', signFile); 112 | BIO_free_all(mbp); 113 | { End sign } 114 | 115 | { Verify } 116 | Writeln('Verify sign'); 117 | bp := BIO_new_file(PAnsiChar(certFile), 'r'); 118 | SSL_CheckError; 119 | try 120 | _x509 := PEM_read_bio_X509(bp, nil, _OnGetPassword, nil); 121 | SSL_CheckError; 122 | finally 123 | BIO_free(bp); 124 | end; 125 | 126 | fillchar(md_ctx, SizeOf(md_ctx), 0); 127 | 128 | pkey := X509_get_pubkey(_x509); 129 | 130 | b64 := BIO_new(BIO_f_base64); 131 | bp := BIO_new_file(PAnsiChar(signFile), 'r'); 132 | SSL_CheckError; 133 | try 134 | bp := BIO_push(b64, bp); 135 | FillChar(SigBuf[0], SizeOf(SigBuf), 0); 136 | i := 0; 137 | repeat 138 | a := BIO_read(bp, @InBuf, 512); 139 | if a > 0 then 140 | Move(InBuf[0], SigBuf[i], a); 141 | inc(i, a); 142 | until a <= 0; 143 | 144 | finally 145 | BIO_free_all(bp); 146 | end; 147 | 148 | EVP_VerifyInit(@md_ctx, EVP_sha384); 149 | SSL_CheckError; 150 | EVP_VerifyUpdate(@md_ctx, PAnsiChar(Buf), Len); 151 | SSL_CheckError; 152 | EVP_VerifyFinal(@md_ctx, SigBuf, SigLen, pkey); 153 | SSL_CheckError; 154 | EVP_PKEY_free(pkey); 155 | Writeln('Verify Ok'); 156 | 157 | { End verify } 158 | 159 | except 160 | on E: Exception do 161 | Writeln(E.ClassName, ': ', E.Message); 162 | end; 163 | end. 164 | -------------------------------------------------------------------------------- /demo/myuncomp.dpr: -------------------------------------------------------------------------------- 1 | program mycomp; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | ssl_types, 10 | ssl_const, 11 | ssl_util, 12 | ssl_bio, 13 | ssl_err, 14 | ssl_evp, 15 | ssl_cms; 16 | 17 | var 18 | _in, _out: PBIO; 19 | cms: PCMS_ContentInfo; 20 | flags: TC_INT; 21 | fname, foutname: AnsiString; 22 | begin 23 | try 24 | Writeln('DEMO CMS uncompress'); 25 | if ParamCount = 0 then 26 | begin 27 | Writeln('usage myuncomp.exe filename'); 28 | halt(1); 29 | end; 30 | fname := ParamStr(1); 31 | foutname := ChangeFileExt(fname, '.uncomp'); 32 | SSL_InitERR; 33 | SSL_InitEVP; 34 | SSL_InitCMS; 35 | SSL_InitBIO; 36 | OPENSSL_add_all_algorithms_noconf; 37 | try 38 | _in := BIO_new_file(PansiChar(fname), 'r'); 39 | SSL_CheckError; 40 | flags := CMS_STREAM or CMS_BINARY; 41 | 42 | cms := SMIME_read_CMS(_in, nil); 43 | SSL_CheckError; 44 | 45 | _out := BIO_new_file(PAnsiChar(foutname), 'w'); 46 | SSL_CheckError; 47 | 48 | CMS_uncompress(cms, nil, _out, 0); 49 | SSL_CheckError; 50 | Writeln('Uncompressed data write into ', foutname); 51 | finally 52 | if Assigned(_in) then 53 | BIO_free(_in); 54 | if Assigned(cms) then 55 | CMS_ContentInfo_free(cms); 56 | if Assigned(_out) then 57 | BIO_free(_out); 58 | end; 59 | { TODO -oUser -cConsole Main : Insert code here } 60 | except 61 | on E: Exception do 62 | Writeln(E.ClassName, ': ', E.Message); 63 | end; 64 | end. 65 | 66 | -------------------------------------------------------------------------------- /ssl.inc: -------------------------------------------------------------------------------- 1 | {$DEFINE AES_LONG} 2 | -------------------------------------------------------------------------------- /ssl_aes.pas: -------------------------------------------------------------------------------- 1 | unit ssl_aes; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | AES_options: function: PAnsiChar; cdecl = nil; 8 | AES_set_encrypt_key: function(userKey: PAnsiChar; bits: TC_INT; key: PAES_KEY): TC_INT; cdecl = nil; 9 | AES_set_decrypt_key: function(userKey: PAnsiChar; bits: TC_INT; key: PAES_KEY): TC_INT; cdecl = nil; 10 | private_AES_set_encrypt_key: function(userKey: PAnsiChar; bits: TC_INT; key: PAES_KEY): TC_INT; cdecl = nil; 11 | private_AES_set_decrypt_key: function(userKey: PAnsiChar; bits: TC_INT; key: PAES_KEY): TC_INT; cdecl = nil; 12 | AES_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; key: PAES_KEY); cdecl = nil; 13 | AES_decrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; key: PAES_KEY); cdecl = nil; 14 | AES_ecb_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; key: PAES_KEY; enc: TC_INT); cdecl = nil; 15 | AES_cbc_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; enc: TC_INT); cdecl = nil; 16 | AES_cfb128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; num: PC_INT; enc: TC_INT); cdecl = nil; 17 | AES_cfb1_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; num: PC_INT; enc: TC_INT); cdecl = nil; 18 | AES_cfb8_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; num: PC_INT; enc: TC_INT); cdecl = nil; 19 | AES_ofb128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; num: PC_INT); cdecl = nil; 20 | AES_ctr128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: aes_buf; ecount_buf: aes_buf; num: PC_INT); cdecl = nil; 21 | AES_ige_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; ivec: PAnsiChar; enc: TC_INT); cdecl = nil; 22 | AES_bi_ige_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; key: PAES_KEY; key2: PAES_KEY; ivec: PAnsiChar; enc: TC_INT); cdecl = nil; 23 | AES_wrap_key: function(key: PAES_KEY; iv: PAnsiChar; _out: PAnsiChar; _in: PAnsiChar; inlen: TC_UINT): TC_INT; cdecl = nil; 24 | AES_unwrap_key: function(key: PAES_KEY; iv: PAnsiChar; _out: PAnsiChar; _in: PAnsiChar; inlen: TC_UINT): TC_INT; cdecl = nil; 25 | 26 | procedure SSL_InitAES; 27 | 28 | implementation 29 | uses ssl_lib; 30 | procedure SSL_InitAES; 31 | begin 32 | if @AES_options = nil then 33 | begin 34 | 35 | @AES_options:= LoadFunctionCLib('AES_options'); 36 | @AES_set_encrypt_key:= LoadFunctionCLib('AES_set_encrypt_key'); 37 | @AES_set_decrypt_key:= LoadFunctionCLib('AES_set_decrypt_key'); 38 | @private_AES_set_encrypt_key:= LoadFunctionCLib('private_AES_set_encrypt_key'); 39 | @private_AES_set_decrypt_key:= LoadFunctionCLib('private_AES_set_decrypt_key'); 40 | @AES_encrypt:= LoadFunctionCLib('AES_encrypt'); 41 | @AES_decrypt:= LoadFunctionCLib('AES_decrypt'); 42 | @AES_ecb_encrypt:= LoadFunctionCLib('AES_ecb_encrypt'); 43 | @AES_cbc_encrypt:= LoadFunctionCLib('AES_cbc_encrypt'); 44 | @AES_cfb128_encrypt:= LoadFunctionCLib('AES_cfb128_encrypt'); 45 | @AES_cfb1_encrypt:= LoadFunctionCLib('AES_cfb1_encrypt'); 46 | @AES_cfb8_encrypt:= LoadFunctionCLib('AES_cfb8_encrypt'); 47 | @AES_ofb128_encrypt:= LoadFunctionCLib('AES_ofb128_encrypt'); 48 | @AES_ctr128_encrypt:= LoadFunctionCLib('AES_ctr128_encrypt'); 49 | @AES_ige_encrypt:= LoadFunctionCLib('AES_ige_encrypt'); 50 | @AES_bi_ige_encrypt:= LoadFunctionCLib('AES_bi_ige_encrypt'); 51 | @AES_wrap_key:= LoadFunctionCLib('AES_wrap_key'); 52 | @AES_unwrap_key:= LoadFunctionCLib('AES_unwrap_key'); 53 | 54 | end; 55 | end; 56 | 57 | end. 58 | -------------------------------------------------------------------------------- /ssl_bf.pas: -------------------------------------------------------------------------------- 1 | unit ssl_bf; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | private_BF_set_key: procedure(key: PBF_KEY; len: TC_INT; data: PAnsiChar); cdecl = nil; 8 | BF_set_key: procedure(key: PBF_KEY; len: TC_INT; data: PAnsiChar); cdecl = nil; 9 | BF_encrypt: procedure(data: PBF_LONG; key: PBF_KEY); cdecl = nil; 10 | BF_decrypt: procedure(data: PBF_LONG; key: PBF_KEY); cdecl = nil; 11 | 12 | BF_ecb_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; key: PBF_KEY; enc: TC_INT); cdecl = nil; 13 | BF_cbc_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; schedule: PBF_KEY; ivec: PAnsiChar; enc: TC_INT); cdecl = nil; 14 | BF_cfb64_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; schedule: PBF_KEY; ivec: PAnsiChar; num: PC_INT; enc: TC_INT); cdecl = nil; 15 | BF_ofb64_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; schedule: PBF_KEY; ivec: PAnsiChar; num: PC_INT); cdecl = nil; 16 | BF_options: function: PAnsiChar; cdecl = nil; 17 | 18 | procedure SSL_InitBF; 19 | 20 | implementation 21 | uses ssl_lib; 22 | 23 | procedure SSL_InitBF; 24 | begin 25 | if @BF_options = nil then 26 | begin 27 | 28 | @private_BF_set_key:= LoadFunctionCLib('private_BF_set_key', false); 29 | @BF_set_key:= LoadFunctionCLib('BF_set_key'); 30 | @BF_encrypt:= LoadFunctionCLib('BF_encrypt'); 31 | @BF_decrypt:= LoadFunctionCLib('BF_decrypt'); 32 | @BF_ecb_encrypt:= LoadFunctionCLib('BF_ecb_encrypt'); 33 | @BF_cbc_encrypt:= LoadFunctionCLib('BF_cbc_encrypt'); 34 | @BF_cfb64_encrypt:= LoadFunctionCLib('BF_cfb64_encrypt'); 35 | @BF_ofb64_encrypt:= LoadFunctionCLib('BF_ofb64_encrypt'); 36 | @BF_options:= LoadFunctionCLib('BF_options'); 37 | 38 | end; 39 | end; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /ssl_bio.pas: -------------------------------------------------------------------------------- 1 | {$I ssl.inc} 2 | unit ssl_bio; 3 | 4 | interface 5 | 6 | uses 7 | {$IFDEF FPC} 8 | {$IFDEF UNIX}cNetDB,{$ENDIF UNIX} 9 | {$ELSE} 10 | {$IFDEF MSWINDOWS} 11 | winapi.winsock2, 12 | {$ELSE} 13 | Posix.NetDB, 14 | {$ENDIF MSWINDOWS} 15 | {$ENDIF FPC} 16 | ssl_types; 17 | 18 | 19 | var 20 | BIO_new: function(_type: PBIO_METHOD): PBIO; cdecl = nil; 21 | BIO_set: function(a: PBIO; _type: PBIO_METHOD): TC_INT; cdecl = nil; 22 | BIO_free: function(a: PBIO): TC_INT; cdecl = nil; 23 | BIO_vfree: procedure(a: PBIO); cdecl = nil; 24 | BIO_read: function(b: PBIO; data: Pointer; len: TC_INT): TC_INT; cdecl = nil; 25 | BIO_gets: function(b: PBIO; buf: PAnsiChar; size: TC_INT): TC_INT; cdecl = nil; 26 | BIO_write: function(b: PBIO; data: Pointer; len: TC_INT): TC_INT; cdecl = nil; 27 | BIO_puts: function(bp: PBIO; buf: PAnsiChar): TC_INT; cdecl = nil; 28 | BIO_indent: function(b: PBIO; indent: TC_INT; max: TC_INT): TC_INT; cdecl = nil; 29 | BIO_ctrl: function (b: PBIO; cmd: TC_INT; larg: TC_LONG; parg: Pointer): TC_LONG; cdecl = nil; 30 | BIO_callback_ctrl: function(b:PBIO; cmd: TC_INT; callback: Pbio_info_cb): TC_LONG; cdecl = nil; 31 | BIO_ptr_ctrl: function(p: PBIO; cmd: TC_INT; larg: TC_LONG): PAnsiChar; cdecl = nil; 32 | BIO_int_ctrl: function(p: PBIO; cmd: TC_INT; larg: TC_LONG; iarg: TC_INT): TC_LONG; cdecl = nil; 33 | BIO_push: function(b: PBIO; append: PBIO): PBIO; cdecl = nil; 34 | BIO_pop: function(b: PBIO): PBIO; cdecl = nil; 35 | BIO_free_all: procedure(a: PBIO); cdecl = nil; 36 | BIO_find_type: function(b: PBIO; bio_type: TC_INT): PBIO; cdecl = nil; 37 | BIO_next: function (b: PBIO): PBIO; cdecl = nil; 38 | BIO_get_retry_BIO: function(bio: PBIO; reason: TC_INT): PBIO; cdecl = nil; 39 | BIO_get_retry_reason: function (bio: PBIO): TC_INT; cdecl = nil; 40 | BIO_dup_chain: function(_in: PBIO): PBIO; cdecl = nil; 41 | BIO_s_mem: function: PBIO_METHOD; cdecl = nil; 42 | BIO_new_mem_buf: function(buf: Pointer; len: TC_INT): PBIO; cdecl = nil; 43 | BIO_s_socket: function: PBIO_METHOD; cdecl = nil; 44 | BIO_s_file: function: PBIO_METHOD; cdecl = nil; 45 | BIO_s_connect: function: PBIO_METHOD; cdecl = nil; 46 | BIO_s_accept: function: PBIO_METHOD; cdecl = nil; 47 | BIO_s_fd: function: PBIO_METHOD; cdecl = nil; 48 | BIO_s_log: function: PBIO_METHOD; cdecl = nil; 49 | BIO_s_bio: function: PBIO_METHOD; cdecl = nil; 50 | BIO_s_null: function: PBIO_METHOD; cdecl = nil; 51 | BIO_f_null: function: PBIO_METHOD; cdecl = nil; 52 | BIO_f_buffer: function: PBIO_METHOD; cdecl = nil; 53 | BIO_f_linebuffer: function: PBIO_METHOD; cdecl = nil; 54 | BIO_f_nbio_test: function: PBIO_METHOD; cdecl = nil; 55 | BIO_s_datagram: function: PBIO_METHOD; cdecl = nil; 56 | 57 | BIO_new_socket: function(sock: TC_INT;close_flag: TC_INT): PBIO; cdecl = nil; 58 | BIO_new_dgram: function(fd: TC_INT; close_flag: TC_INT): PBIO; cdecl = nil; 59 | BIO_sock_error: function(sock: TC_INT): TC_INT; cdecl = nil; 60 | BIO_socket_ioctl: function(fd: TC_INT; _type: TC_LONG; arg: Pointer): TC_INT; cdecl = nil; 61 | BIO_socket_nbio: function(fd: TC_INT; mode: TC_INT): TC_INT; 62 | BIO_get_port: function(str: PAnsiChar; port_ptr: PC_USHORT): TC_INT; cdecl = nil; 63 | BIO_get_host_ip: function(str: PAnsiChar; ip: PAnsiChar): TC_INT; cdecl = nil; 64 | BIO_get_accept_socket: function(host_port: PAnsiChar; mode: TC_INT): TC_INT; 65 | BIO_accept: function(sock: TC_INT; ip_port: PPAnsiChar): TC_INT; cdecl = nil; 66 | BIO_sock_init: function: TC_INT; cdecl = nil; 67 | BIO_sock_cleanup: procedure; cdecl = nil; 68 | BIO_set_tcp_ndelay: function(sock: TC_INT;turn_on: TC_INT): TC_INT; cdecl = nil; 69 | 70 | BIO_asn1_set_prefix: function(b: PBIO; prefix: asn1_ps_func; prefix_free: asn1_ps_func): TC_INT; cdecl = nil; 71 | BIO_asn1_get_prefix: function(b: pBIO; var pprefix: asn1_ps_func; var pprefix_free: asn1_ps_func): TC_INT; cdecl = nil; 72 | BIO_asn1_set_suffix: function(b: PBIO; suffix: asn1_ps_func; suffix_free: asn1_ps_func): TC_INT; cdecl = nil; 73 | BIO_asn1_get_suffix: function(b: PBIO; var psuffix: asn1_ps_func; var psuffix_free: asn1_ps_func): TC_INT; cdecl = nil; 74 | 75 | BIO_set_flags: procedure(b: PBIO; flags: TC_INT); cdecl = nil; 76 | BIO_test_flags: function(b: PBIO; flags: TC_INT):TC_INT; cdecl = nil; 77 | BIO_clear_flags: procedure(b: PBIO; flags: TC_INT); cdecl = nil; 78 | 79 | BIO_copy_next_retry: procedure(b :PBIO); cdecl = nil; 80 | BIO_ctrl_get_write_guarantee: function(b: PBIO): TC_size_t; cdecl = nil; 81 | BIO_ctrl_get_read_request: function(b :PBIO): TC_SIZE_T; cdecl = nil; 82 | BIO_ctrl_reset_read_request: function(b: PBIO): TC_INT; cdecl = nil; 83 | BIO_ctrl_pending_f: function(b: PBIO): TC_SIZE_T; cdecl = nil; 84 | BIO_ctrl_wpending: function(b: PBIO): TC_SIZE_T; cdecl = nil; 85 | BIO_debug_callback: function(bio: PBIO; cmd: TC_INT; argp: PAnsiChar; argi: TC_INT; argl: TC_LONG; ret: TC_LONG): TC_LONG; cdecl = nil; 86 | BIO_dgram_non_fatal_error: function(error: TC_INT): TC_INT; cdecl = nil; 87 | 88 | BIO_dump: function(b: PBIO; bytes: PAnsiChar; len: TC_INT): TC_INT; cdecl = nil; 89 | BIO_dump_cb: function(cb: pbio_dump_cb; u: Pointer; s: PAnsiChar; len: TC_INT): TC_INT; cdecl = nil; 90 | BIO_dump_fp: function(var fp: File; s: PAnsiChar; len: TC_INT): TC_INT; cdecl = nil; 91 | BIO_dump_indent: function(b: PBIO; bytes: PAnsiChar; len: TC_INT; indent: TC_INT): TC_INT; cdecl = nil; 92 | BIO_dump_indent_cb: function(cb: pbio_dump_cb; u: Pointer; s: PAnsiChar; len: TC_INT; indent: TC_INT): TC_INT; cdecl = nil; 93 | BIO_dump_indent_fp: function(var fp: File; s: PAnsiChar; len: TC_INT; indent: TC_INT): TC_INT; cdecl = nil; 94 | BIO_f_asn1: function: PBIO_METHOD; cdecl = nil; 95 | BIO_f_base64: function: PBIO_METHOD; cdecl = nil; 96 | BIO_f_cipher: function: PBIO_METHOD; cdecl = nil; 97 | BIO_f_md: function: PBIO_METHOD; cdecl = nil; 98 | BIO_f_reliable: function: PBIO_METHOD; cdecl = nil; 99 | BIO_fd_non_fatal_error: function(error: TC_INT): TC_INT; cdecl = nil; 100 | BIO_fd_should_retry: function(i: TC_INT): TC_INT; cdecl = nil; 101 | BIO_get_callback: function(b: PBIO): Pbio_info_cb; cdecl = nil; 102 | BIO_get_callback_arg: function(b: PBIO): PAnsiChar; cdecl = nil; 103 | BIO_get_ex_data: function(bio: PBIO; idx: TC_INT; data: Pointer): TC_INT; cdecl = nil; 104 | BIO_get_ex_new_index: function(argl: TC_LONG; argp: Pointer; new_func: CRYPTO_EX_new; 105 | dup_func: CRYPTO_EX_dup; free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 106 | BIO_gethostbyname: function(name: PAnsiChar) : PHostEnt; cdecl = nil; 107 | BIO_method_name: function(b: PBIO): PAnsiChar; cdecl = nil; 108 | BIO_method_type: function(b: PBIO): TC_INT; cdecl = nil; 109 | BIO_new_NDEF: function(_out: PBIO; val: PASN1_VALUE; it: PASN1_ITEM): PBIO; 110 | BIO_new_PKCS7: function(_out: PBIO; p7: PPKCS7): PBIO; 111 | BIO_new_accept: function(host_port: PAnsiChar): PBIO; cdecl = nil; 112 | BIO_new_bio_pair: function (bio1: PPBIO; writebuf1: TC_SIZE_T; bio2: PPBIO; writebuf2: TC_SIZE_T): TC_INT; 113 | BIO_new_connect: function(host_port: PAnsiChar): PBIO; cdecl = nil; 114 | BIO_new_fd: function(fd: TC_INT; close_flag: TC_INT): PBIO; cdecl = nil; 115 | BIO_new_file: function(filename: PAnsiChar; mode: PAnsiChar): PBIO; cdecl = nil; 116 | BIO_new_fp: function(var stream: FILE; close_flag: TC_INT): PBIO; cdecl = nil; 117 | BIO_nread0: function(bio: PBIO; buf: PPAnsiChar): TC_INT; cdecl = nil; 118 | BIO_nread: function(bio: PBIO; buf: PPAnsiChar; num: TC_INT): TC_INT; cdecl = nil; 119 | BIO_number_read: function(bio: PBIO): TC_ULONG; cdecl = nil; 120 | BIO_number_written: function(bio: PBIO): TC_ULONG; cdecl = nil; 121 | BIO_nwrite0: function(bio: PBIO; buf: PPAnsiChar): TC_INT; cdecl = nil; 122 | BIO_nwrite: function(bio: PBIO; buf: PPAnsiChar; num: TC_INT): TC_INT; cdecl = nil; 123 | BIO_set_callback: procedure(b: PBIO; cb: Pbio_info_cb); cdecl = nil; 124 | BIO_set_callback_arg: procedure(b: PBIO; arg: PAnsiChar); cdecl = nil; 125 | BIO_set_cipher: procedure(b: PBIO; c: PEVP_CIPHER; k: PAnsiChar; i: PAnsiChar; enc: TC_INT); cdecl = nil; 126 | BIO_set_ex_data: function (bio: PBIO; idx: TC_INT; data: pointer): TC_INT; cdecl = nil; 127 | BIO_sock_non_fatal_error: function(error: TC_INT): TC_INT; cdecl = nil; 128 | BIO_sock_should_retry: function(i: TC_INT): TC_INT; cdecl = nil; 129 | 130 | 131 | function BIO_get_mem_data (bp: PBIO; buf: Pointer): TC_ULONG; inline; 132 | function BIO_reset(bp: PBIO): TC_INT; inline; 133 | function BIO_ReadAnsiString(bp: PBIO): AnsiString; 134 | function BIO_Flush(bp: PBIO): TC_INT; inline; 135 | function BIO_Pending(bp: PBIO): TC_INT; inline; 136 | function BIO_Eof(bp: PBIO): TC_INT; inline; 137 | function BIO_read_filename(b: PBIO; const name: PAnsiChar): TC_INT; 138 | 139 | { 140 | BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); 141 | int BIO_printf(BIO *bio, const char *format, ...) 142 | __bio_h__attr__((__format__(__printf__,2,3))); 143 | int BIO_vprintf(BIO *bio, const char *format, va_list args) 144 | __bio_h__attr__((__format__(__printf__,2,0))); 145 | int BIO_snprintf(char *buf, size_t n, const char *format, ...) 146 | __bio_h__attr__((__format__(__printf__,3,4))); 147 | int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) 148 | __bio_h__attr__((__format__(__printf__,3,0))); 149 | 150 | } 151 | 152 | procedure SSL_InitBIO; 153 | 154 | implementation 155 | 156 | uses ssl_lib, ssl_const; 157 | 158 | procedure SSL_InitBIO; 159 | begin 160 | if @BIO_new = nil then 161 | begin 162 | @BIO_new := LoadFunctionCLib('BIO_new'); 163 | @BIO_set := LoadFunctionCLib('BIO_set'); 164 | @BIO_free:= LoadFunctionCLib('BIO_free'); 165 | @BIO_vfree:= LoadFunctionCLib('BIO_vfree'); 166 | @BIO_read:= LoadFunctionCLib('BIO_read'); 167 | @BIO_gets:= LoadFunctionCLib('BIO_gets'); 168 | @BIO_write:= LoadFunctionCLib('BIO_write'); 169 | @BIO_puts:= LoadFunctionCLib('BIO_puts'); 170 | @BIO_indent:= LoadFunctionCLib('BIO_indent'); 171 | @BIO_ctrl:= LoadFunctionCLib('BIO_ctrl'); 172 | @BIO_callback_ctrl:= LoadFunctionCLib('BIO_callback_ctrl'); 173 | @BIO_ptr_ctrl:= LoadFunctionCLib('BIO_ptr_ctrl'); 174 | @BIO_int_ctrl:= LoadFunctionCLib('BIO_int_ctrl'); 175 | @BIO_push:= LoadFunctionCLib('BIO_push'); 176 | @BIO_pop:= LoadFunctionCLib('BIO_pop'); 177 | @BIO_free_all:= LoadFunctionCLib('BIO_free_all'); 178 | @BIO_find_type:= LoadFunctionCLib('BIO_find_type'); 179 | @BIO_next:= LoadFunctionCLib('BIO_next'); 180 | @BIO_get_retry_BIO:= LoadFunctionCLib('BIO_get_retry_BIO'); 181 | @BIO_get_retry_reason:= LoadFunctionCLib('BIO_get_retry_reason'); 182 | @BIO_dup_chain:= LoadFunctionCLib('BIO_dup_chain'); 183 | @BIO_s_mem:= LoadFunctionCLib('BIO_s_mem'); 184 | @BIO_new_mem_buf:= LoadFunctionCLib('BIO_new_mem_buf'); 185 | @BIO_s_socket:= LoadFunctionCLib('BIO_s_socket'); 186 | @BIO_s_file:= LoadFunctionCLib('BIO_s_file'); 187 | @BIO_s_connect:= LoadFunctionCLib('BIO_s_connect'); 188 | @BIO_s_accept:= LoadFunctionCLib('BIO_s_accept'); 189 | @BIO_s_fd:= LoadFunctionCLib('BIO_s_fd'); 190 | @BIO_s_log:= LoadFunctionCLib('BIO_s_log', false); 191 | @BIO_s_bio:= LoadFunctionCLib('BIO_s_bio'); 192 | @BIO_s_null:= LoadFunctionCLib('BIO_s_null'); 193 | @BIO_f_null:= LoadFunctionCLib('BIO_f_null'); 194 | @BIO_f_buffer:= LoadFunctionCLib('BIO_f_buffer'); 195 | @BIO_f_linebuffer:= LoadFunctionCLib('BIO_f_linebuffer', false); 196 | @BIO_f_nbio_test:= LoadFunctionCLib('BIO_f_nbio_test'); 197 | @BIO_s_datagram:= LoadFunctionCLib('BIO_s_datagram'); 198 | @BIO_new_socket:= LoadFunctionCLib('BIO_new_socket'); 199 | @BIO_new_dgram:= LoadFunctionCLib('BIO_new_dgram'); 200 | @BIO_sock_error:= LoadFunctionCLib('BIO_sock_error'); 201 | @BIO_socket_ioctl:= LoadFunctionCLib('BIO_socket_ioctl'); 202 | @BIO_socket_nbio:= LoadFunctionCLib('BIO_socket_nbio'); 203 | @BIO_get_port:= LoadFunctionCLib('BIO_get_port'); 204 | @BIO_get_host_ip:= LoadFunctionCLib('BIO_get_host_ip'); 205 | @BIO_get_accept_socket:= LoadFunctionCLib('BIO_get_accept_socket'); 206 | @BIO_accept:= LoadFunctionCLib('BIO_accept'); 207 | @BIO_sock_init:= LoadFunctionCLib('BIO_sock_init'); 208 | @BIO_sock_cleanup:= LoadFunctionCLib('BIO_sock_cleanup'); 209 | @BIO_set_tcp_ndelay:= LoadFunctionCLib('BIO_set_tcp_ndelay'); 210 | @BIO_asn1_set_prefix:= LoadFunctionCLib('BIO_asn1_set_prefix', false); 211 | @BIO_asn1_get_prefix:= LoadFunctionCLib('BIO_asn1_get_prefix', false); 212 | @BIO_asn1_set_suffix:= LoadFunctionCLib('BIO_asn1_set_suffix', false); 213 | @BIO_asn1_get_suffix:= LoadFunctionCLib('BIO_asn1_get_suffix', false); 214 | @BIO_set_flags:= LoadFunctionCLib('BIO_set_flags'); 215 | @BIO_test_flags:= LoadFunctionCLib('BIO_test_flags'); 216 | @BIO_clear_flags:= LoadFunctionCLib('BIO_clear_flags'); 217 | @BIO_copy_next_retry:= LoadFunctionCLib('BIO_copy_next_retry'); 218 | @BIO_ctrl_get_write_guarantee:= LoadFunctionCLib('BIO_ctrl_get_write_guarantee'); 219 | @BIO_ctrl_get_read_request:= LoadFunctionCLib('BIO_ctrl_get_read_request'); 220 | @BIO_ctrl_reset_read_request:= LoadFunctionCLib('BIO_ctrl_reset_read_request'); 221 | @BIO_ctrl_pending_f:= LoadFunctionCLib('BIO_ctrl_pending'); 222 | @BIO_ctrl_wpending:= LoadFunctionCLib('BIO_ctrl_wpending'); 223 | @BIO_debug_callback:= LoadFunctionCLib('BIO_debug_callback'); 224 | @BIO_dgram_non_fatal_error:= LoadFunctionCLib('BIO_dgram_non_fatal_error'); 225 | @BIO_dump:= LoadFunctionCLib('BIO_dump'); 226 | @BIO_dump_cb:= LoadFunctionCLib('BIO_dump_cb'); 227 | @BIO_dump_fp:= LoadFunctionCLib('BIO_dump_fp'); 228 | @BIO_dump_indent:= LoadFunctionCLib('BIO_dump_indent'); 229 | @BIO_dump_indent_cb:= LoadFunctionCLib('BIO_dump_indent_cb'); 230 | @BIO_dump_indent_fp:= LoadFunctionCLib('BIO_dump_indent_fp'); 231 | @BIO_f_asn1:= LoadFunctionCLib('BIO_f_asn1', false); 232 | @BIO_f_base64:= LoadFunctionCLib('BIO_f_base64'); 233 | @BIO_f_cipher:= LoadFunctionCLib('BIO_f_cipher'); 234 | @BIO_f_md:= LoadFunctionCLib('BIO_f_md'); 235 | @BIO_f_reliable:= LoadFunctionCLib('BIO_f_reliable'); 236 | @BIO_fd_non_fatal_error:= LoadFunctionCLib('BIO_fd_non_fatal_error'); 237 | @BIO_fd_should_retry:= LoadFunctionCLib('BIO_fd_should_retry'); 238 | @BIO_get_callback:= LoadFunctionCLib('BIO_get_callback'); 239 | @BIO_get_callback_arg:= LoadFunctionCLib('BIO_get_callback_arg'); 240 | @BIO_get_ex_data:= LoadFunctionCLib('BIO_get_ex_data'); 241 | @BIO_get_ex_new_index:= LoadFunctionCLib('BIO_get_ex_new_index'); 242 | @BIO_gethostbyname:= LoadFunctionCLib('BIO_gethostbyname'); 243 | @BIO_method_name:= LoadFunctionCLib('BIO_method_name'); 244 | @BIO_method_type:= LoadFunctionCLib('BIO_method_type'); 245 | @BIO_new_NDEF:= LoadFunctionCLib('BIO_new_NDEF', False); 246 | @BIO_new_PKCS7:= LoadFunctionCLib('BIO_new_PKCS7', false); 247 | @BIO_new_accept:= LoadFunctionCLib('BIO_new_accept'); 248 | @BIO_new_bio_pair:= LoadFunctionCLib('BIO_new_bio_pair'); 249 | @BIO_new_connect:= LoadFunctionCLib('BIO_new_connect'); 250 | @BIO_new_fd:= LoadFunctionCLib('BIO_new_fd'); 251 | @BIO_new_file:= LoadFunctionCLib('BIO_new_file'); 252 | @BIO_new_fp:= LoadFunctionCLib('BIO_new_fp'); 253 | @BIO_nread0:= LoadFunctionCLib('BIO_nread0'); 254 | @BIO_nread:= LoadFunctionCLib('BIO_nread'); 255 | @BIO_number_read:= LoadFunctionCLib('BIO_number_read'); 256 | @BIO_number_written:= LoadFunctionCLib('BIO_number_written'); 257 | @BIO_nwrite0:= LoadFunctionCLib('BIO_nwrite0'); 258 | @BIO_nwrite:= LoadFunctionCLib('BIO_nwrite'); 259 | @BIO_set_callback:= LoadFunctionCLib('BIO_set_callback'); 260 | @BIO_set_callback_arg:= LoadFunctionCLib('BIO_set_callback_arg'); 261 | @BIO_set_cipher:= LoadFunctionCLib('BIO_set_cipher'); 262 | @BIO_set_ex_data:= LoadFunctionCLib('BIO_set_ex_data'); 263 | @BIO_sock_non_fatal_error:= LoadFunctionCLib('BIO_sock_non_fatal_error'); 264 | @BIO_sock_should_retry:= LoadFunctionCLib('BIO_sock_should_retry'); 265 | end; 266 | end; 267 | 268 | function BIO_reset(bp: PBIO): TC_INT; inline; 269 | begin 270 | Result := BIO_ctrl(bp, BIO_CTRL_RESET, 0, nil); 271 | end; 272 | 273 | function BIO_get_mem_data (bp: PBIO; buf: Pointer): TC_ULONG; inline; 274 | begin 275 | Result := BIO_ctrl(bp, BIO_CTRL_INFO, 0, buf); 276 | end; 277 | 278 | function BIO_Flush(bp: PBIO): TC_INT; inline; 279 | begin 280 | Result := BIO_ctrl(bp, BIO_CTRL_FLUSH, 0, nil); 281 | end; 282 | 283 | function BIO_Pending(bp: PBIO): TC_INT; inline; 284 | begin 285 | Result := BIO_ctrl(bp, BIO_CTRL_PENDING, 0, nil); 286 | end; 287 | 288 | function BIO_Eof(bp: PBIO): TC_INT; inline; 289 | begin 290 | Result := BIO_ctrl(bp, BIO_CTRL_EOF, 0, nil); 291 | end; 292 | 293 | function BIO_ReadAnsiString(bp: PBIO): AnsiString; 294 | var Buf: AnsiString; 295 | a: TC_INT; 296 | begin 297 | Result := ''; 298 | SetLength(Buf, 512); 299 | repeat 300 | a := BIO_read(bp, @Buf[1], Length(Buf)); 301 | if a > 0 then 302 | Result := Result + Copy(Buf, 1, a); 303 | until a <= 0; 304 | SetLength(Buf, 0); 305 | end; 306 | 307 | function BIO_read_filename(b: PBIO; const name: PAnsiChar): TC_INT; 308 | begin 309 | Result := BIO_ctrl(b, BIO_C_SET_FILENAME, BIO_CLOSE or BIO_FP_READ, Name); 310 | end; 311 | 312 | end. -------------------------------------------------------------------------------- /ssl_buffer.pas: -------------------------------------------------------------------------------- 1 | {} 2 | unit ssl_buffer; 3 | 4 | interface 5 | uses ssl_types; 6 | var 7 | BUF_MEM_new: function: PBUF_MEM; cdecl = nil; 8 | BUF_MEM_free: procedure(a: PBUF_MEM); cdecl = nil; 9 | BUF_MEM_grow: function(str: PBUF_MEM; len: TC_SIZE_T): TC_INT; cdecl = nil; 10 | BUF_MEM_grow_clean: function(str: PBUF_MEM; len: TC_SIZE_T): TC_INT; cdecl = nil; 11 | BUF_strdup: function(str: PAnsiChar): PAnsiChar; cdecl = nil; 12 | BUF_strndup: function(str: PAnsiChar; siz: TC_SIZE_T): PAnsiChar; cdecl = nil; 13 | BUF_memdup: function(data: Pointer; siz: TC_SIZE_T): Pointer; cdecl = nil; 14 | BUF_reverse: procedure(_out: PAnsiChar; _in: PAnsiChar; siz: TC_SIZE_T); cdecl = nil; 15 | 16 | BUF_strlcpy: function(dst: PAnsiChar; src: PAnsiChar; siz: TC_SIZE_T): TC_SIZE_T; cdecl = nil; 17 | BUF_strlcat: function(dst: PAnsiChar; src: PAnsiChar; siz: TC_SIZE_T): TC_SIZE_T; cdecl = nil; 18 | 19 | ERR_load_BUF_strings: Procedure; cdecl = nil; 20 | 21 | procedure SSL_InitBuffer; 22 | 23 | implementation 24 | uses ssl_lib; 25 | 26 | procedure SSL_InitBuffer; 27 | begin 28 | if @BUF_MEM_new = nil then 29 | begin 30 | @BUF_MEM_new:= LoadFunctionCLib('BUF_MEM_new'); 31 | @BUF_MEM_free:= LoadFunctionCLib('BUF_MEM_free'); 32 | @BUF_MEM_grow:= LoadFunctionCLib('BUF_MEM_grow'); 33 | @BUF_MEM_grow_clean:= LoadFunctionCLib('BUF_MEM_grow_clean'); 34 | @BUF_strdup:= LoadFunctionCLib('BUF_strdup'); 35 | @BUF_strndup:= LoadFunctionCLib('BUF_strndup'); 36 | @BUF_memdup:= LoadFunctionCLib('BUF_memdup'); 37 | @BUF_reverse:= LoadFunctionCLib('BUF_reverse'); 38 | @BUF_strlcpy:= LoadFunctionCLib('BUF_strlcpy'); 39 | @BUF_strlcat:= LoadFunctionCLib('BUF_strlcat'); 40 | @ERR_load_BUF_strings:= LoadFunctionCLib('ERR_load_BUF_strings'); 41 | 42 | end; 43 | end; 44 | 45 | end. 46 | -------------------------------------------------------------------------------- /ssl_camellia.pas: -------------------------------------------------------------------------------- 1 | unit ssl_camellia; 2 | interface 3 | uses ssl_types; 4 | var 5 | Camellia_set_key: function (userKey: PAnsiChar; const bits: TC_INT; key: PCAMELLIA_KEY): TC_INT; cdecl = nil; 6 | 7 | Camellia_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; const key: PCAMELLIA_KEY); cdecl = nil; 8 | Camellia_decrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; const key: PCAMELLIA_KEY); cdecl = nil; 9 | 10 | Camellia_ecb_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; const key: PCAMELLIA_KEY; const enc: TC_INT); cdecl = nil; 11 | Camellia_cbc_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar;_length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: PAnsiChar; const enc: TC_INT); cdecl = nil; 12 | Camellia_cfb128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: PAnsiChar; var num: TC_INT; const enc: TC_INT); cdecl = nil; 13 | Camellia_cfb1_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar;_length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: PAnsiChar; var num: TC_INT; const enc: TC_INT); cdecl = nil; 14 | Camellia_cfb8_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: PAnsiChar; var num: TC_INT; const enc: TC_INT); cdecl = nil; 15 | Camellia_ofb128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: PAnsiChar; var num: TC_INT); cdecl = nil; 16 | Camellia_ctr128_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_SIZE_T; const key: PCAMELLIA_KEY; ivec: CAMELLIA_BUF; ecount_buf: CAMELLIA_BUF; var num: TC_UINT); cdecl = nil; 17 | 18 | procedure SSL_InitCAMELLIA; 19 | 20 | implementation 21 | uses ssl_lib; 22 | 23 | procedure SSL_InitCAMELLIA; 24 | begin 25 | if @Camellia_encrypt = nil then 26 | begin 27 | @Camellia_set_key:= LoadFunctionCLib('Camellia_set_key'); 28 | @Camellia_encrypt:= LoadFunctionCLib('Camellia_encrypt'); 29 | @Camellia_decrypt:= LoadFunctionCLib('Camellia_decrypt'); 30 | @Camellia_ecb_encrypt:= LoadFunctionCLib('Camellia_ecb_encrypt'); 31 | @Camellia_cbc_encrypt:= LoadFunctionCLib('Camellia_cbc_encrypt'); 32 | @Camellia_cfb128_encrypt:= LoadFunctionCLib('Camellia_cfb128_encrypt'); 33 | @Camellia_cfb1_encrypt:= LoadFunctionCLib('Camellia_cfb1_encrypt'); 34 | @Camellia_cfb8_encrypt:= LoadFunctionCLib('Camellia_cfb8_encrypt'); 35 | @Camellia_ofb128_encrypt:= LoadFunctionCLib('Camellia_ofb128_encrypt'); 36 | @Camellia_ctr128_encrypt:= LoadFunctionCLib('Camellia_ctr128_encrypt'); 37 | end; 38 | end; 39 | 40 | end. -------------------------------------------------------------------------------- /ssl_cast.pas: -------------------------------------------------------------------------------- 1 | unit ssl_cast; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | private_CAST_set_key: procedure(key: PCAST_KEY; len: TC_INT; data: PAnsiChar); cdecl = nil; 7 | CAST_set_key: procedure(key: PCAST_KEY; len: TC_INT; data: PAnsiChar); cdecl = nil; 8 | CAST_ecb_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; const key: PCAST_KEY; enc: TC_INT); cdecl = nil; 9 | CAST_encrypt: procedure(var data: CAST_LONG; key: PCAST_KEY); cdecl = nil; 10 | CAST_decrypt: procedure(var data: CAST_LONG; key: PCAST_KEY); cdecl = nil; 11 | CAST_cbc_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; ks: PCAST_KEY;iv: PAnsiChar; enc: TC_INT); cdecl = nil; 12 | CAST_cfb64_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; schedule: PCAST_KEY;ivec: PAnsiChar; var num: TC_INT; enc: TC_INT); cdecl = nil; 13 | CAST_ofb64_encrypt: procedure(_in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; schedule: PCAST_KEY;ivec: PAnsiChar; var num: TC_INT); cdecl = nil; 14 | 15 | procedure SLL_InitCAST; 16 | 17 | implementation 18 | uses ssl_lib; 19 | 20 | procedure SLL_InitCAST; 21 | begin 22 | if @CAST_set_key = nil then 23 | begin 24 | @private_CAST_set_key:= LoadFunctionCLib('private_CAST_set_key', false); 25 | @CAST_set_key:= LoadFunctionCLib('CAST_set_key'); 26 | @CAST_ecb_encrypt:= LoadFunctionCLib('CAST_ecb_encrypt'); 27 | @CAST_encrypt:= LoadFunctionCLib('CAST_encrypt'); 28 | @CAST_decrypt:= LoadFunctionCLib('CAST_decrypt'); 29 | @CAST_cbc_encrypt:= LoadFunctionCLib('CAST_cbc_encrypt'); 30 | @CAST_cfb64_encrypt:= LoadFunctionCLib('CAST_cfb64_encrypt'); 31 | @CAST_ofb64_encrypt:= LoadFunctionCLib('CAST_ofb64_encrypt'); 32 | end; 33 | 34 | end; 35 | 36 | end. 37 | -------------------------------------------------------------------------------- /ssl_cmac.pas: -------------------------------------------------------------------------------- 1 | unit ssl_cmac; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | CMAC_CTX_new: function: PCMAC_CTX; cdecl = nil; 7 | CMAC_CTX_cleanup: procedure(ctx: PCMAC_CTX); cdecl = nil; 8 | CMAC_CTX_free: procedure(ctx: PCMAC_CTX); cdecl = nil; 9 | CMAC_CTX_get0_cipher_ctx: function(ctx: PCMAC_CTX): PEVP_CIPHER_CTX; cdecl = nil; 10 | CMAC_CTX_copy: function(_out: PCMAC_CTX; _in: CMAC_CTX): TC_INT; cdecl = nil; 11 | CMAC_Init: function(ctx: PCMAC_CTX; key: Pointer; keylen: TC_SIZE_T; cipher: PEVP_CIPHER; impl: PENGINE): TC_INT; cdecl = nil; 12 | CMAC_Update: function(ctx: PCMAC_CTX; data: Pointer; dlen: TC_SIZE_T): TC_INT; cdecl = nil; 13 | CMAC_Final: function(ctx: PCMAC_CTX; _out: PAnsiChar; var poutlen: TC_SIZE_T): TC_INT; cdecl = nil; 14 | CMAC_resume: function(ctx: PCMAC_CTX): TC_INT; cdecl = nil; 15 | 16 | procedure SSL_InitCMAC; 17 | 18 | implementation 19 | uses ssl_lib; 20 | 21 | procedure SSL_InitCMAC; 22 | begin 23 | 24 | if @CMAC_CTX_new = nil then 25 | begin 26 | @CMAC_CTX_new:= LoadFunctionCLib('CMAC_CTX_new'); 27 | @CMAC_CTX_cleanup:= LoadFunctionCLib('CMAC_CTX_cleanup'); 28 | @CMAC_CTX_free:= LoadFunctionCLib('CMAC_CTX_free'); 29 | @CMAC_CTX_get0_cipher_ctx:= LoadFunctionCLib('CMAC_CTX_get0_cipher_ctx'); 30 | @CMAC_CTX_copy:= LoadFunctionCLib('CMAC_CTX_copy'); 31 | @CMAC_Init:= LoadFunctionCLib('CMAC_Init'); 32 | @CMAC_Update:= LoadFunctionCLib('CMAC_Update'); 33 | @CMAC_Final:= LoadFunctionCLib('CMAC_Final'); 34 | @CMAC_resume:= LoadFunctionCLib('CMAC_resume'); 35 | end; 36 | end; 37 | end. 38 | -------------------------------------------------------------------------------- /ssl_cms.pas: -------------------------------------------------------------------------------- 1 | unit ssl_cms; 2 | interface 3 | uses ssl_types; 4 | 5 | var 6 | CMS_get0_type: function(_cms: PCMS_ContentInfo): PASN1_OBJECT; cdecl = nil; 7 | 8 | CMS_dataInit: function(_cms: PCMS_ContentInfo; _icont: PBIO): PBIO; cdecl = nil; 9 | CMS_dataFinal: function(_cms: PCMS_ContentInfo; _bio: PBIO): TC_INT; cdecl = nil; 10 | 11 | CMS_get0_content: function(_cms: PCMS_ContentInfo): PPASN1_OCTET_STRING; cdecl = nil; 12 | CMS_is_detached: function(_cms: PCMS_ContentInfo): TC_INT; cdecl = nil; 13 | CMS_set_detached: function(_cms: PCMS_ContentInfo; _detached: TC_INT): TC_INT; cdecl = nil; 14 | 15 | CMS_ContentInfo_new: function: PCMS_ContentInfo; cdecl = nil; 16 | CMS_ContentInfo_free: procedure(a: PCMS_ContentInfo); cdecl = nil; 17 | d2i_CMS_ContentInfo: function(a: PPCMS_ContentInfo; _in: PPAnsiChar; len: TC_LONG): PCMS_ContentInfo; cdecl = nil; 18 | i2d_CMS_ContentInfo: function(a: PCMS_ContentInfo; _out: PPAnsiChar): TC_INT; cdecl = nil; 19 | CMS_ContentInfo_it: function: PASN1_ITEM; cdecl = nil; 20 | CMS_ReceiptRequest_new: function: PCMS_ReceiptRequest; cdecl = nil; 21 | CMS_ReceiptRequest_free: procedure(a: PCMS_ReceiptRequest); cdecl = nil; 22 | d2i_CMS_ReceiptRequest: function(a: PPCMS_ReceiptRequest; _in: PPAnsiChar; len: TC_LONG): PCMS_ReceiptRequest; cdecl = nil; 23 | i2d_CMS_ReceiptRequest: function(a: PCMS_ReceiptRequest; _out: PPAnsiChar): TC_INT; cdecl = nil; 24 | CMS_ReceiptRequest_it: function: PASN1_ITEM; cdecl = nil; 25 | 26 | 27 | //CMS_stream: function(unsigned char ***boundary; _cms: PCMS_ContentInfo): TC_INT; cdecl = nil; 28 | d2i_CMS_bio: function(_bp: PBIO; _cms: PPCMS_ContentInfo): PCMS_ContentInfo; cdecl = nil; 29 | i2d_CMS_bio: function(_bp: PBIO; _cms: PCMS_ContentInfo): TC_INT; cdecl = nil; 30 | 31 | BIO_new_CMS: function(_out: PBIO; _cms: PCMS_ContentInfo): PBIO; cdecl = nil; 32 | i2d_CMS_bio_stream: function(_out: PBIO; _cms: PCMS_ContentInfo; _in: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 33 | PEM_write_bio_CMS_stream: function(_out: PBIO; _cms: PCMS_ContentInfo; _in: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 34 | SMIME_read_CMS: function(_bio: PBIO; _bcont: PPBIO): PCMS_ContentInfo; cdecl = nil; 35 | SMIME_write_CMS: function(_bio: PBIO; _cms: PCMS_ContentInfo; _data: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 36 | 37 | CMS_final: function(_cms: PCMS_ContentInfo; _data: PBIO; _dcont: PBIO; _flags: TC_UINT): TC_INT; cdecl = nil; 38 | 39 | CMS_sign: function(_signcert: PX509; _pkey: PEVP_PKEY; _certs: PSTACK_OF_X509; _data: PBIO; _flags: TC_UINT): PCMS_ContentInfo; cdecl = nil; 40 | 41 | CMS_sign_receipt: function(_si: PCMS_SignerInfo; _signcert: PX509; _pkey: PEVP_PKEY; _certs: PSTACK_OF_X509; _flags: TC_UINT): PCMS_ContentInfo; cdecl = nil; 42 | 43 | CMS_data: function(_cms: PCMS_ContentInfo; _out: PBIO; _flags: TC_UINT): TC_INT; cdecl = nil; 44 | CMS_data_create: function(_in: PBIO; _flags: TC_UINT): PCMS_ContentInfo; cdecl = nil; 45 | 46 | CMS_digest_verify: function(_cms: PCMS_ContentInfo; _dcont: PBIO; _out: PBIO;flags: TC_INT): TC_INT; cdecl = nil; 47 | CMS_digest_create: function(_in: PBIO; const _md: PEVP_MD; flags: TC_INT): PCMS_ContentInfo; cdecl = nil; 48 | 49 | CMS_EncryptedData_decrypt: function(_cms: PCMS_ContentInfo;const _key: PAnsiChar; keylen: TC_SIZE_T;_dcont: PBIO; _out: PBIO; flags: TC_INT): TC_INT; cdecl = nil; 50 | 51 | CMS_EncryptedData_encrypt: function(_in: PBIO; const _cipher: PEVP_CIPHER;const _key: PAnsiChar; keylen: TC_SIZE_T; flags: TC_INT): PCMS_ContentInfo; cdecl = nil; 52 | 53 | CMS_EncryptedData_set1_key: function(_cms: PCMS_ContentInfo; const _ciph: PEVP_CIPHER;const _key: PAnsiChar; keylen: TC_SIZE_T): TC_INT; cdecl = nil; 54 | 55 | CMS_verify: function(_cms: PCMS_ContentInfo; _certs: PSTACK_OF_X509;_store: PX509_STORE; _dcont: PBIO; _out: PBIO; flags: TC_INT): TC_INT; cdecl = nil; 56 | 57 | CMS_verify_receipt: function(_rcms: PCMS_ContentInfo; _ocms: PCMS_ContentInfo; _certs: PSTACK_OF_X509;_store: PX509_STORE; flags: TC_INT): TC_INT; cdecl = nil; 58 | 59 | CMS_get0_signers: function(_cms: PCMS_ContentInfo): PSTACK_OF_X509; cdecl = nil; 60 | 61 | CMS_encrypt: function( _certs: PSTACK_OF_X509; _in: PBIO;const _cipher: PEVP_CIPHER; flags: TC_INT): PCMS_ContentInfo; cdecl = nil; 62 | 63 | CMS_decrypt: function(_cms: PCMS_ContentInfo; _pkey: PEVP_PKEY; _cert: PX509;_dcont: PBIO; _out: PBIO;flags: TC_INT): TC_INT; cdecl = nil; 64 | 65 | CMS_decrypt_set1_pkey: function(_cms: PCMS_ContentInfo; _pk: PEVP_PKEY; _cert: PX509): TC_INT; cdecl = nil; 66 | CMS_decrypt_set1_key: function(_cms: PCMS_ContentInfo; _key: PAnsiChar; keylen: TC_SIZE_T; _id: PAnsiChar; idlen: TC_SIZE_T): TC_INT; cdecl = nil; 67 | CMS_decrypt_set1_password: function(_cms: PCMS_ContentInfo; _pass: PAnsiChar; passlen: TC_OSSL_SSIZE_T): TC_INT; cdecl = nil; 68 | 69 | CMS_get0_RecipientInfos: function(_cms: PCMS_ContentInfo): PSTACK_OF_CMS_RecipientInfo; cdecl = nil; 70 | CMS_RecipientInfo_type: function(_ri: PCMS_RecipientInfo): TC_INT; cdecl = nil; 71 | CMS_EnvelopedData_create: function(const _cipher: PEVP_CIPHER): PCMS_ContentInfo; cdecl = nil; 72 | CMS_add1_recipient_cert: function(_cms: PCMS_ContentInfo;_recip: PX509; flags: TC_INT): PCMS_RecipientInfo; cdecl = nil; 73 | CMS_RecipientInfo_set0_pkey: function(_ri: PCMS_RecipientInfo; _pkey: PEVP_PKEY): TC_INT; cdecl = nil; 74 | CMS_RecipientInfo_ktri_cert_cmp: function(_ri: PCMS_RecipientInfo; _cert: PX509): TC_INT; cdecl = nil; 75 | CMS_RecipientInfo_ktri_get0_algs: function(_ri: PCMS_RecipientInfo; _pk: PPEVP_PKEY; _recip: PPX509;_palg: PPX509_ALGOR): TC_INT; cdecl = nil; 76 | CMS_RecipientInfo_ktri_get0_signer_id: function(_ri: PCMS_RecipientInfo; _keyid: PPASN1_OCTET_STRING; _issuer: PPX509_NAME; _sno: PPASN1_INTEGER): TC_INT; cdecl = nil; 77 | 78 | CMS_add0_recipient_key: function(_cms: PCMS_ContentInfo; _nid: TC_INT; _key: PAnsiChar; keylen: TC_SIZE_T; _id: PAnsiChar; idlen: TC_SIZE_T;_date: PASN1_GENERALIZEDTIME;_otherTypeId: PASN1_OBJECT;_otherType: PASN1_TYPE): PCMS_RecipientInfo; cdecl = nil; 79 | 80 | CMS_RecipientInfo_kekri_get0_id: function(_ri: PCMS_RecipientInfo;_palg: PPX509_ALGOR; _pid: PPASN1_OCTET_STRING; _pdate: PPASN1_GENERALIZEDTIME; _potherid: PPASN1_OBJECT; _pothertype: PPASN1_TYPE): TC_INT; cdecl = nil; 81 | 82 | CMS_RecipientInfo_set0_key: function(_ri: PCMS_RecipientInfo; _key: PAnsiChar; keylen: TC_SIZE_T): TC_INT; cdecl = nil; 83 | 84 | CMS_RecipientInfo_kekri_id_cmp: function(_ri: PCMS_RecipientInfo; const _id: PAnsiChar; idlen: TC_SIZE_T): TC_INT; cdecl = nil; 85 | 86 | CMS_RecipientInfo_set0_password: function(_ri: PCMS_RecipientInfo; _pass: PAnsiChar; passlen: TC_OSSL_SSIZE_T): TC_INT; cdecl = nil; 87 | 88 | CMS_add0_recipient_password: function(_cms: PCMS_ContentInfo;_iter: TC_INT; _wrap_nid: TC_INT; pbe_nid: TC_INT; _pass: PAnsiChar; passlen: TC_OSSL_SSIZE_T;const _kekciph: PEVP_CIPHER): PCMS_RecipientInfo; cdecl = nil; 89 | 90 | CMS_RecipientInfo_decrypt: function(_cms: PCMS_ContentInfo; _ri: PCMS_RecipientInfo): TC_INT; cdecl = nil; 91 | 92 | CMS_uncompress: function(_cms: PCMS_ContentInfo; _dcont: PBIO; _out: PBIO;flags: TC_INT): TC_INT; cdecl = nil; 93 | CMS_compress: function(_in: PBIO; _comp_nid: TC_INT; flags: TC_INT): PCMS_ContentInfo; cdecl = nil; 94 | 95 | CMS_set1_eContentType: function(_cms: PCMS_ContentInfo; const _oid: PASN1_OBJECT): TC_INT; cdecl = nil; 96 | CMS_get0_eContentType: function(_cms: PCMS_ContentInfo): PASN1_OBJECT; cdecl = nil; 97 | 98 | CMS_add0_CertificateChoices: function(_cms: PCMS_ContentInfo): PCMS_CertificateChoices; cdecl = nil; 99 | CMS_add0_cert: function(_cms: PCMS_ContentInfo; _cert: PX509): TC_INT; cdecl = nil; 100 | CMS_add1_cert: function(_cms: PCMS_ContentInfo; _cert: PX509): TC_INT; cdecl = nil; 101 | CMS_get1_certs: function(_cms: PCMS_ContentInfo): PSTACK_OF_X509; cdecl = nil; 102 | 103 | CMS_add0_RevocationInfoChoice: function(_cms: PCMS_ContentInfo): PCMS_RevocationInfoChoice; cdecl = nil; 104 | CMS_add0_crl: function(_cms: PCMS_ContentInfo; _crl: PX509_CRL): TC_INT; cdecl = nil; 105 | CMS_add1_crl: function(_cms: PCMS_ContentInfo; _crl: PX509_CRL): TC_INT; cdecl = nil; 106 | CMS_get1_crls: function(_cms: PCMS_ContentInfo): PSTACK_OF_X509_CRL; cdecl = nil; 107 | 108 | CMS_SignedData_init: function(_cms: PCMS_ContentInfo): TC_INT; cdecl = nil; 109 | CMS_add1_signer: function(_cms: PCMS_ContentInfo;_signer: PX509; _pk: PEVP_PKEY; const _md: PEVP_MD;flags: TC_INT): PCMS_SignerInfo; cdecl = nil; 110 | CMS_get0_SignerInfos: function(_cms: PCMS_ContentInfo): PSTACK_OF_CMS_SignerInfo; cdecl = nil; 111 | 112 | CMS_SignerInfo_set1_signer_cert: procedure(_si: PCMS_SignerInfo; _signer: PX509); cdecl = nil; 113 | CMS_SignerInfo_get0_signer_id: function(_si: PCMS_SignerInfo; _keyid: PPASN1_OCTET_STRING; _issuer: PPX509_NAME; _sno: PPASN1_INTEGER ): TC_INT; cdecl = nil; 114 | CMS_SignerInfo_cert_cmp: function(_si: PCMS_SignerInfo; _cert: PX509): TC_INT; cdecl = nil; 115 | CMS_set1_signers_certs: function(_cms: PCMS_ContentInfo; _certs: PSTACK_OF_X509; flags: TC_INT): TC_INT; cdecl = nil; 116 | CMS_SignerInfo_get0_algs: procedure(_si: PCMS_SignerInfo; _pk: PPEVP_PKEY ; _signer: PPX509; _pdig: PPX509_ALGOR; _psig: PPX509_ALGOR ); cdecl = nil; 117 | CMS_SignerInfo_sign: function(_si: PCMS_SignerInfo): TC_INT; cdecl = nil; 118 | CMS_SignerInfo_verify: function(_si: PCMS_SignerInfo): TC_INT; cdecl = nil; 119 | CMS_SignerInfo_verify_content: function(_si: PCMS_SignerInfo; _chain: PBIO): TC_INT; cdecl = nil; 120 | 121 | CMS_add_smimecap: function(_si: PCMS_SignerInfo; _algs: PSTACK_OF_X509_ALGOR): TC_INT; cdecl = nil; 122 | CMS_add_simple_smimecap: function( _algs: PPSTACK_OF_X509_ALGOR;_algnid: TC_INT; _keysize: TC_INT): TC_INT; cdecl = nil; 123 | CMS_add_standard_smimecap: function( _smcap: PPSTACK_OF_X509_ALGOR): TC_INT; cdecl = nil; 124 | 125 | CMS_signed_get_attr_count: function(const _si: PCMS_SignerInfo): TC_INT; cdecl = nil; 126 | CMS_signed_get_attr_by_NID: function(const _si: PCMS_SignerInfo; nid: TC_INT;lastpos: TC_INT): TC_INT; cdecl = nil; 127 | CMS_signed_get_attr_by_OBJ: function(const _si: PCMS_SignerInfo; _obj: PASN1_OBJECT;lastpos: TC_INT): TC_INT; cdecl = nil; 128 | CMS_signed_get_attr: function(const _si: PCMS_SignerInfo; _loc: TC_INT): PX509_ATTRIBUTE; cdecl = nil; 129 | CMS_signed_delete_attr: function(_si: PCMS_SignerInfo; _loc: TC_INT): PX509_ATTRIBUTE; cdecl = nil; 130 | CMS_signed_add1_attr: function(_si: PCMS_SignerInfo; _attr: PX509_ATTRIBUTE): TC_INT; cdecl = nil; 131 | CMS_signed_add1_attr_by_OBJ: function(_si: PCMS_SignerInfo;const _obj: PASN1_OBJECT; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 132 | CMS_signed_add1_attr_by_NID: function(_si: PCMS_SignerInfo;_nid: TC_INT; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 133 | CMS_signed_add1_attr_by_txt: function(_si: PCMS_SignerInfo;const _attrname: PAnsiChar; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 134 | CMS_signed_get0_data_by_OBJ: function(_si: PCMS_SignerInfo; _oid: PASN1_OBJECT; _lastpos: TC_INT; _type: TC_INT): Pointer; cdecl = nil; 135 | 136 | CMS_unsigned_get_attr_count: function(const _si: PCMS_SignerInfo): TC_INT; cdecl = nil; 137 | CMS_unsigned_get_attr_by_NID: function(const _si: PCMS_SignerInfo; _nid: TC_INT; lastpos: TC_INT): TC_INT; cdecl = nil; 138 | CMS_unsigned_get_attr_by_OBJ: function(const _si: PCMS_SignerInfo; _obj: PASN1_OBJECT; lastpos: TC_INT): TC_INT; cdecl = nil; 139 | CMS_unsigned_get_attr: function(const _si: PCMS_SignerInfo; _loc: TC_INT): PX509_ATTRIBUTE; cdecl = nil; 140 | CMS_unsigned_delete_attr: function(_si: PCMS_SignerInfo; _loc: TC_INT): PX509_ATTRIBUTE; cdecl = nil; 141 | CMS_unsigned_add1_attr: function(_si: PCMS_SignerInfo; _attr: PX509_ATTRIBUTE): TC_INT; cdecl = nil; 142 | CMS_unsigned_add1_attr_by_OBJ: function(_si: PCMS_SignerInfo;const _obj: PASN1_OBJECT; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 143 | CMS_unsigned_add1_attr_by_NID: function(_si: PCMS_SignerInfo;_nid: TC_INT; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 144 | CMS_unsigned_add1_attr_by_txt: function(_si: PCMS_SignerInfo;const _attrname: PAnsiChar; _type: TC_INT;const bytes: Pointer; len: TC_INT): TC_INT; cdecl = nil; 145 | CMS_unsigned_get0_data_by_OBJ: function(_si: PCMS_SignerInfo; _oid: PASN1_OBJECT;_lastpos: TC_INT; _type: TC_INT): Pointer; cdecl = nil; 146 | 147 | CMS_get1_ReceiptRequest: function(_si: PCMS_SignerInfo; _prr: PPCMS_ReceiptRequest ): TC_INT; cdecl = nil; 148 | CMS_ReceiptRequest_create0: function(_id: PAnsiChar; _idlen: TC_INT;_allorfirst: TC_INT; _receiptList: PSTACK_OF_GENERAL_NAMES; _receiptsTo: PSTACK_OF_GENERAL_NAMES): PCMS_ReceiptRequest; cdecl = nil; 149 | CMS_add1_ReceiptRequest: function(_si: PCMS_SignerInfo; _rr: PCMS_ReceiptRequest): TC_INT; cdecl = nil; 150 | CMS_ReceiptRequest_get0_values: procedure(_rr: PPCMS_ReceiptRequest;_pcid: PPASN1_STRING ;var _pallorfirst: TC_INT; _plist: PPSTACK_OF_GENERAL_NAMES; _prto: PPSTACK_OF_GENERAL_NAMES); cdecl = nil; 151 | 152 | ERR_load_CMS_strings: procedure; cdecl = nil; 153 | 154 | procedure SSL_InitCMS; 155 | 156 | implementation 157 | uses ssl_lib; 158 | 159 | 160 | procedure SSL_InitCMS; 161 | begin 162 | if @CMS_sign = nil then 163 | begin 164 | @CMS_get0_type:= LoadFunctionCLib('CMS_get0_type'); 165 | @CMS_dataInit:= LoadFunctionCLib('CMS_dataInit'); 166 | @CMS_dataFinal:= LoadFunctionCLib('CMS_dataFinal'); 167 | @CMS_get0_content:= LoadFunctionCLib('CMS_get0_content'); 168 | @CMS_is_detached:= LoadFunctionCLib('CMS_is_detached'); 169 | @CMS_set_detached:= LoadFunctionCLib('CMS_set_detached'); 170 | @d2i_CMS_bio:= LoadFunctionCLib('d2i_CMS_bio'); 171 | @i2d_CMS_bio:= LoadFunctionCLib('i2d_CMS_bio'); 172 | @BIO_new_CMS:= LoadFunctionCLib('BIO_new_CMS'); 173 | @i2d_CMS_bio_stream:= LoadFunctionCLib('i2d_CMS_bio_stream'); 174 | @PEM_write_bio_CMS_stream:= LoadFunctionCLib('PEM_write_bio_CMS_stream'); 175 | @SMIME_read_CMS:= LoadFunctionCLib('SMIME_read_CMS'); 176 | @SMIME_write_CMS:= LoadFunctionCLib('SMIME_write_CMS'); 177 | @CMS_final:= LoadFunctionCLib('CMS_final'); 178 | @CMS_sign:= LoadFunctionCLib('CMS_sign'); 179 | @CMS_sign_receipt:= LoadFunctionCLib('CMS_sign_receipt'); 180 | @CMS_data:= LoadFunctionCLib('CMS_data'); 181 | @CMS_data_create:= LoadFunctionCLib('CMS_data_create'); 182 | @CMS_digest_verify:= LoadFunctionCLib('CMS_digest_verify'); 183 | @CMS_digest_create:= LoadFunctionCLib('CMS_digest_create'); 184 | @CMS_EncryptedData_decrypt:= LoadFunctionCLib('CMS_EncryptedData_decrypt'); 185 | @CMS_EncryptedData_encrypt:= LoadFunctionCLib('CMS_EncryptedData_encrypt'); 186 | @CMS_EncryptedData_set1_key:= LoadFunctionCLib('CMS_EncryptedData_set1_key'); 187 | @CMS_verify:= LoadFunctionCLib('CMS_verify'); 188 | @CMS_verify_receipt:= LoadFunctionCLib('CMS_verify_receipt'); 189 | @CMS_get0_signers:= LoadFunctionCLib('CMS_get0_signers'); 190 | @CMS_encrypt:= LoadFunctionCLib('CMS_encrypt'); 191 | @CMS_decrypt:= LoadFunctionCLib('CMS_decrypt'); 192 | @CMS_decrypt_set1_pkey:= LoadFunctionCLib('CMS_decrypt_set1_pkey'); 193 | @CMS_decrypt_set1_key:= LoadFunctionCLib('CMS_decrypt_set1_key'); 194 | @CMS_decrypt_set1_password:= LoadFunctionCLib('CMS_decrypt_set1_password'); 195 | @CMS_get0_RecipientInfos:= LoadFunctionCLib('CMS_get0_RecipientInfos'); 196 | @CMS_RecipientInfo_type:= LoadFunctionCLib('CMS_RecipientInfo_type'); 197 | @CMS_EnvelopedData_create:= LoadFunctionCLib('CMS_EnvelopedData_create'); 198 | @CMS_add1_recipient_cert:= LoadFunctionCLib('CMS_add1_recipient_cert'); 199 | @CMS_RecipientInfo_set0_pkey:= LoadFunctionCLib('CMS_RecipientInfo_set0_pkey'); 200 | @CMS_RecipientInfo_ktri_cert_cmp:= LoadFunctionCLib('CMS_RecipientInfo_ktri_cert_cmp'); 201 | @CMS_RecipientInfo_ktri_get0_algs:= LoadFunctionCLib('CMS_RecipientInfo_ktri_get0_algs'); 202 | @CMS_RecipientInfo_ktri_get0_signer_id:= LoadFunctionCLib('CMS_RecipientInfo_ktri_get0_signer_id'); 203 | @CMS_add0_recipient_key:= LoadFunctionCLib('CMS_add0_recipient_key'); 204 | @CMS_RecipientInfo_kekri_get0_id:= LoadFunctionCLib('CMS_RecipientInfo_kekri_get0_id'); 205 | @CMS_RecipientInfo_set0_key:= LoadFunctionCLib('CMS_RecipientInfo_set0_key'); 206 | @CMS_RecipientInfo_kekri_id_cmp:= LoadFunctionCLib('CMS_RecipientInfo_kekri_id_cmp'); 207 | @CMS_RecipientInfo_set0_password:= LoadFunctionCLib('CMS_RecipientInfo_set0_password'); 208 | @CMS_add0_recipient_password:= LoadFunctionCLib('CMS_add0_recipient_password'); 209 | @CMS_RecipientInfo_decrypt:= LoadFunctionCLib('CMS_RecipientInfo_decrypt'); 210 | @CMS_uncompress:= LoadFunctionCLib('CMS_uncompress'); 211 | @CMS_compress:= LoadFunctionCLib('CMS_compress'); 212 | @CMS_set1_eContentType:= LoadFunctionCLib('CMS_set1_eContentType'); 213 | @CMS_get0_eContentType:= LoadFunctionCLib('CMS_get0_eContentType'); 214 | @CMS_add0_CertificateChoices:= LoadFunctionCLib('CMS_add0_CertificateChoices'); 215 | @CMS_add0_cert:= LoadFunctionCLib('CMS_add0_cert'); 216 | @CMS_add1_cert:= LoadFunctionCLib('CMS_add1_cert'); 217 | @CMS_get1_certs:= LoadFunctionCLib('CMS_get1_certs'); 218 | @CMS_add0_RevocationInfoChoice:= LoadFunctionCLib('CMS_add0_RevocationInfoChoice'); 219 | @CMS_add0_crl:= LoadFunctionCLib('CMS_add0_crl'); 220 | @CMS_add1_crl:= LoadFunctionCLib('CMS_add1_crl'); 221 | @CMS_get1_crls:= LoadFunctionCLib('CMS_get1_crls'); 222 | @CMS_SignedData_init:= LoadFunctionCLib('CMS_SignedData_init'); 223 | @CMS_add1_signer:= LoadFunctionCLib('CMS_add1_signer'); 224 | @CMS_get0_SignerInfos:= LoadFunctionCLib('CMS_get0_SignerInfos'); 225 | @CMS_SignerInfo_set1_signer_cert:= LoadFunctionCLib('CMS_SignerInfo_set1_signer_cert'); 226 | @CMS_SignerInfo_get0_signer_id:= LoadFunctionCLib('CMS_SignerInfo_get0_signer_id'); 227 | @CMS_SignerInfo_cert_cmp:= LoadFunctionCLib('CMS_SignerInfo_cert_cmp'); 228 | @CMS_set1_signers_certs:= LoadFunctionCLib('CMS_set1_signers_certs'); 229 | @CMS_SignerInfo_get0_algs:= LoadFunctionCLib('CMS_SignerInfo_get0_algs'); 230 | @CMS_SignerInfo_sign:= LoadFunctionCLib('CMS_SignerInfo_sign'); 231 | @CMS_SignerInfo_verify:= LoadFunctionCLib('CMS_SignerInfo_verify'); 232 | @CMS_SignerInfo_verify_content:= LoadFunctionCLib('CMS_SignerInfo_verify_content'); 233 | @CMS_add_smimecap:= LoadFunctionCLib('CMS_add_smimecap'); 234 | @CMS_add_simple_smimecap:= LoadFunctionCLib('CMS_add_simple_smimecap'); 235 | @CMS_add_standard_smimecap:= LoadFunctionCLib('CMS_add_standard_smimecap'); 236 | @CMS_signed_get_attr_count:= LoadFunctionCLib('CMS_signed_get_attr_count'); 237 | @CMS_signed_get_attr_by_NID:= LoadFunctionCLib('CMS_signed_get_attr_by_NID'); 238 | @CMS_signed_get_attr_by_OBJ:= LoadFunctionCLib('CMS_signed_get_attr_by_OBJ'); 239 | @CMS_signed_get_attr:= LoadFunctionCLib('CMS_signed_get_attr'); 240 | @CMS_signed_delete_attr:= LoadFunctionCLib('CMS_signed_delete_attr'); 241 | @CMS_signed_add1_attr:= LoadFunctionCLib('CMS_signed_add1_attr'); 242 | @CMS_signed_add1_attr_by_OBJ:= LoadFunctionCLib('CMS_signed_add1_attr_by_OBJ'); 243 | @CMS_signed_add1_attr_by_NID:= LoadFunctionCLib('CMS_signed_add1_attr_by_NID'); 244 | @CMS_signed_add1_attr_by_txt:= LoadFunctionCLib('CMS_signed_add1_attr_by_txt'); 245 | @CMS_signed_get0_data_by_OBJ:= LoadFunctionCLib('CMS_signed_get0_data_by_OBJ'); 246 | @CMS_unsigned_get_attr_count:= LoadFunctionCLib('CMS_unsigned_get_attr_count'); 247 | @CMS_unsigned_get_attr_by_NID:= LoadFunctionCLib('CMS_unsigned_get_attr_by_NID'); 248 | @CMS_unsigned_get_attr_by_OBJ:= LoadFunctionCLib('CMS_unsigned_get_attr_by_OBJ'); 249 | @CMS_unsigned_get_attr:= LoadFunctionCLib('CMS_unsigned_get_attr'); 250 | @CMS_unsigned_delete_attr:= LoadFunctionCLib('CMS_unsigned_delete_attr'); 251 | @CMS_unsigned_add1_attr:= LoadFunctionCLib('CMS_unsigned_add1_attr'); 252 | @CMS_unsigned_add1_attr_by_OBJ:= LoadFunctionCLib('CMS_unsigned_add1_attr_by_OBJ'); 253 | @CMS_unsigned_add1_attr_by_NID:= LoadFunctionCLib('CMS_unsigned_add1_attr_by_NID'); 254 | @CMS_unsigned_add1_attr_by_txt:= LoadFunctionCLib('CMS_unsigned_add1_attr_by_txt'); 255 | @CMS_unsigned_get0_data_by_OBJ:= LoadFunctionCLib('CMS_unsigned_get0_data_by_OBJ'); 256 | @CMS_get1_ReceiptRequest:= LoadFunctionCLib('CMS_get1_ReceiptRequest'); 257 | @CMS_ReceiptRequest_create0:= LoadFunctionCLib('CMS_ReceiptRequest_create0'); 258 | @CMS_add1_ReceiptRequest:= LoadFunctionCLib('CMS_add1_ReceiptRequest'); 259 | @CMS_ReceiptRequest_get0_values:= LoadFunctionCLib('CMS_ReceiptRequest_get0_values'); 260 | @ERR_load_CMS_strings:= LoadFunctionCLib('ERR_load_CMS_strings'); 261 | @CMS_ContentInfo_new:= LoadFunctionCLib('CMS_ContentInfo_new'); 262 | @CMS_ContentInfo_free:= LoadFunctionCLib('CMS_ContentInfo_free'); 263 | @d2i_CMS_ContentInfo:= LoadFunctionCLib('d2i_CMS_ContentInfo'); 264 | @i2d_CMS_ContentInfo:= LoadFunctionCLib('i2d_CMS_ContentInfo'); 265 | @CMS_ContentInfo_it:= LoadFunctionCLib('CMS_ContentInfo_it'); 266 | @CMS_ReceiptRequest_new:= LoadFunctionCLib('CMS_ReceiptRequest_new'); 267 | @CMS_ReceiptRequest_free:= LoadFunctionCLib('CMS_ReceiptRequest_free'); 268 | @d2i_CMS_ReceiptRequest:= LoadFunctionCLib('d2i_CMS_ReceiptRequest'); 269 | @i2d_CMS_ReceiptRequest:= LoadFunctionCLib('i2d_CMS_ReceiptRequest'); 270 | @CMS_ReceiptRequest_it:= LoadFunctionCLib('CMS_ReceiptRequest_it'); 271 | end; 272 | 273 | end; 274 | 275 | end. 276 | -------------------------------------------------------------------------------- /ssl_comp.pas: -------------------------------------------------------------------------------- 1 | unit ssl_comp; 2 | interface 3 | uses ssl_types; 4 | var 5 | COMP_CTX_new: function(meth: PCOMP_METHOD): PCOMP_CTX; cdecl = nil; 6 | COMP_CTX_free: procedure(ctx: PCOMP_CTX); cdecl = nil; 7 | COMP_compress_block: function(ctx: PCOMP_CTX; _out: PAnsiChar; olen: TC_INT;_in: PAnsiChar; ilen: TC_INT): TC_INT; cdecl = nil; 8 | COMP_expand_block:function(ctx: PCOMP_CTX; _out: PAnsiChar; olen: TC_INT;_in: PAnsiChar; ilen: TC_INT): TC_INT; cdecl = nil; 9 | COMP_rle: function: PCOMP_METHOD; cdecl = nil; 10 | COMP_zlib: function: PCOMP_METHOD; cdecl = nil; 11 | COMP_zlib_cleanup: procedure; cdecl = nil; 12 | BIO_f_zlib: function: PBIO_METHOD; cdecl = nil; 13 | 14 | procedure SSL_InitCOMP; 15 | 16 | implementation 17 | uses ssl_lib; 18 | 19 | procedure SSL_InitCOMP; 20 | begin 21 | if @COMP_CTX_new = nil then 22 | begin 23 | @COMP_CTX_new:= LoadFunctionCLib('COMP_CTX_new'); 24 | @COMP_CTX_free:= LoadFunctionCLib('COMP_CTX_free'); 25 | @COMP_compress_block:= LoadFunctionCLib('COMP_compress_block'); 26 | @COMP_expand_block:= LoadFunctionCLib('COMP_expand_block'); 27 | @COMP_rle:= LoadFunctionCLib('COMP_rle'); 28 | @COMP_zlib:= LoadFunctionCLib('COMP_zlib'); 29 | @COMP_zlib_cleanup:= LoadFunctionCLib('COMP_zlib_cleanup'); 30 | @BIO_f_zlib:= LoadFunctionCLib('BIO_f_zlib', false); 31 | end; 32 | end; 33 | 34 | end. -------------------------------------------------------------------------------- /ssl_conf.pas: -------------------------------------------------------------------------------- 1 | unit ssl_conf; 2 | {$ifdef fpc} 3 | {$mode delphi} 4 | {$endif} 5 | 6 | interface 7 | uses ssl_types; 8 | const 9 | CONF_MFLAGS_IGNORE_ERRORS = $1; 10 | CONF_MFLAGS_IGNORE_RETURN_CODES = $2; 11 | CONF_MFLAGS_SILENT = $4; 12 | CONF_MFLAGS_NO_DSO = $8; 13 | CONF_MFLAGS_IGNORE_MISSING_FILE = $10; 14 | CONF_MFLAGS_DEFAULT_SECTION = $20; 15 | 16 | CONF_F_CONF_DUMP_FP = 104; 17 | CONF_F_CONF_LOAD = 100; 18 | CONF_F_CONF_LOAD_BIO = 102; 19 | CONF_F_CONF_LOAD_FP = 103; 20 | CONF_F_CONF_MODULES_LOAD = 116; 21 | CONF_F_CONF_PARSE_LIST = 119; 22 | CONF_F_DEF_LOAD = 120; 23 | CONF_F_DEF_LOAD_BIO = 121; 24 | CONF_F_MODULE_INIT = 115; 25 | CONF_F_MODULE_LOAD_DSO = 117; 26 | CONF_F_MODULE_RUN = 118; 27 | CONF_F_NCONF_DUMP_BIO = 105; 28 | CONF_F_NCONF_DUMP_FP = 106; 29 | CONF_F_NCONF_GET_NUMBER = 107; 30 | CONF_F_NCONF_GET_NUMBER_E = 112; 31 | CONF_F_NCONF_GET_SECTION = 108; 32 | CONF_F_NCONF_GET_STRING = 109; 33 | CONF_F_NCONF_LOAD = 113; 34 | CONF_F_NCONF_LOAD_BIO = 110; 35 | CONF_F_NCONF_LOAD_FP = 114; 36 | CONF_F_NCONF_NEW = 111; 37 | CONF_F_STR_COPY = 101; 38 | 39 | CONF_R_ERROR_LOADING_DSO = 110; 40 | CONF_R_LIST_CANNOT_BE_NULL = 115; 41 | CONF_R_MISSING_CLOSE_SQUARE_BRACKET = 100; 42 | CONF_R_MISSING_EQUAL_SIGN = 101; 43 | CONF_R_MISSING_FINISH_FUNCTION = 111; 44 | CONF_R_MISSING_INIT_FUNCTION = 112; 45 | CONF_R_MODULE_INITIALIZATION_ERROR = 109; 46 | CONF_R_NO_CLOSE_BRACE = 102; 47 | CONF_R_NO_CONF = 105; 48 | CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE = 106; 49 | CONF_R_NO_SECTION = 107; 50 | CONF_R_NO_SUCH_FILE = 114; 51 | CONF_R_NO_VALUE = 108; 52 | CONF_R_UNABLE_TO_CREATE_NEW_SECTION = 103; 53 | CONF_R_UNKNOWN_MODULE_NAME = 113; 54 | CONF_R_VARIABLE_HAS_NO_VALUE = 104; 55 | 56 | 57 | var 58 | CONF_set_default_method: function(meth: PCONF_METHOD): TC_INT; cdecl; 59 | CONF_set_nconf: procedure(_conf: PCONF; hash: PLHASH); cdecl; 60 | CONF_load: function(_conf: PLHASH; const _file: PAnsiChar; eline: PC_LONG): PLHASH; cdecl; 61 | CONF_load_bio: function(_conf: PLHASH; bp: PBIO; eline: PC_LONG): PLHASH; cdecl; 62 | CONF_get_section: function(_conf: PLHASH; const section: PAnsiChar): PSTACK_OF; cdecl; 63 | CONF_get_string: function(_conf: PLHASH; const group: PAnsiChar; const name: PAnsiChar): PAnsiChar; cdecl; 64 | CONF_get_number: function(_conf: PLHASH;const group: PAnsiChar; const name: PAnsiChar): TC_LONG; cdecl; 65 | 66 | CONF_free: procedure(_conf: PLHASH_OF); cdecl; 67 | CONF_dump_bio: function(_conf: PLHASH; _out: PBIO): TC_INT; cdecl; 68 | 69 | OPENSSL_config: procedure(const config_name: PAnsiChar); cdecl; 70 | OPENSSL_no_config: procedure; cdecl; 71 | 72 | NCONF_new: function(meth: PCONF_METHOD): PCONF; cdecl; 73 | NCONF_default: function: PCONF_METHOD; cdecl; 74 | NCONF_WIN32: function: PCONF_METHOD; cdecl; 75 | NCONF_free: procedure(_conf: PCONF); cdecl; 76 | NCONF_free_data: procedure(_conf: PCONF); cdecl; 77 | 78 | NCONF_load: function(_conf: PCONF; const _file: PAnsiChar; eline: PC_LONG): TC_INT; cdecl; 79 | NCONF_load_bio: function(_conf: PCONF; bp: PBIO; eline: PC_LONG): TC_INT; cdecl; 80 | NCONF_get_section: function (const _conf: PCONF; const section: PAnsiChar): PSTACK_OF; cdecl; 81 | NCONF_get_string: function(const _conf: PCONF; const group: PAnsiChar; const name: PAnsiChar): PAnsiChar; cdecl; 82 | NCONF_get_number_e: function(const _conf: PCONF; const group: PAnsiChar; const name: PAnsiChar; _result: PC_LONG): TC_INT; cdecl; 83 | 84 | NCONF_dump_bio: function(const _conf: PCONF; _out: PBIO): TC_INT; cdecl; 85 | 86 | 87 | CONF_modules_load: function(const cnf: PCONF; const _appname: PAnsiChar; s: TC_ULONG): TC_INT; cdecl; 88 | CONF_modules_load_file: function(const _filename: PAnsiChar; const _appname: PAnsiChar; s: TC_ULONG): TC_INT; cdecl = nil; 89 | CONF_modules_unload: procedure(_all: TC_INT); cdecl = nil; 90 | CONF_modules_finish: procedure; cdecl = nil; 91 | CONF_modules_free: procedure; cdecl = nil; 92 | CONF_module_add: function(const _name: PAnsiChar; ifunc: t_conf_init_func; ffunc: t_conf_finish_func): TC_INT; cdecl = nil; 93 | 94 | CONF_imodule_get_name: function(const md: PCONF_IMODULE): PAnsiChar; cdecl = nil; 95 | CONF_imodule_get_value: function(const md: PCONF_IMODULE): PAnsiChar; cdecl = nil; 96 | CONF_imodule_get_usr_data: function(const md: PCONF_IMODULE): Pointer; cdecl = nil; 97 | CONF_imodule_set_usr_data: procedure(md: PCONF_IMODULE; usr_data: Pointer); cdecl = nil; 98 | CONF_imodule_get_module: function(const md: PCONF_IMODULE): PCONF_MODULE; cdecl = nil; 99 | CONF_imodule_get_flags: function(const md: PCONF_IMODULE): TC_ULONG; cdecl = nil; 100 | CONF_imodule_set_flags: procedure(md: PCONF_IMODULE; s: TC_ULONG); cdecl = nil; 101 | CONF_module_get_usr_data: function(pmod: PCONF_MODULE): Pointer; cdecl = nil; 102 | CONF_module_set_usr_data: procedure(pmod: PCONF_MODULE; usr_data: Pointer); cdecl = nil; 103 | 104 | CONF_get1_default_config_file: function: PAnsiChar; cdecl = nil; 105 | 106 | CONF_parse_list: function(const list: PAnsiChar; sep: TC_INT; nospc: TC_INT; list_cb: t_list_cb; arg: Pointer): TC_INT; cdecl = nil; 107 | 108 | OPENSSL_load_builtin_modules: procedure; cdecl = nil; 109 | 110 | ERR_load_CONF_strings: procedure; cdecl = nil; 111 | 112 | procedure SSL_InitCONF; 113 | 114 | implementation 115 | 116 | uses ssl_lib; 117 | 118 | procedure SSL_InitCONF; 119 | begin 120 | if @NCONF_new = nil then 121 | begin 122 | @CONF_set_default_method:= LoadFunctionCLib('CONF_set_default_method'); 123 | @CONF_set_nconf:= LoadFunctionCLib('CONF_set_nconf'); 124 | @CONF_load:= LoadFunctionCLib('CONF_load'); 125 | @CONF_load_bio:= LoadFunctionCLib('CONF_load_bio'); 126 | @CONF_get_section:= LoadFunctionCLib('CONF_get_section'); 127 | @CONF_get_string:= LoadFunctionCLib('CONF_get_string'); 128 | @CONF_get_number:= LoadFunctionCLib('CONF_get_number'); 129 | 130 | @CONF_free:= LoadFunctionCLib('CONF_free'); 131 | @CONF_dump_bio:= LoadFunctionCLib('CONF_dump_bio'); 132 | 133 | @OPENSSL_config:= LoadFunctionCLib('OPENSSL_config'); 134 | @OPENSSL_no_config:= LoadFunctionCLib('OPENSSL_no_config'); 135 | 136 | @NCONF_new:= LoadFunctionCLib('NCONF_new'); 137 | @NCONF_default:= LoadFunctionCLib('NCONF_default'); 138 | @NCONF_WIN32:= LoadFunctionCLib('NCONF_WIN32'); 139 | @NCONF_free:= LoadFunctionCLib('NCONF_free'); 140 | @NCONF_free_data:= LoadFunctionCLib('NCONF_free_data'); 141 | 142 | @NCONF_load:= LoadFunctionCLib('NCONF_load'); 143 | @NCONF_load_bio:= LoadFunctionCLib('NCONF_load_bio'); 144 | @NCONF_get_section:= LoadFunctionCLib('NCONF_get_section'); 145 | @NCONF_get_string:= LoadFunctionCLib('NCONF_get_string'); 146 | @NCONF_get_number_e:= LoadFunctionCLib('NCONF_get_number_e'); 147 | 148 | @NCONF_dump_bio:= LoadFunctionCLib('NCONF_dump_bio'); 149 | 150 | 151 | @CONF_modules_load:= LoadFunctionCLib('CONF_modules_load'); 152 | @CONF_modules_load_file:= LoadFunctionCLib('CONF_modules_load_file'); 153 | @CONF_modules_unload:= LoadFunctionCLib('CONF_modules_unload'); 154 | @CONF_modules_finish:= LoadFunctionCLib('CONF_modules_finish'); 155 | @CONF_modules_free:= LoadFunctionCLib('CONF_modules_free'); 156 | @CONF_module_add:= LoadFunctionCLib('CONF_module_add'); 157 | 158 | @CONF_imodule_get_name:= LoadFunctionCLib('CONF_imodule_get_name'); 159 | @CONF_imodule_get_value:= LoadFunctionCLib('CONF_imodule_get_value'); 160 | @CONF_imodule_get_usr_data:= LoadFunctionCLib('CONF_imodule_get_usr_data'); 161 | @CONF_imodule_set_usr_data:= LoadFunctionCLib('CONF_imodule_set_usr_data'); 162 | @CONF_imodule_get_module:= LoadFunctionCLib('CONF_imodule_get_module'); 163 | @CONF_imodule_get_flags:= LoadFunctionCLib('CONF_imodule_get_flags'); 164 | @CONF_imodule_set_flags:= LoadFunctionCLib('CONF_imodule_set_flags'); 165 | @CONF_module_get_usr_data:= LoadFunctionCLib('CONF_module_get_usr_data'); 166 | @CONF_module_set_usr_data:= LoadFunctionCLib('CONF_module_set_usr_data'); 167 | 168 | @CONF_get1_default_config_file:= LoadFunctionCLib('CONF_get1_default_config_file'); 169 | 170 | @CONF_parse_list := LoadFunctionCLib('CONF_parse_list'); 171 | 172 | @OPENSSL_load_builtin_modules:= LoadFunctionCLib('OPENSSL_load_builtin_modules'); 173 | 174 | @ERR_load_CONF_strings:= LoadFunctionCLib('ERR_load_CONF_strings'); 175 | end; 176 | end; 177 | end. -------------------------------------------------------------------------------- /ssl_des.pas: -------------------------------------------------------------------------------- 1 | unit ssl_des; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | 8 | DES_options: function: PAnsiChar; cdecl = nil; 9 | 10 | DES_ecb3_encrypt: procedure(input: Pconst_DES_cblock; output: PDES_cblock; ks1: PDES_key_schedule;ks2: PDES_key_schedule; ks3: PDES_key_schedule; enc: TC_INT); cdecl = nil; 11 | DES_cbc_cksum: function(input: PAnsiChar;output: PDES_cblock; _length: TC_LONG;schedule: PDES_key_schedule; ivec: Pconst_DES_cblock): DES_LONG; cdecl = nil; 12 | 13 | DES_cbc_encrypt: procedure(input: PAnsiChar;output: PAnsiChar; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock; enc: TC_INT); cdecl = nil; 14 | DES_ncbc_encrypt: procedure(input: PAnsiChar;output: PAnsiChar; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock; enc: TC_INT); cdecl = nil; 15 | DES_xcbc_encrypt: procedure(input: PAnsiChar;output: PAnsiChar; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock; inw: Pconst_DES_cblock;outw: Pconst_DES_cblock;enc: TC_INT); cdecl = nil; 16 | DES_cfb_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar;numbits: TC_INT; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock; enc: TC_INT); cdecl = nil; 17 | DES_ecb_encrypt: procedure(input: Pconst_DES_cblock;output: PDES_cblock; ks: PDES_key_schedule;enc: TC_INT); cdecl = nil; 18 | 19 | 20 | DES_encrypt2: procedure(data: PDES_LONG;ks: PDES_key_schedule; enc: TC_INT); cdecl = nil; 21 | DES_encrypt3: procedure(data: PDES_LONG; ks1: PDES_key_schedule; ks2: PDES_key_schedule; ks3: PDES_key_schedule); cdecl = nil; 22 | DES_decrypt3: procedure(data: PDES_LONG; ks1: PDES_key_schedule; ks2: PDES_key_schedule; ks3: PDES_key_schedule); cdecl = nil; 23 | DES_ede3_cbc_encrypt: procedure(input: PAnsiChar;output: PAnsiChar; _length: TC_LONG; ks1: PDES_key_schedule;ks2: PDES_key_schedule; ks3: PDES_key_schedule;ivec: PDES_cblock;enc: TC_INT); cdecl = nil; 24 | DES_ede3_cbcm_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar; _length: TC_LONG; ks1: PDES_key_schedule;ks2: PDES_key_schedule; ks3: PDES_key_schedule; ivec1: PDES_cblock; ivec2: PDES_cblock; enc: TC_INT); cdecl = nil; 25 | DES_ede3_cfb64_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar; _length: TC_LONG;ks1: PDES_key_schedule; ks2: PDES_key_schedule;ks3: PDES_key_schedule; ivec: PDES_cblock;var num: TC_INT;enc: TC_INT); cdecl = nil; 26 | DES_ede3_cfb_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar; numbits: TC_INT;_length: TC_LONG;ks1: PDES_key_schedule; ks2: PDES_key_schedule;ks3: PDES_key_schedule; ivec: PDES_cblock;enc: TC_INT); cdecl = nil; 27 | DES_ede3_ofb64_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar; _length: TC_LONG;ks1: PDES_key_schedule; ks2: PDES_key_schedule;ks3: PDES_key_schedule; ivec: PDES_cblock;var num: TC_INT); cdecl = nil; 28 | 29 | DES_xwhite_in2out: procedure(DES_key : Pconst_DES_cblock;in_white: Pconst_DES_cblock; out_white: PDES_cblock); cdecl = nil; 30 | 31 | DES_enc_read: function(fd: TC_INT;buf: Pointer;len: TC_INT;sched: PDES_key_schedule; iv: PDES_cblock): TC_INT; cdecl = nil; 32 | DES_enc_write: function(fd: TC_INT;const buf: Pointer;len: TC_INT;sched: PDES_key_schedule; iv: PDES_cblock): TC_INT; cdecl = nil; 33 | DES_fcrypt: function(buf: PAnsiChar;salt: PAnsiChar; ret: PAnsiChar): PAnsiChar; cdecl = nil; 34 | DES_crypt: function(buf: PAnsiChar;salt: PAnsiChar): PAnsiChar; cdecl = nil; 35 | DES_ofb_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar;numbits: TC_INT; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock); cdecl = nil; 36 | DES_pcbc_encrypt: procedure(input: PAnsiChar;output: PAnsiChar; _length: TC_LONG;schedule: PDES_key_schedule;ivec: PDES_cblock; enc: TC_INT); cdecl = nil; 37 | 38 | DES_quad_cksum: function(input: PAnsiChar; output: DES_cblock_array; _length: TC_LONG;out_count: TC_INT;seed: PDES_cblock): DES_LONG; cdecl = nil; 39 | 40 | DES_random_key: function(ret: PDES_cblock): TC_INT; cdecl = nil; 41 | DES_set_odd_parity: procedure(key: PDES_cblock); cdecl = nil; 42 | DES_check_key_parity: function(const_key: PDES_cblock): TC_INT; cdecl = nil; 43 | DES_is_weak_key: function(const_key: PDES_cblock): TC_INT; cdecl = nil; 44 | 45 | DES_set_key: function(const_key: PDES_cblock;schedule: PDES_key_schedule): TC_INT; cdecl = nil; 46 | DES_key_sched: function(const_key: PDES_cblock;schedule: PDES_key_schedule): TC_INT; cdecl = nil; 47 | DES_set_key_checked: function(const_key: PDES_cblock;schedule: PDES_key_schedule): TC_INT; cdecl = nil; 48 | DES_set_key_unchecked: procedure(const_key: PDES_cblock;schedule: PDES_key_schedule); cdecl = nil; 49 | 50 | private_DES_set_key_unchecked: procedure(const_key: PDES_cblock;schedule: PDES_key_schedule); cdecl = nil; 51 | 52 | DES_string_to_key: procedure(str: PAnsiChar;var key: DES_cblock); cdecl = nil; 53 | DES_string_to_2keys: procedure(str: PAnsiChar;var key1: DES_cblock; var key2: DES_cblock); cdecl = nil; 54 | DES_cfb64_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar;_length: TC_LONG; schedule: PDES_key_schedule;ivec: PDES_cblock;var num: TC_INT; enc: TC_INT); cdecl = nil; 55 | DES_ofb64_encrypt: procedure(_in: PAnsiChar;_out: PAnsiChar;_length: TC_LONG; schedule: PDES_key_schedule;ivec: PDES_cblock;var num: TC_INT); cdecl = nil; 56 | 57 | DES_read_password: function(key: PDES_cblock; prompt: PAnsiChar; verify: TC_INT): TC_INT; cdecl = nil; 58 | DES_read_2passwords: function(key1: PDES_cblock; key2: PDES_cblock; prompt: PAnsiChar; verify: TC_INT): TC_INT; cdecl = nil; 59 | 60 | 61 | procedure SSL_InitDES; 62 | 63 | implementation 64 | uses ssl_lib; 65 | 66 | procedure SSL_InitDES; 67 | begin 68 | if @DES_options = nil then 69 | begin 70 | @DES_options:= LoadFunctionCLib('DES_options'); 71 | @DES_ecb3_encrypt:= LoadFunctionCLib('DES_ecb3_encrypt'); 72 | @DES_cbc_cksum:= LoadFunctionCLib('DES_cbc_cksum'); 73 | @DES_cbc_encrypt:= LoadFunctionCLib('DES_cbc_encrypt'); 74 | @DES_ncbc_encrypt:= LoadFunctionCLib('DES_ncbc_encrypt'); 75 | @DES_xcbc_encrypt:= LoadFunctionCLib('DES_xcbc_encrypt'); 76 | @DES_cfb_encrypt:= LoadFunctionCLib('DES_cfb_encrypt'); 77 | @DES_ecb_encrypt:= LoadFunctionCLib('DES_ecb_encrypt'); 78 | @DES_encrypt2:= LoadFunctionCLib('DES_encrypt2'); 79 | @DES_encrypt3:= LoadFunctionCLib('DES_encrypt3'); 80 | @DES_decrypt3:= LoadFunctionCLib('DES_decrypt3'); 81 | @DES_ede3_cbc_encrypt:= LoadFunctionCLib('DES_ede3_cbc_encrypt'); 82 | @DES_ede3_cbcm_encrypt:= LoadFunctionCLib('DES_ede3_cbcm_encrypt'); 83 | @DES_ede3_cfb64_encrypt:= LoadFunctionCLib('DES_ede3_cfb64_encrypt'); 84 | @DES_ede3_cfb_encrypt:= LoadFunctionCLib('DES_ede3_cfb_encrypt'); 85 | @DES_ede3_ofb64_encrypt:= LoadFunctionCLib('DES_ede3_ofb64_encrypt'); 86 | @DES_xwhite_in2out:= LoadFunctionCLib('DES_xwhite_in2out', false); 87 | @DES_enc_read:= LoadFunctionCLib('DES_enc_read'); 88 | @DES_enc_write:= LoadFunctionCLib('DES_enc_write'); 89 | @DES_fcrypt:= LoadFunctionCLib('DES_fcrypt'); 90 | @DES_crypt:= LoadFunctionCLib('DES_crypt'); 91 | @DES_ofb_encrypt:= LoadFunctionCLib('DES_ofb_encrypt'); 92 | @DES_pcbc_encrypt:= LoadFunctionCLib('DES_pcbc_encrypt'); 93 | @DES_quad_cksum:= LoadFunctionCLib('DES_quad_cksum'); 94 | @DES_random_key:= LoadFunctionCLib('DES_random_key'); 95 | @DES_set_odd_parity:= LoadFunctionCLib('DES_set_odd_parity'); 96 | @DES_check_key_parity:= LoadFunctionCLib('DES_check_key_parity'); 97 | @DES_is_weak_key:= LoadFunctionCLib('DES_is_weak_key'); 98 | @DES_set_key:= LoadFunctionCLib('DES_set_key'); 99 | @DES_key_sched:= LoadFunctionCLib('DES_key_sched'); 100 | @DES_set_key_checked:= LoadFunctionCLib('DES_set_key_checked'); 101 | @DES_set_key_unchecked:= LoadFunctionCLib('DES_set_key_unchecked', false); 102 | @private_DES_set_key_unchecked:= LoadFunctionCLib('private_DES_set_key_unchecked', false); 103 | @DES_string_to_key:= LoadFunctionCLib('DES_string_to_key'); 104 | @DES_string_to_2keys:= LoadFunctionCLib('DES_string_to_2keys'); 105 | @DES_cfb64_encrypt:= LoadFunctionCLib('DES_cfb64_encrypt'); 106 | @DES_ofb64_encrypt:= LoadFunctionCLib('DES_ofb64_encrypt'); 107 | @DES_read_password:= LoadFunctionCLib('DES_read_password'); 108 | @DES_read_2passwords:= LoadFunctionCLib('DES_read_2passwords'); 109 | 110 | end; 111 | end; 112 | 113 | end. 114 | -------------------------------------------------------------------------------- /ssl_dh.pas: -------------------------------------------------------------------------------- 1 | unit ssl_dh; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | d2i_DHparams_fp: function(var fp: FILE; var x: PAnsiChar): PDH; cdecl = nil; 7 | i2d_DHparams_fp: procedure(var fp: FILE; x: PAnsiChar); cdecl = nil; 8 | 9 | d2i_DHparams_bio: function(bp: PBIO; x: PPAnsiChar): PDH; cdecl = nil; 10 | i2d_DHparams_bio: procedure(bp: PBIO; x: PAnsiChar); cdecl = nil; 11 | 12 | DHparams_dup: function(_dh: PDH): PDH; cdecl = nil; 13 | DH_OpenSSL: function: PDH_METHOD; cdecl = nil; 14 | 15 | DH_set_default_method: procedure(const meth: PDH_METHOD); cdecl = nil; 16 | DH_get_default_method: function: PDH_METHOD; cdecl = nil; 17 | DH_set_method: function(_dh: PDH; const meth: PDH_METHOD): TC_INT; cdecl = nil; 18 | DH_new_method: function(_engine: PENGINE): PDH; cdecl = nil; 19 | 20 | DH_new: function: PDH; cdecl = nil; 21 | DH_free: procedure(_dh: PDH); cdecl = nil; 22 | DH_up_ref: function(_dh: PDH): TC_INT; cdecl = nil; 23 | DH_size: function(const _dh: PDH): TC_INT; cdecl = nil; 24 | 25 | DH_get_ex_new_index: function(argl: TC_LONG; argp: Pointer; new_func: CRYPTO_EX_new; dup_func: CRYPTO_EX_dup; free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 26 | DH_set_ex_data: function(d: PDH; idx: TC_INT; arg: Pointer): TC_INT; cdecl = nil; 27 | DH_get_ex_data: function(d: PDH; idx: TC_INT): Pointer; cdecl = nil; 28 | 29 | DH_generate_parameters: function(prime_len: TC_INT;generator: TC_INT; callback: DH_Callback; cb_arg: Pointer): PDH; cdecl = nil; 30 | 31 | DH_generate_parameters_ex: function(_dh: PDH; prime_len: TC_INT;generator: TC_INT; cb: PBN_GENCB): TC_INT; cdecl = nil; 32 | 33 | DH_check: function(const _dh: PDH;var codes: TC_INT): TC_INT; cdecl = nil; 34 | DH_check_pub_key: function(const _dh: PDH;const pub_key: PBIGNUM; var codes: TC_INT): TC_INT; cdecl = nil; 35 | DH_generate_key: function(_dh: PDH): TC_INT; cdecl = nil; 36 | DH_compute_key: function(key: PAnsiChar;const pub_key: PBIGNUM;_dh: PDH): TC_INT; cdecl = nil; 37 | d2i_DHparams: function(a: PPDH; pp: PPAnsiChar; _length: TC_LONG): PDH; 38 | i2d_DHparams: function(const a: PDH; pp: PPAnsiChar): TC_INT; cdecl = nil; 39 | DHparams_print_fp: function(var fp: FILE; x: PDH): TC_INT; cdecl = nil; 40 | DHparams_print: function(bp: BIO; x: PDH): TC_INT; cdecl = nil; 41 | ERR_load_DH_strings: procedure; cdecl = nil; 42 | 43 | procedure SSL_InitDH; 44 | 45 | procedure EVP_PKEY_assign_DH(key: PEVP_PKEY; _dh: PDH); inline; 46 | 47 | implementation 48 | uses ssl_lib, ssl_evp, ssl_const; 49 | 50 | procedure EVP_PKEY_assign_DH(key: PEVP_PKEY; _dh: PDH); inline; 51 | begin 52 | EVP_PKEY_assign(key, EVP_PKEY_DH, _dh); 53 | end; 54 | 55 | 56 | procedure SSL_InitDH; 57 | begin 58 | if @DH_new = nil then 59 | begin 60 | @d2i_DHparams_fp:= LoadFunctionCLib('d2i_DHparams_fp', false); 61 | @i2d_DHparams_fp:= LoadFunctionCLib('i2d_DHparams_fp', false); 62 | @d2i_DHparams_bio:= LoadFunctionCLib('d2i_DHparams_bio', false); 63 | @i2d_DHparams_bio:= LoadFunctionCLib('i2d_DHparams_bio', false); 64 | @DHparams_dup:= LoadFunctionCLib('DHparams_dup'); 65 | @DH_OpenSSL:= LoadFunctionCLib('DH_OpenSSL'); 66 | @DH_set_default_method:= LoadFunctionCLib('DH_set_default_method'); 67 | @DH_get_default_method:= LoadFunctionCLib('DH_get_default_method'); 68 | @DH_set_method:= LoadFunctionCLib('DH_set_method'); 69 | @DH_new_method:= LoadFunctionCLib('DH_new_method'); 70 | @DH_new:= LoadFunctionCLib('DH_new'); 71 | @DH_free:= LoadFunctionCLib('DH_free'); 72 | @DH_up_ref:= LoadFunctionCLib('DH_up_ref'); 73 | @DH_size:= LoadFunctionCLib('DH_size'); 74 | @DH_get_ex_new_index:= LoadFunctionCLib('DH_get_ex_new_index'); 75 | @DH_set_ex_data:= LoadFunctionCLib('DH_set_ex_data'); 76 | @DH_get_ex_data:= LoadFunctionCLib('DH_get_ex_data'); 77 | @DH_generate_parameters:= LoadFunctionCLib('DH_generate_parameters'); 78 | @DH_generate_parameters_ex:= LoadFunctionCLib('DH_generate_parameters_ex'); 79 | @DH_check:= LoadFunctionCLib('DH_check'); 80 | @DH_check_pub_key:= LoadFunctionCLib('DH_check_pub_key'); 81 | @DH_generate_key:= LoadFunctionCLib('DH_generate_key'); 82 | @DH_compute_key:= LoadFunctionCLib('DH_compute_key'); 83 | @d2i_DHparams:= LoadFunctionCLib('d2i_DHparams'); 84 | @i2d_DHparams:= LoadFunctionCLib('i2d_DHparams'); 85 | @DHparams_print_fp:= LoadFunctionCLib('DHparams_print_fp'); 86 | @DHparams_print:= LoadFunctionCLib('DHparams_print'); 87 | @ERR_load_DH_strings := LoadFunctionCLib('ERR_load_DH_strings'); 88 | end; 89 | end; 90 | 91 | end. 92 | -------------------------------------------------------------------------------- /ssl_dsa.pas: -------------------------------------------------------------------------------- 1 | unit ssl_dsa; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | type TDSACallback = procedure(p1, p2: TC_INT; p3: Pointer); cdecl; 7 | 8 | var 9 | DSA_new: function: PDSA; cdecl = nil; 10 | DSA_new_method: function(engine: PENGINE): PDSA; cdecl = nil; 11 | DSA_size: function(dsa: Pointer): TC_INT; cdecl = nil; 12 | DSA_free: procedure(dsa: PDSA); cdecl = nil; 13 | DSA_generate_parameters: function(bits: TC_INT; seed: PByte; seed_len: TC_INT; counter_ret: PC_INT; h_ret: PC_ULONG; callback: TDSACallback; cb_agr: Pointer): PDSA; cdecl = nil; 14 | DSA_generate_parameters_ex: function(dsa: PDSA; bits: TC_INT; seed: PByte; seed_len: TC_INT; counter_ret: PC_INT; h_ret: PC_ULONG; cb: BN_GENCB): TC_INT; cdecl = nil; 15 | DSA_generate_key: function (a: PDSA): TC_INT; cdecl = nil; 16 | DSA_up_ref: function(dsa: PDSA): TC_INT; cdecl = nil; 17 | 18 | DSAparams_dup: function(x: PDSA): PDSA; cdecl = nil; 19 | DSA_SIG_new: function: PDSA_SIG; cdecl = nil; 20 | DSA_SIG_free: procedure(a: PDSA_SIG); cdecl = nil; 21 | i2d_DSA_SIG: function(v: PPDSA_SIG; pp: PPAnsiChar): TC_INT;cdecl = nil; 22 | d2i_DSA_SIG: function(v: PPDSA_SIG; pp: PPAnsiChar; _length: TC_LONG): PDSA_SIG; cdecl = nil; 23 | DSA_do_sign: function(dgst: PAnsiChar; dlen: TC_INT; dsa: PDSA): PDSA_SIG; cdecl = nil; 24 | DSA_do_verify: function(dgst: PAnsiChar; dgst_len: TC_INT; sig: PDSA_SIG; dsa: PDSA): TC_INT; cdecl = nil; 25 | DSA_OpenSSL: function: PDSA_METHOD; cdecl = nil; 26 | DSA_set_default_method: function: PDSA_METHOD; cdecl = nil; 27 | DSA_set_method: function(dsa: PDSA; _method: PDSA_METHOD): TC_INT; cdecl = nil; 28 | DSA_sign_setup: function(dsa: PDSA; cxt_in: PBN_CTX; kinvp: PPBIGNUM; rp: PPBIGNUM): TC_INT; cdecl = nil; 29 | DSA_sign: function(_type: TC_INT; dgst: PAnsiChar; dlen: TC_INT; sig: PAnsiChar; siglen: TC_INT; dsa: PDSA): TC_INT; cdecl = nil; 30 | DSA_verify: function(_type: TC_INT; dgst: PAnsiChar; dgst_len: TC_INT; sigbuf: PAnsiChar; siglen: TC_INT; dsa: PDSA): TC_INT; cdecl = nil; 31 | DSA_get_ex_new_index: function(argl: TC_LONG; argp: Pointer; new_func: CRYPTO_EX_new; dup_func: CRYPTO_EX_dup; free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 32 | DSA_set_ex_data: function(d: PDSA; idx: TC_INT; arg: Pointer): TC_INT; cdecl = nil; 33 | DSA_get_ex_data: function(d: PDSA; idx: TC_INT): Pointer; cdecl = nil; 34 | 35 | d2i_DSAPublicKey: function(a: PPDSA; pp: PPAnsiChar; _length: TC_LONG): PDSA; cdecl = nil; 36 | d2i_DSAPrivateKey: function(a: PPDSA; pp: PPAnsiChar; _length: TC_LONG): PDSA; cdecl = nil; 37 | d2i_DSAparams: function(a: PPDSA; pp: PPAnsiChar; _length: TC_LONG): PDSA; cdecl = nil; 38 | i2d_DSAPublicKey: function(a: PDSA; pp: PPAnsiChar): TC_INT; cdecl = nil; 39 | i2d_DSAPrivateKey: function(a: PDSA; pp: PPAnsiChar): TC_INT; cdecl = nil; 40 | i2d_DSAparams: function(a: PDSA; pp: PPAnsiChar): TC_INT; cdecl = nil; 41 | 42 | DSAparams_print: function(bp: PBIO; x: PDSA): TC_INT; cdecl = nil; 43 | DSA_print: function(bp: PBIO; x: PDSA; off: TC_INT): TC_INT; 44 | 45 | DSAparams_print_fp: function(var fp: FILE; x: PDSA): TC_INT; cdecl = nil; 46 | DSA_print_fp: function(var fp: FILE; x: PDSA; off: TC_INT): TC_INT; 47 | 48 | ERR_load_DSA_strings: procedure; cdecl = nil; 49 | 50 | procedure EVP_PKEY_assign_DSA(key: PEVP_PKEY; dsa: PDSA); inline; 51 | 52 | procedure SSL_InitDSA; 53 | 54 | implementation 55 | uses ssl_lib, ssl_evp, ssl_const; 56 | 57 | procedure EVP_PKEY_assign_DSA(key: PEVP_PKEY; dsa: PDSA); inline; 58 | begin 59 | EVP_PKEY_assign(key, EVP_PKEY_DSA, dsa); 60 | end; 61 | 62 | 63 | procedure SSL_InitDSA; 64 | begin 65 | if @DSA_new = nil then 66 | begin 67 | @DSA_new := LoadFunctionCLib('DSA_new'); 68 | @DSA_new_method := LoadFunctionCLib('DSA_new_method'); 69 | @DSA_size := LoadFunctionCLib('DSA_size'); 70 | @DSA_generate_key := LoadFunctionCLib('DSA_generate_key'); 71 | @DSA_generate_parameters := LoadFunctionCLib('DSA_generate_parameters'); 72 | @DSA_generate_parameters_ex := LoadFunctionCLib('DSA_generate_parameters_ex'); 73 | @DSA_free := LoadFunctionCLib('DSA_free'); 74 | @DSA_up_ref := LoadFunctionCLib('DSA_up_ref'); 75 | 76 | @DSAparams_dup:= LoadFunctionCLib('DSAparams_dup'); 77 | @DSA_SIG_new:= LoadFunctionCLib('DSA_SIG_new'); 78 | @DSA_SIG_free:= LoadFunctionCLib('DSA_SIG_free'); 79 | @i2d_DSA_SIG:= LoadFunctionCLib('i2d_DSA_SIG'); 80 | @d2i_DSA_SIG:= LoadFunctionCLib('d2i_DSA_SIG'); 81 | @DSA_do_sign:= LoadFunctionCLib('DSA_do_sign'); 82 | @DSA_do_verify:= LoadFunctionCLib('DSA_do_verify'); 83 | @DSA_OpenSSL:= LoadFunctionCLib('DSA_OpenSSL'); 84 | @DSA_set_default_method:= LoadFunctionCLib('DSA_set_default_method'); 85 | @DSA_set_method:= LoadFunctionCLib('DSA_set_method'); 86 | @DSA_sign_setup:= LoadFunctionCLib('DSA_sign_setup'); 87 | @DSA_sign:= LoadFunctionCLib('DSA_sign'); 88 | @DSA_verify:= LoadFunctionCLib('DSA_verify'); 89 | @DSA_get_ex_new_index:= LoadFunctionCLib('DSA_get_ex_new_index'); 90 | @DSA_set_ex_data:= LoadFunctionCLib('DSA_set_ex_data'); 91 | @DSA_get_ex_data:= LoadFunctionCLib('DSA_get_ex_data'); 92 | @d2i_DSAPublicKey:= LoadFunctionCLib('d2i_DSAPublicKey'); 93 | @d2i_DSAPrivateKey:= LoadFunctionCLib('d2i_DSAPrivateKey'); 94 | @d2i_DSAparams:= LoadFunctionCLib('d2i_DSAparams'); 95 | @i2d_DSAPublicKey:= LoadFunctionCLib('i2d_DSAPublicKey'); 96 | @i2d_DSAPrivateKey:= LoadFunctionCLib('i2d_DSAPrivateKey'); 97 | @i2d_DSAparams:= LoadFunctionCLib('i2d_DSAparams'); 98 | @DSAparams_print:= LoadFunctionCLib('DSAparams_print'); 99 | @DSA_print:= LoadFunctionCLib('DSA_print'); 100 | @DSAparams_print_fp:= LoadFunctionCLib('DSAparams_print_fp'); 101 | @DSA_print_fp:= LoadFunctionCLib('DSA_print_fp'); 102 | @ERR_load_DSA_strings:= LoadFunctionCLib('ERR_load_DSA_strings'); 103 | end; 104 | end; 105 | 106 | 107 | end. 108 | -------------------------------------------------------------------------------- /ssl_ecdh.pas: -------------------------------------------------------------------------------- 1 | unit ssl_ecdh; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | ECDH_OpenSSL: function: PECDH_METHOD; cdecl = nil; 7 | 8 | ECDH_set_default_method: procedure(const _p: PECDH_METHOD); cdecl = nil; 9 | ECDH_get_default_method: function: PECDH_METHOD; cdecl = nil; 10 | ECDH_set_method: function(_key: PEC_KEY; const _p: PECDH_METHOD): TC_INT; cdecl = nil; 11 | 12 | ECDH_compute_key: function(_out: Pointer; outlen: TC_SIZE_T; const _pub_key: PEC_POINT; _ecdh: PEC_KEY; KDF: ecdh_kdf): TC_INT; cdecl = nil; 13 | 14 | ECDH_get_ex_new_index: function(_argl: TC_LONG; _argp: Pointer; _new_func: CRYPTO_EX_new; _dup_func: CRYPTO_EX_dup; _free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 15 | ECDH_set_ex_data: function(_d: PEC_KEY; _idx: TC_INT; _arg: Pointer): TC_INT; cdecl = nil; 16 | ECDH_get_ex_data: function(_d: Pointer; _idx: TC_INT): Pointer; cdecl = nil; 17 | 18 | ERR_load_ECDH_strings: procedure; cdecl = nil; 19 | 20 | 21 | procedure SSL_InitSSLDH; 22 | 23 | implementation 24 | uses ssl_lib; 25 | 26 | procedure SSL_InitSSLDH; 27 | begin 28 | if @ECDH_OpenSSL = nil then 29 | begin 30 | @ECDH_OpenSSL:= LoadFunctionCLib('ECDH_OpenSSL'); 31 | 32 | @ECDH_set_default_method:= LoadFunctionCLib('ECDH_set_default_method'); 33 | @ECDH_get_default_method:= LoadFunctionCLib('ECDH_get_default_method'); 34 | @ECDH_set_method:= LoadFunctionCLib('ECDH_set_method'); 35 | 36 | @ECDH_compute_key:= LoadFunctionCLib('ECDH_compute_key'); 37 | 38 | @ECDH_get_ex_new_index:= LoadFunctionCLib('ECDH_get_ex_new_index'); 39 | @ECDH_set_ex_data:= LoadFunctionCLib('ECDH_set_ex_data'); 40 | @ECDH_get_ex_data:= LoadFunctionCLib('ECDH_get_ex_data'); 41 | 42 | @ERR_load_ECDH_strings:= LoadFunctionCLib('ERR_load_ECDH_strings'); 43 | 44 | end; 45 | end; 46 | 47 | end. 48 | -------------------------------------------------------------------------------- /ssl_ecdsa.pas: -------------------------------------------------------------------------------- 1 | unit ssl_ecdsa; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | ECDSA_SIG_new: function: PECDSA_SIG; cdecl = nil; 8 | 9 | ECDSA_SIG_free: procedure(_sig: PECDSA_SIG); cdecl = nil; 10 | 11 | i2d_ECDSA_SIG: function(const _sig: PECDSA_SIG; _pp: PPAnsiChar): TC_INT; cdecl = nil; 12 | d2i_ECDSA_SIG: function(_sig: PPECDSA_SIG; const _pp: PPAnsiChar; _len: TC_LONG): PECDSA_SIG; cdecl = nil; 13 | 14 | ECDSA_do_sign: function(const _dgst: PAnsiChar; _dgst_len: TC_INT; _eckey: PEC_KEY): PECDSA_SIG; cdecl = nil; 15 | 16 | ECDSA_do_sign_ex: function(const _dgst: PAnsiChar; _dgstlen: TC_INT; const _kinv: PBIGNUM; const _rp: Pointer; _eckey: PEC_KEY): PECDSA_SIG; cdecl = nil; 17 | 18 | ECDSA_do_verify: function(const _dgst: PAnsiChar; _dgst_len: TC_INT; const _sig: PECDSA_SIG; _eckey: PEC_KEY): TC_INT; cdecl = nil; 19 | 20 | ECDSA_OpenSSL: function: PECDSA_METHOD; cdecl = nil; 21 | 22 | ECDSA_set_default_method: procedure(const _meth: PECDSA_METHOD); cdecl = nil; 23 | 24 | ECDSA_get_default_method: function: PECDSA_METHOD; cdecl = nil; 25 | 26 | ECDSA_set_method: function(_eckey: PEC_KEY; const _meth: PECDSA_METHOD): TC_INT; cdecl = nil; 27 | 28 | ECDSA_size: function(const _eckey: PEC_KEY): TC_INT; cdecl = nil; 29 | 30 | ECDSA_sign_setup: function(_eckey: PEC_KEY; _ctx: PBN_CTX; _kinv: PPBIGNUM; _rp: PPBIGNUM): TC_INT; cdecl = nil; 31 | ECDSA_sign: function(_type: TC_INT; const _dgst: PAnsiChar; _dgstlen: TC_INT; _sig: PAnsiChar; var _siglen: TC_UINT; _eckey: PEC_KEY): TC_INT; cdecl = nil; 32 | 33 | ECDSA_sign_ex: function(_type: TC_INT; const _dgst: PAnsiChar; _dgstlen: TC_INT; _sig: PAnsiChar; var _siglen: TC_UINT; const _kinv: PBIGNUM;const _rp: PBIGNUM; _eckey: PEC_KEY): TC_INT; cdecl = nil; 34 | 35 | ECDSA_verify: function(_type: TC_INT; const _dgst: PAnsiChar; _dgstlen: TC_INT; const _sig: PAnsiChar; _siglen: TC_INT; _eckey: PEC_KEY): TC_INT; cdecl = nil; 36 | 37 | ECDSA_get_ex_new_index: function(_argl: TC_LONG; _argp: Pointer; _new_func: CRYPTO_EX_new; _dup_func: CRYPTO_EX_dup; _free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 38 | ECDSA_set_ex_data: function(_d: PEC_KEY; _idx: TC_INT; _arg: Pointer): TC_INT; cdecl = nil; 39 | ECDSA_get_ex_data: function(_d: PEC_KEY; _idx: TC_INT): Pointer; cdecl = nil; 40 | 41 | ERR_load_ECDSA_strings: procedure; cdecl = nil; 42 | 43 | procedure SSL_InitECDSA; 44 | 45 | implementation 46 | uses ssl_lib; 47 | 48 | procedure SSL_InitECDSA; 49 | begin 50 | if @ECDSA_SIG_new = nil then 51 | begin 52 | @ECDSA_SIG_new:= LoadFunctionCLib('ECDSA_SIG_new'); 53 | @ECDSA_SIG_free:= LoadFunctionCLib('ECDSA_SIG_free'); 54 | @i2d_ECDSA_SIG:= LoadFunctionCLib('i2d_ECDSA_SIG'); 55 | @d2i_ECDSA_SIG:= LoadFunctionCLib('d2i_ECDSA_SIG'); 56 | @ECDSA_do_sign:= LoadFunctionCLib('ECDSA_do_sign'); 57 | @ECDSA_do_sign_ex:= LoadFunctionCLib('ECDSA_do_sign_ex'); 58 | @ECDSA_do_verify:= LoadFunctionCLib('ECDSA_do_verify'); 59 | @ECDSA_OpenSSL:= LoadFunctionCLib('ECDSA_OpenSSL'); 60 | @ECDSA_set_default_method:= LoadFunctionCLib('ECDSA_set_default_method'); 61 | @ECDSA_get_default_method:= LoadFunctionCLib('ECDSA_get_default_method'); 62 | @ECDSA_set_method:= LoadFunctionCLib('ECDSA_set_method'); 63 | @ECDSA_size:= LoadFunctionCLib('ECDSA_size'); 64 | @ECDSA_sign_setup:= LoadFunctionCLib('ECDSA_sign_setup'); 65 | @ECDSA_sign:= LoadFunctionCLib('ECDSA_sign'); 66 | @ECDSA_sign_ex:= LoadFunctionCLib('ECDSA_sign_ex'); 67 | @ECDSA_verify:= LoadFunctionCLib('ECDSA_verify'); 68 | @ECDSA_get_ex_new_index:= LoadFunctionCLib('ECDSA_get_ex_new_index'); 69 | @ECDSA_set_ex_data:= LoadFunctionCLib('ECDSA_set_ex_data'); 70 | @ECDSA_get_ex_data:= LoadFunctionCLib('ECDSA_get_ex_data'); 71 | @ERR_load_ECDSA_strings:= LoadFunctionCLib('ERR_load_ECDSA_strings'); 72 | 73 | end; 74 | end; 75 | 76 | end. 77 | -------------------------------------------------------------------------------- /ssl_err.pas: -------------------------------------------------------------------------------- 1 | {$I ssl.inc} 2 | unit ssl_err; 3 | 4 | interface 5 | uses sysutils, ssl_types; 6 | var 7 | 8 | { 9 | ERR_add_error_data: procedure(_num: TC_INT; ...); cdecl = nil; 10 | ERR_add_error_vdata: procedure(_num: TC_INT; va_list args); cdecl = nil; 11 | ERR_load_strings: procedure(_lib: TC_INT; ERR_STRING_DATA str[]); cdecl = nil; 12 | ERR_unload_strings: procedure(_lib: TC_INT; ERR_STRING_DATA str[]); cdecl = nil; 13 | LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); 14 | LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); 15 | ERR_release_err_state_table: procedure(LHASH_OF(ERR_STATE) **hash); cdecl = nil; 16 | } 17 | 18 | ERR_put_error: procedure(_lib: TC_INT;_func: TC_INT; _reason: TC_INT; const _file: PAnsiChar; _line: TC_INT); cdecl = nil; 19 | ERR_set_error_data: procedure( _data: PAnsiChar;_flags: TC_INT); cdecl = nil; 20 | 21 | ERR_get_error: function: TC_ULONG; cdecl = nil; 22 | ERR_get_error_line: function(_file: PPAnsiChar;var _line: TC_INT): TC_ULONG; cdecl = nil; 23 | ERR_get_error_line_data: function(_file: PPAnsiChar;var _line: TC_INT; _data: PPAnsiChar; var _flags: TC_INT): TC_ULONG; cdecl = nil; 24 | ERR_peek_error: function: TC_ULONG; cdecl = nil; 25 | ERR_peek_error_line: function(_file: PPAnsiChar;var _line: TC_INT): TC_ULONG; cdecl = nil; 26 | ERR_peek_error_line_data: function(_file: PPAnsiChar;var _line: TC_INT; _data: PPAnsiChar;var _flags: TC_INT): TC_ULONG; cdecl = nil; 27 | ERR_peek_last_error: function: TC_ULONG; cdecl = nil; 28 | ERR_peek_last_error_line: function(_file: PPAnsiChar; var _line: TC_INT): TC_ULONG; cdecl = nil; 29 | ERR_peek_last_error_line_data: function(_file: PPAnsiChar;var _line: TC_INT; _data: PPAnsiChar; _flags: TC_INT): TC_ULONG; cdecl = nil; 30 | ERR_clear_error: procedure; cdecl = nil; 31 | ERR_error_string: function(e: TC_ULONG; _buf: PAnsiChar): PAnsiChar; cdecl = nil; 32 | ERR_error_string_n: procedure(e: TC_ULONG; _buf: PAnsiChar; len: TC_SIZE_T); cdecl = nil; 33 | ERR_lib_error_string: function(e: TC_ULONG): PAnsiChar; cdecl = nil; 34 | ERR_func_error_string: function(e: TC_ULONG): PAnsiChar; cdecl = nil; 35 | ERR_reason_error_string: function(e: TC_ULONG): PAnsiChar; cdecl = nil; 36 | ERR_print_errors_cb: procedure(cb: ERR_CALLBACK; u: Pointer); cdecl = nil; 37 | ERR_print_errors: procedure(bp: PBIO); cdecl = nil; 38 | 39 | ERR_load_ERR_strings: procedure; cdecl = nil; 40 | ERR_load_crypto_strings: procedure; cdecl = nil; 41 | ERR_free_strings: procedure; cdecl = nil; 42 | 43 | ERR_remove_thread_state: procedure(const tid: PCRYPTO_THREADID); cdecl = nil; 44 | ERR_remove_state: procedure(d: TC_ULONG); cdecl = nil; 45 | ERR_get_state: function: PERR_STATE; cdecl = nil; 46 | 47 | ERR_get_next_error_library: function: TC_INT; cdecl = nil; 48 | 49 | ERR_set_mark: function: TC_INT; cdecl = nil; 50 | ERR_pop_to_mark: function: TC_INT; cdecl = nil; 51 | 52 | ERR_get_implementation: function: PERR_FNS; cdecl = nil; 53 | ERR_set_implementation: function(const fns: PERR_FNS): TC_INT; cdecl = nil; 54 | 55 | type 56 | ESSLError = class(Exception) 57 | public 58 | ErrorCode: TC_ULONG; 59 | Msg: String; 60 | constructor Create(AErrorCode: TC_ULONG; AMsg: String); overload; 61 | constructor Create(AErrorCode: TC_ULONG); overload; 62 | end; 63 | 64 | procedure SSL_InitERR; 65 | 66 | function SSL_CheckError(AShowException: Boolean = True): TC_ULONG; 67 | 68 | implementation 69 | uses ssl_lib; 70 | 71 | function SSL_CheckError(AShowException: Boolean = True): TC_ULONG; 72 | begin 73 | Result := ERR_get_error; 74 | ERR_clear_error; 75 | if (Result <> 0) and (AShowException) then 76 | raise ESSLError.Create(Result); 77 | end; 78 | 79 | 80 | procedure SSL_InitERR; 81 | begin 82 | if @ERR_get_error = nil then 83 | begin 84 | @ERR_put_error:= LoadFunctionCLib('ERR_put_error'); 85 | @ERR_set_error_data:= LoadFunctionCLib('ERR_set_error_data'); 86 | @ERR_get_error:= LoadFunctionCLib('ERR_get_error'); 87 | @ERR_get_error_line:= LoadFunctionCLib('ERR_get_error_line'); 88 | @ERR_get_error_line_data:= LoadFunctionCLib('ERR_get_error_line_data'); 89 | @ERR_peek_error:= LoadFunctionCLib('ERR_peek_error'); 90 | @ERR_peek_error_line:= LoadFunctionCLib('ERR_peek_error_line'); 91 | @ERR_peek_error_line_data:= LoadFunctionCLib('ERR_peek_error_line_data'); 92 | @ERR_peek_last_error:= LoadFunctionCLib('ERR_peek_last_error'); 93 | @ERR_peek_last_error_line:= LoadFunctionCLib('ERR_peek_last_error_line'); 94 | @ERR_peek_last_error_line_data:= LoadFunctionCLib('ERR_peek_last_error_line_data'); 95 | @ERR_clear_error:= LoadFunctionCLib('ERR_clear_error'); 96 | @ERR_error_string:= LoadFunctionCLib('ERR_error_string'); 97 | @ERR_error_string_n:= LoadFunctionCLib('ERR_error_string_n'); 98 | @ERR_lib_error_string:= LoadFunctionCLib('ERR_lib_error_string'); 99 | @ERR_func_error_string:= LoadFunctionCLib('ERR_func_error_string'); 100 | @ERR_reason_error_string:= LoadFunctionCLib('ERR_reason_error_string'); 101 | @ERR_print_errors_cb:= LoadFunctionCLib('ERR_print_errors_cb'); 102 | @ERR_print_errors:= LoadFunctionCLib('ERR_print_errors'); 103 | @ERR_load_ERR_strings:= LoadFunctionCLib('ERR_load_ERR_strings'); 104 | @ERR_load_crypto_strings:= LoadFunctionCLib('ERR_load_crypto_strings'); 105 | @ERR_free_strings:= LoadFunctionCLib('ERR_free_strings'); 106 | @ERR_remove_thread_state:= LoadFunctionCLib('ERR_remove_thread_state', false); 107 | @ERR_remove_state:= LoadFunctionCLib('ERR_remove_state'); 108 | @ERR_get_state:= LoadFunctionCLib('ERR_get_state'); 109 | @ERR_get_next_error_library:= LoadFunctionCLib('ERR_get_next_error_library'); 110 | @ERR_set_mark:= LoadFunctionCLib('ERR_set_mark'); 111 | @ERR_pop_to_mark:= LoadFunctionCLib('ERR_pop_to_mark'); 112 | @ERR_get_implementation:= LoadFunctionCLib('ERR_get_implementation'); 113 | @ERR_set_implementation:= LoadFunctionCLib('ERR_set_implementation'); 114 | ERR_load_crypto_strings; 115 | end; 116 | end; 117 | 118 | 119 | { ESSLError } 120 | 121 | constructor ESSLError.Create(AErrorCode: TC_ULONG; AMsg: String); 122 | begin 123 | ErrorCode := AErrorCode; 124 | Msg := AMsg; 125 | inherited Create(Msg); 126 | end; 127 | 128 | constructor ESSLError.Create(AErrorCode: TC_ULONG); 129 | var sMsg: String; 130 | begin 131 | sMsg := string(ERR_error_string(AErrorCode, nil)); 132 | Create(AErrorCode, sMsg); 133 | end; 134 | 135 | end. -------------------------------------------------------------------------------- /ssl_hmac.pas: -------------------------------------------------------------------------------- 1 | unit ssl_hmac; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | HMAC_CTX_init: procedure(_ctx: PHMAC_CTX); cdecl = nil; 8 | HMAC_CTX_cleanup: procedure(_ctx: PHMAC_CTX); cdecl = nil; 9 | 10 | HMAC_Init: function(_ctx: PHMAC_CTX; const _key: Pointer; _len: TC_INT;const _md: PEVP_MD): TC_INT; cdecl = nil; 11 | HMAC_Init_ex: function(_ctx: PHMAC_CTX; const _key: Pointer; _len: TC_INT;const _md: PEVP_MD; _impl: PENGINE): TC_INT; cdecl = nil; 12 | HMAC_Update: function(_ctx: PHMAC_CTX; const _data: PAnsiChar; _len: TC_SIZE_T): TC_INT; cdecl = nil; 13 | HMAC_Final: function(_ctx: PHMAC_CTX; _md: PAnsiChar; var _len: TC_UINT): TC_INT; cdecl = nil; 14 | HMAC: function(const _evp_md: PEVP_MD; const _key: Pointer; _key_len: TC_INT; const _d: PAnsiChar; _n: TC_SIZE_T; _md: PAnsiChar; var _md_len: TC_UINT): PAnsiChar; cdecl = nil; 15 | HMAC_CTX_copy: function(_dctx: PHMAC_CTX; _sctx: PHMAC_CTX): TC_INT; cdecl = nil; 16 | 17 | HMAC_CTX_set_flags: procedure(_ctx: PHMAC_CTX; _flags: TC_ULONG); cdecl = nil; 18 | 19 | procedure SSL_InitHMAC; 20 | implementation 21 | uses ssl_lib; 22 | 23 | procedure SSL_InitHMAC; 24 | begin 25 | 26 | if @HMAC_CTX_init = nil then 27 | begin 28 | @HMAC_CTX_init:= LoadFunctionCLib('HMAC_CTX_init'); 29 | @HMAC_CTX_cleanup:= LoadFunctionCLib('HMAC_CTX_cleanup'); 30 | @HMAC_Init:= LoadFunctionCLib('HMAC_Init'); 31 | @HMAC_Init_ex:= LoadFunctionCLib('HMAC_Init_ex'); 32 | @HMAC_Update:= LoadFunctionCLib('HMAC_Update'); 33 | @HMAC_Final:= LoadFunctionCLib('HMAC_Final'); 34 | @HMAC:= LoadFunctionCLib('HMAC'); 35 | @HMAC_CTX_copy:= LoadFunctionCLib('HMAC_CTX_copy'); 36 | @HMAC_CTX_set_flags:= LoadFunctionCLib('HMAC_CTX_set_flags'); 37 | end; 38 | 39 | end; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /ssl_idea.pas: -------------------------------------------------------------------------------- 1 | unit ssl_idea; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | idea_options: function: PAnsiChar; cdecl = nil; 8 | idea_ecb_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _ks: PIDEA_KEY_SCHEDULE); cdecl = nil; 9 | private_idea_set_encrypt_key: procedure(const _key: PAnsiChar; _ks: PIDEA_KEY_SCHEDULE); cdecl = nil; 10 | idea_set_encrypt_key: procedure(const _key: PAnsiChar; _ks: PIDEA_KEY_SCHEDULE); cdecl = nil; 11 | idea_set_decrypt_key: procedure(_ek: PIDEA_KEY_SCHEDULE; _dk: PIDEA_KEY_SCHEDULE); cdecl = nil; 12 | idea_cbc_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _ks: PIDEA_KEY_SCHEDULE; _iv: PAnsiChar; _enc: TC_INT); cdecl = nil; 13 | idea_cfb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _ks: PIDEA_KEY_SCHEDULE; _iv: PAnsiChar; var _num: TC_INT; _enc: TC_INT); cdecl = nil; 14 | idea_ofb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _ks: PIDEA_KEY_SCHEDULE; _iv: PAnsiChar; var _num: TC_INT); cdecl = nil; 15 | idea_encrypt: procedure(var _in: TC_LONG; _ks: PIDEA_KEY_SCHEDULE); cdecl = nil; 16 | 17 | procedure SSL_InitIDEA; 18 | 19 | implementation 20 | uses ssl_lib; 21 | 22 | procedure SSL_InitIDEA; 23 | begin 24 | if @idea_options = nil then 25 | begin 26 | @idea_options:= LoadFunctionCLib('idea_options'); 27 | @idea_ecb_encrypt:= LoadFunctionCLib('idea_ecb_encrypt'); 28 | @private_idea_set_encrypt_key:= LoadFunctionCLib('private_idea_set_encrypt_key', false); 29 | @idea_set_encrypt_key:= LoadFunctionCLib('idea_set_encrypt_key'); 30 | @idea_set_decrypt_key:= LoadFunctionCLib('idea_set_decrypt_key'); 31 | @idea_cbc_encrypt:= LoadFunctionCLib('idea_cbc_encrypt'); 32 | @idea_cfb64_encrypt:= LoadFunctionCLib('idea_cfb64_encrypt'); 33 | @idea_ofb64_encrypt:= LoadFunctionCLib('idea_ofb64_encrypt'); 34 | @idea_encrypt:= LoadFunctionCLib('idea_encrypt'); 35 | end; 36 | end; 37 | 38 | end. 39 | -------------------------------------------------------------------------------- /ssl_init.pas: -------------------------------------------------------------------------------- 1 | unit ssl_init; 2 | 3 | interface 4 | 5 | procedure SSL_InitLib; 6 | 7 | implementation 8 | 9 | uses 10 | ssl_ec, ssl_util, ssl_types, ssl_lib, ssl_evp, ssl_const, ssl_rsa, ssl_dsa, ssl_x509, ssl_bio, ssl_pem, ssl_asn, 11 | ssl_aes, ssl_bf, ssl_bn, ssl_buffer, ssl_cast, ssl_cmac, ssl_engine, ssl_rand, ssl_camellia, ssl_comp, ssl_des, 12 | ssl_dh, ssl_err, ssl_objects, ssl_sk, ssl_pkcs12, ssl_pkcs7, ssl_cms, ssl_ecdh, ssl_ecdsa, ssl_hmac, ssl_idea, 13 | ssl_lhash, ssl_md4, ssl_md5, ssl_ocsp, ssl_mdc2, ssl_rc2, ssl_rc4, ssl_rc5, ssl_ripemd, ssl_sha; 14 | 15 | 16 | procedure SSL_InitLib; 17 | begin 18 | ssl_util.SSL_InitUtil; 19 | ssl_err.SSL_InitERR; 20 | ssl_objects.SSL_InitOBJ; 21 | ssl_bio.SSL_InitBIO; 22 | ssl_ec.SSL_InitEC; 23 | ssl_evp.SSL_InitEVP; 24 | ssl_rsa.SSL_InitRSA; 25 | ssl_dsa.SSL_InitDSA; 26 | ssl_x509.SSL_InitX509; 27 | ssl_pem.SSL_InitPEM; 28 | ssl_asn.SSL_InitASN1; 29 | ssl_aes.SSL_InitAES; 30 | ssl_bf.SSL_InitBF; 31 | ssl_bn.SSL_InitBN; 32 | ssl_buffer.SSL_InitBuffer; 33 | ssl_cast.SLL_InitCAST; 34 | ssl_cmac.SSL_InitCMAC; 35 | ssl_engine.SSL_InitENGINE; 36 | ssl_rand.SSL_InitRAND; 37 | ssl_camellia.SSL_InitCAMELLIA; 38 | ssl_comp.SSL_InitCOMP; 39 | ssl_des.SSL_InitDES; 40 | ssl_dh.SSL_InitDH; 41 | ssl_sk.SSL_initSk; 42 | ssl_pkcs12.SSL_InitPKCS12; 43 | ssl_pkcs7.SSL_InitPKCS7; 44 | ssl_cms.SSL_InitCMS; 45 | ssl_ecdh.SSL_InitSSLDH; 46 | ssl_ecdsa.SSL_InitECDSA; 47 | ssl_hmac.SSL_InitHMAC; 48 | ssl_idea.SSL_InitIDEA; 49 | ssl_lhash.SSL_InitLHASH; 50 | ssl_md4.SSL_InitMD4; 51 | ssl_md5.SSL_InitMD5; 52 | ssl_ocsp.SSL_InitOCSP; 53 | ssl_mdc2.ssl_initmdc2; 54 | ssl_rc2.SSL_Initrc2; 55 | ssl_rc4.SSL_Initrc4; 56 | ssl_rc5.SSL_Initrc5; 57 | ssl_ripemd.SSL_Initripemd; 58 | ssl_sha.ssl_Initsha; 59 | end; 60 | 61 | 62 | end. 63 | -------------------------------------------------------------------------------- /ssl_lhash.pas: -------------------------------------------------------------------------------- 1 | unit ssl_lhash; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | lh_new: function(h: LHASH_HASH_FN_TYPE; c: LHASH_COMP_FN_TYPE): P_LHASH; cdecl = nil; 7 | lh_free: procedure(_lh: P_LHASH); cdecl = nil; 8 | lh_insert: function(_lh: P_LHASH; _data: Pointer): Pointer; cdecl = nil; 9 | lh_delete: function(_lh: P_LHASH; const _data: Pointer): Pointer; cdecl = nil; 10 | lh_retrieve: function(_lh: P_LHASH; const _data: Pointer): Pointer; cdecl = nil; 11 | lh_doall: procedure(_lh: P_LHASH; func: LHASH_DOALL_FN_TYPE); cdecl = nil; 12 | lh_doall_arg: procedure(_lh: P_LHASH; func: LHASH_DOALL_ARG_FN_TYPE; _arg: Pointer); cdecl = nil; 13 | lh_strhash: function(const _c: PAnsiChar): TC_ULONG; cdecl = nil; 14 | lh_num_items: function(const _lh: P_LHASH): TC_ULONG; cdecl = nil; 15 | lh_stats_bio: procedure(const _lh: P_LHASH; _out: PBIO); cdecl = nil; 16 | lh_node_stats_bio: procedure(const _lh: P_LHASH; _out: PBIO); cdecl = nil; 17 | lh_node_usage_stats_bio: procedure(const _lh: P_LHASH; _out: PBIO); cdecl = nil; 18 | 19 | procedure SSL_InitLHASH; 20 | 21 | implementation 22 | uses ssl_lib; 23 | 24 | procedure SSL_InitLHASH; 25 | begin 26 | if @lh_new = nil then 27 | begin 28 | @lh_new:= LoadFunctionCLib('lh_new'); 29 | @lh_free:= LoadFunctionCLib('lh_free'); 30 | @lh_insert:= LoadFunctionCLib('lh_insert'); 31 | @lh_delete:= LoadFunctionCLib('lh_delete'); 32 | @lh_retrieve:= LoadFunctionCLib('lh_retrieve'); 33 | @lh_doall:= LoadFunctionCLib('lh_doall'); 34 | @lh_doall_arg:= LoadFunctionCLib('lh_doall_arg'); 35 | @lh_strhash:= LoadFunctionCLib('lh_strhash'); 36 | @lh_num_items:= LoadFunctionCLib('lh_num_items'); 37 | @lh_stats_bio:= LoadFunctionCLib('lh_stats_bio'); 38 | @lh_node_stats_bio:= LoadFunctionCLib('lh_node_stats_bio'); 39 | @lh_node_usage_stats_bio:= LoadFunctionCLib('lh_node_usage_stats_bio'); 40 | end; 41 | 42 | end; 43 | 44 | end. 45 | -------------------------------------------------------------------------------- /ssl_lib.pas: -------------------------------------------------------------------------------- 1 | unit ssl_lib; 2 | 3 | interface 4 | 5 | var 6 | {$IF Defined(DARWIN) or Defined(MACOS)} 7 | SSL_C_LIB : string = 'libcrypto.dylib'; 8 | {$ELSEIF Defined(UNIX)} 9 | SSL_C_LIB : AnsiString = 'libeay32.so'; 10 | {$ELSE} 11 | SSL_C_LIB : AnsiString = 'libeay32.dll'; 12 | {$ENDIF} 13 | 14 | 15 | function SSLCryptHandle: THandle; 16 | function LoadSSLCrypt: Boolean; 17 | function LoadFunctionCLib(const FceName: String; const ACritical : Boolean = True): Pointer; 18 | 19 | implementation 20 | 21 | uses 22 | {$IFDEF UNIX} 23 | dynlibs, 24 | {$ELSE} 25 | {$IFDEF MSWINDOWS} 26 | Windows, 27 | {$ELSE} 28 | Posix.Dlfcn, 29 | {$ENDIF MSWINDOWS} 30 | {$ENDIF UNIX} 31 | sysutils; 32 | 33 | 34 | var hCrypt: THandle = 0; 35 | 36 | function SSLCryptHandle: THandle; 37 | begin 38 | Result := hCrypt; 39 | end; 40 | 41 | function LoadSSLCrypt: Boolean; 42 | begin 43 | {$IFDEF UNIX} 44 | hCrypt := LoadLibrary(SSL_C_LIB); 45 | {$ELSE}{$IFNDEF MSWINDOWS} 46 | hCrypt := LoadLibrary(PChar(SSL_C_LIB)); 47 | {$ELSE} 48 | hCrypt := LoadLibraryA(PAnsiChar(SSL_C_LIB)); 49 | {$ENDIF MSWINDOWS}{$ENDIF UNIX} 50 | Result := hCrypt <> 0; 51 | end; 52 | 53 | 54 | function LoadFunctionCLib(const FceName: String; const ACritical : Boolean = True): Pointer; 55 | begin 56 | if SSLCryptHandle = 0 then 57 | LoadSSLCrypt; 58 | {$IFNDEF MSWINDOWS} 59 | Result := GetProcAddress(SSLCryptHandle, PChar(FceName)); 60 | {$ELSE} 61 | Result := Windows.GetProcAddress(SSLCryptHandle, PChar(FceName)); 62 | {$ENDIF} 63 | if ACritical then 64 | begin 65 | if Result = nil then begin 66 | {$ifdef fpc} 67 | raise Exception.CreateFmt('Error loading library. Func %s'#13#10'%s', [FceName, SysErrorMessage(GetLastOSError)]); 68 | {$else} 69 | raise Exception.CreateFmt('Error loading library. Func %s'#13#10'%s', [FceName, SysErrorMessage(GetLastError)]); 70 | {$endif} 71 | end; 72 | end; 73 | end; 74 | 75 | 76 | initialization 77 | 78 | finalization 79 | if hCrypt <> 0 then 80 | {$IF not Defined(FPC) and Defined(MACOS)} 81 | dlclose(hCrypt); 82 | {$ELSE} 83 | FreeLibrary(hCrypt); 84 | {$ENDIF} 85 | 86 | end. -------------------------------------------------------------------------------- /ssl_md4.pas: -------------------------------------------------------------------------------- 1 | unit ssl_md4; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | MD4_Init: function(_c: PMD4_CTX): TC_INT; cdecl = nil; 8 | MD4_Update: function(_c: PMD4_CTX; const _data: Pointer; _len: TC_SIZE_T): TC_INT; cdecl = nil; 9 | MD4_Final: function(_md: PAnsiChar; _c: PMD4_CTX): TC_INT; cdecl = nil; 10 | MD4: function(const _d: PAnsiChar; _n: TC_SIZE_T; _md: PAnsiChar): PAnsiChar; cdecl = nil; 11 | MD4_Transform: procedure(_c: PMD4_CTX; const _b: PAnsiChar); cdecl = nil; 12 | 13 | procedure SSL_InitMD4; 14 | 15 | implementation 16 | uses ssl_lib; 17 | 18 | procedure SSL_InitMD4; 19 | begin 20 | if @MD4_Init = nil then 21 | begin 22 | @MD4_Init:= LoadFunctionCLib('MD4_Init'); 23 | @MD4_Update:= LoadFunctionCLib('MD4_Update'); 24 | @MD4_Final:= LoadFunctionCLib('MD4_Final'); 25 | @MD4:= LoadFunctionCLib('MD4'); 26 | @MD4_Transform:= LoadFunctionCLib('MD4_Transform'); 27 | end; 28 | end; 29 | 30 | end. 31 | -------------------------------------------------------------------------------- /ssl_md5.pas: -------------------------------------------------------------------------------- 1 | unit ssl_md5; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | MD5_Init: function(_c: PMD5_CTX): TC_INT; cdecl = nil; 8 | MD5_Update: function(_c: PMD5_CTX; const _data: Pointer; _len: TC_SIZE_T): TC_INT; cdecl = nil; 9 | MD5_Final: function(_md: PAnsiChar; _c: PMD5_CTX): TC_INT; cdecl = nil; 10 | MD5: function(const _d: PAnsiChar; _n: TC_SIZE_T; _md: PAnsiChar): PAnsiChar; cdecl = nil; 11 | MD5_Transform: procedure(_c: PMD5_CTX; const _b: PAnsiChar); cdecl = nil; 12 | 13 | procedure SSL_InitMD5; 14 | 15 | implementation 16 | uses ssl_lib; 17 | 18 | procedure SSL_InitMD5; 19 | begin 20 | if @MD5_Init = nil then 21 | begin 22 | @MD5_Init:= LoadFunctionCLib('MD5_Init'); 23 | @MD5_Update:= LoadFunctionCLib('MD5_Update'); 24 | @MD5_Final:= LoadFunctionCLib('MD5_Final'); 25 | @MD5:= LoadFunctionCLib('MD5'); 26 | @MD5_Transform:= LoadFunctionCLib('MD5_Transform'); 27 | end; 28 | end; 29 | 30 | end. 31 | -------------------------------------------------------------------------------- /ssl_mdc2.pas: -------------------------------------------------------------------------------- 1 | unit ssl_mdc2; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | MDC2_Init: function(_c: PMDC2_CTX): TC_INT; cdecl = nil; 8 | MDC2_Update: function(_c: PMDC2_CTX; const _data: PAnsiChar; _len: TC_SIZE_T): TC_INT; cdecl = nil; 9 | MDC2_Final: function(_md: PAnsiChar; _c: PMDC2_CTX): TC_INT; cdecl = nil; 10 | MDC2: function(const _d: PAnsiChar; _n: TC_SIZE_T;_md: PAnsiChar): PAnsiChar; cdecl = nil; 11 | 12 | 13 | procedure SSL_InitMDC2; 14 | 15 | implementation 16 | uses ssl_lib; 17 | 18 | procedure SSL_InitMDC2; 19 | begin 20 | if @MDC2_Init = nil then 21 | begin 22 | @MDC2_Init:= LoadFunctionCLib('MDC2_Init'); 23 | @MDC2_Update:= LoadFunctionCLib('MDC2_Update'); 24 | @MDC2_Final:= LoadFunctionCLib('MDC2_Final'); 25 | @MDC2:= LoadFunctionCLib('MDC2'); 26 | end; 27 | end; 28 | 29 | end. 30 | -------------------------------------------------------------------------------- /ssl_objects.pas: -------------------------------------------------------------------------------- 1 | {$I ssl.inc} 2 | unit ssl_objects; 3 | 4 | interface 5 | uses ssl_types; 6 | var 7 | OBJ_NAME_init: function: TC_INT; cdecl = nil; 8 | OBJ_NAME_new_index: function(hash_func: OBJ_hash_func; cmp_func: OBJ_cmp_func; free_func: OBJ_free_func): TC_INT; cdecl = nil; 9 | OBJ_NAME_get: function(const _name: PAnsiChar; _type: TC_INT): PAnsiChar; cdecl = nil; 10 | OBJ_NAME_add: function(const _name: PAnsiChar;_type: TC_INT;const _data: PAnsiChar): TC_INT; cdecl = nil; 11 | OBJ_NAME_remove: function(const _name: PAnsiChar;_type: TC_INT): TC_INT; cdecl = nil; 12 | OBJ_NAME_cleanup: procedure(_type: TC_INT); cdecl = nil; 13 | OBJ_NAME_do_all: procedure(_type: TC_INT; fn: OBJ_NAME_CALLBACK; arg: Pointer); cdecl = nil; 14 | OBJ_NAME_do_all_sorted: procedure(_type: TC_INT; fn: OBJ_NAME_CALLBACK; arg: Pointer); cdecl = nil; 15 | 16 | OBJ_dup: function(const o: PASN1_OBJECT): PASN1_OBJECT; cdecl = nil; 17 | OBJ_nid2obj: function(_n: TC_INT): PASN1_OBJECT; cdecl = nil; 18 | OBJ_nid2ln: function(_n: TC_INT): PAnsiChar; cdecl = nil; 19 | OBJ_nid2sn: function(n: TC_INT): PAnsiChar; cdecl = nil; 20 | OBJ_obj2nid: function(const o: PASN1_OBJECT): TC_INT; cdecl = nil; 21 | OBJ_txt2obj: function(const _s: PAnsiChar; _no_name: TC_INT): PASN1_OBJECT; cdecl = nil; 22 | OBJ_obj2txt: function( _buf: PAnsiChar; _buf_len: TC_INT; const a: PASN1_OBJECT; _no_name: TC_INT): TC_INT; cdecl = nil; 23 | OBJ_txt2nid: function(const _s: PAnsiChar): TC_INT; cdecl = nil; 24 | OBJ_ln2nid: function(const _s: PAnsiChar): TC_INT; cdecl = nil; 25 | OBJ_sn2nid: function(const _s: PAnsiChar): TC_INT; cdecl = nil; 26 | OBJ_cmp: function(const a: PASN1_OBJECT;const b: PASN1_OBJECT): TC_INT; cdecl = nil; 27 | OBJ_bsearch_: function(const key: Pointer; const base: Pointer;_num: TC_INT;_size: TC_INT; cmp: OBJ_CMP_CALLBACK): Pointer; cdecl = nil; 28 | OBJ_bsearch_ex_: function(const key: Pointer;const base: Pointer; _num: TC_INT; _size: TC_INT; cmp: OBJ_CMP_CALLBACK; _flags: TC_INT): Pointer; cdecl = nil; 29 | 30 | OBJ_new_nid: function(_num: TC_INT): TC_INT; cdecl = nil; 31 | OBJ_add_object: function(const obj: PASN1_OBJECT): TC_INT; cdecl = nil; 32 | OBJ_create: function(const _oid: PAnsiChar;const _sn: PAnsiChar;const _ln: PAnsiChar): TC_INT; cdecl = nil; 33 | OBJ_cleanup: procedure; cdecl = nil; 34 | OBJ_create_objects: function(_in: PBIO): TC_INT; cdecl = nil; 35 | 36 | OBJ_find_sigid_algs: function(_signid: TC_INT; var _pdig_nid: TC_INT; var _ppkey_nid: TC_INT): TC_INT; cdecl = nil; 37 | OBJ_find_sigid_by_algs: function(var _psignid: TC_INT; _dig_nid: TC_INT; _pkey_nid: TC_INT): TC_INT; cdecl = nil; 38 | OBJ_add_sigid: function(_signid: TC_INT; _dig_id: TC_INT; _pkey_id: TC_INT): TC_INT; cdecl = nil; 39 | OBJ_sigid_free: procedure; cdecl = nil; 40 | 41 | //extern int obj_cleanup_defer; 42 | check_defer: procedure(_nid: TC_INT); cdecl = nil; 43 | 44 | ERR_load_OBJ_strings: procedure; cdecl = nil; 45 | 46 | procedure SSL_InitOBJ; 47 | 48 | implementation 49 | uses ssl_lib; 50 | 51 | procedure SSL_InitOBJ; 52 | begin 53 | if @OBJ_NAME_init = nil then 54 | begin 55 | @OBJ_NAME_init:= LoadFunctionCLib('OBJ_NAME_init'); 56 | @OBJ_NAME_new_index:= LoadFunctionCLib('OBJ_NAME_new_index'); 57 | @OBJ_NAME_get:= LoadFunctionCLib('OBJ_NAME_get'); 58 | @OBJ_NAME_add:= LoadFunctionCLib('OBJ_NAME_add'); 59 | @OBJ_NAME_remove:= LoadFunctionCLib('OBJ_NAME_remove'); 60 | @OBJ_NAME_cleanup:= LoadFunctionCLib('OBJ_NAME_cleanup'); 61 | @OBJ_NAME_do_all:= LoadFunctionCLib('OBJ_NAME_do_all'); 62 | @OBJ_NAME_do_all_sorted:= LoadFunctionCLib('OBJ_NAME_do_all_sorted'); 63 | @OBJ_dup:= LoadFunctionCLib('OBJ_dup'); 64 | @OBJ_nid2obj:= LoadFunctionCLib('OBJ_nid2obj'); 65 | @OBJ_nid2ln:= LoadFunctionCLib('OBJ_nid2ln'); 66 | @OBJ_nid2sn:= LoadFunctionCLib('OBJ_nid2sn'); 67 | @OBJ_obj2nid:= LoadFunctionCLib('OBJ_obj2nid'); 68 | @OBJ_txt2obj:= LoadFunctionCLib('OBJ_txt2obj'); 69 | @OBJ_obj2txt:= LoadFunctionCLib('OBJ_obj2txt'); 70 | @OBJ_txt2nid:= LoadFunctionCLib('OBJ_txt2nid'); 71 | @OBJ_ln2nid:= LoadFunctionCLib('OBJ_ln2nid'); 72 | @OBJ_sn2nid:= LoadFunctionCLib('OBJ_sn2nid'); 73 | @OBJ_cmp:= LoadFunctionCLib('OBJ_cmp'); 74 | @OBJ_bsearch_:= LoadFunctionCLib('OBJ_bsearch_', false); 75 | @OBJ_bsearch_ex_:= LoadFunctionCLib('OBJ_bsearch_ex_', false); 76 | @OBJ_new_nid:= LoadFunctionCLib('OBJ_new_nid'); 77 | @OBJ_add_object:= LoadFunctionCLib('OBJ_add_object'); 78 | @OBJ_create:= LoadFunctionCLib('OBJ_create'); 79 | @OBJ_cleanup:= LoadFunctionCLib('OBJ_cleanup'); 80 | @OBJ_create_objects:= LoadFunctionCLib('OBJ_create_objects'); 81 | @OBJ_find_sigid_algs:= LoadFunctionCLib('OBJ_find_sigid_algs', false); 82 | @OBJ_find_sigid_by_algs:= LoadFunctionCLib('OBJ_find_sigid_by_algs', false); 83 | @OBJ_add_sigid:= LoadFunctionCLib('OBJ_add_sigid', false); 84 | @OBJ_sigid_free:= LoadFunctionCLib('OBJ_sigid_free', false); 85 | @check_defer:= LoadFunctionCLib('check_defer', false); 86 | @ERR_load_OBJ_strings:= LoadFunctionCLib('ERR_load_OBJ_strings'); 87 | 88 | end; 89 | end; 90 | 91 | end. -------------------------------------------------------------------------------- /ssl_pem.pas: -------------------------------------------------------------------------------- 1 | {$i ssl.inc} 2 | unit ssl_pem; 3 | 4 | interface 5 | uses ssl_types; 6 | 7 | var 8 | PEM_read_bio_PrivateKey: function(bp: PBIO; x: PPEVP_PKEY; cb: pem_password_cb; u: pointer): PEVP_PKEY; cdecl = nil; 9 | PEM_read_PrivateKey: function(var fp: FILE; x: PPEVP_PKEY; cb: pem_password_cb; u: pointer): PEVP_PKEY; cdecl = nil; 10 | PEM_write_bio_PrivateKey: function(bp: PBIO; x: PEVP_PKEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 11 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 12 | PEM_write_PrivateKey: function(var fp: FILE; x: PEVP_PKEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 13 | klen: TC_INT; cb: pem_password_cb; u: Pointer): TC_INT; cdecl = nil; 14 | 15 | PEM_write_bio_PKCS8PrivateKey: function(bp: PBIO; x: PEVP_PKEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 16 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 17 | PEM_write_PKCS8PrivateKey: function(var fp: FILE; x: PEVP_PKEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 18 | klen: TC_INT; cb: pem_password_cb; u: Pointer): TC_INT; cdecl = nil; 19 | 20 | PEM_write_bio_PKCS8PrivateKey_nid: function (bp: PBIO; x: PEVP_PKEY; nid: TC_INT; kstr: PAnsiChar; 21 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 22 | PEM_write_PKCS8PrivateKey_nid: function(var fp: FILE; x: PEVP_PKEY; nid: TC_INT; kstr: PAnsiChar; 23 | klen: TC_INT; cb: pem_password_cb; u: Pointer): TC_INT; cdecl = nil; 24 | 25 | PEM_read_bio_PUBKEY: function(bp: PBIO; x: PPEVP_PKEY; cb: pem_password_cb; u: pointer): PEVP_PKEY; cdecl = nil; 26 | PEM_read_PUBKEY: function (var fp: FILE; x: PPEVP_PKEY; cb: pem_password_cb; u: pointer): PEVP_PKEY; cdecl = nil; 27 | PEM_write_bio_PUBKEY: function (bp: PBIO; x: PEVP_PKEY): TC_INT; cdecl = nil; 28 | PEM_write_PUBKEY: function(var fp: FILE; x: PEVP_PKEY): TC_INT; cdecl = nil; 29 | 30 | PEM_read_bio_Parameters: function(bp: PBIO; x: PPEVP_PKEY): PEVP_PKEY; cdecl = nil; 31 | PEM_write_bio_Parameters: function(bp: PBIO; x: PEVP_PKEY): TC_INT; cdecl = nil; 32 | 33 | 34 | {$REGION 'RSA'} 35 | PEM_read_bio_RSAPrivateKey: function(bp: PBIO; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 36 | PEM_read_RSAPrivateKey: function(var fp: FILE; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 37 | PEM_write_bio_RSAPrivateKey: function(bp: PBIO; x: PRSA; enc: PEVP_CIPHER; kstr: PAnsiChar; 38 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 39 | PEM_write_RSAPrivateKey: function(var fp: FILE; x: PRSA; enc: PEVP_CIPHER; kstr: PAnsiChar; 40 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 41 | PEM_read_bio_RSAPublicKey:function(bp: PBIO; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 42 | PEM_read_RSAPublicKey: function(var fp: FILE; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 43 | PEM_write_bio_RSAPublicKey: function(bp: PBIO; x: PRSA): TC_INT; cdecl = nil; 44 | PEM_write_RSAPublicKey: function(var fp: FILE; x: PRSA): TC_INT; cdecl = nil; 45 | PEM_read_bio_RSA_PUBKEY:function(bp: PBIO; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 46 | PEM_read_RSA_PUBKEY: function(var fp: FILE; x: PPRSA; cb: pem_password_cb; u: pointer): PRSA; cdecl = nil; 47 | PEM_write_bio_RSA_PUBKEY: function(bp: PBIO; x: PRSA): TC_INT; cdecl = nil; 48 | PEM_write_RSA_PUBKEY: function(var fp: FILE; x: PRSA): TC_INT; cdecl = nil; 49 | {$ENDREGION} 50 | 51 | {$REGION 'DSA'} 52 | PEM_read_bio_DSAPrivateKey: function(bp: PBIO; x: PPDSA; cb: pem_password_cb; u: pointer): PDSA; cdecl = nil; 53 | PEM_read_DSAPrivateKey: function(var fp: FILE; x: PPDSA; cb: pem_password_cb; u: pointer): PDSA; cdecl = nil; 54 | PEM_write_bio_DSAPrivateKey:function(bp: PBIO; x: PDSA; enc: PEVP_CIPHER; kstr: PAnsiChar; 55 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 56 | PEM_write_DSAPrivateKey: function(var fp: FILE; x: PDSA; enc: PEVP_CIPHER; kstr: PAnsiChar; 57 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 58 | PEM_read_bio_DSA_PUBKEY: function(bp: PBIO; x: PPDSA; cb: pem_password_cb; u: pointer): PDSA; cdecl = nil; 59 | PEM_read_DSA_PUBKEY: function(var fp: FILE; x: PPDSA; cb: pem_password_cb; u: pointer): PDSA; cdecl = nil; 60 | PEM_write_bio_DSA_PUBKEY: function(bp: PBIO; x: PDSA): TC_INT; cdecl = nil; 61 | PEM_write_DSA_PUBKEY: function(var fp: FILE; x: PDSA): TC_INT; cdecl = nil; 62 | PEM_read_bio_DSAparams: function(bp: PBIO; x: PPDSA; cb: pem_password_cb; u: Pointer): PDSA; cdecl = nil; 63 | PEM_read_DSAparams: function(var fp: FILE; x: PPDSA; cb: pem_password_cb; u: pointer): PDSA; cdecl = nil; 64 | PEM_write_bio_DSAparams: function(bp: PBIO; x: PDSA): TC_INT; cdecl = nil; 65 | PEM_write_DSAparams: function(var fp: FILE; x: PDSA): TC_INT; cdecl = nil; 66 | {$ENDREGION} 67 | 68 | {$REGION 'DH'} 69 | PEM_read_bio_DHparams: function(bp: PBIO; x: PPDH; cb: pem_password_cb; u: pointer): PDH; cdecl = nil; 70 | PEM_read_DHparams: function(var fp: FILE; x: PPDH; cb: pem_password_cb; u: pointer): PDH; cdecl = nil; 71 | PEM_write_bio_DHparams: function(bp: PBIO; x: PDH): TC_INT; cdecl = nil; 72 | PEM_write_DHparams: function(var fp: FILE; x: PDH): TC_INT; cdecl = nil; 73 | {$ENDREGION} 74 | 75 | {$REGION 'X509'} 76 | PEM_read_bio_X509: function(bp: PBIO; x: PPX509; cb: pem_password_cb; u: pointer): PX509; cdecl = nil; 77 | PEM_read_X509: function(var fp: FILE; x: PPX509; cb: pem_password_cb; u: pointer): PX509; cdecl = nil; 78 | PEM_write_bio_X509: function(bp: PBIO; x: PX509): TC_INT; cdecl = nil; 79 | PEM_write_X509: function(var fp: FILE; x: PX509): TC_INT; cdecl = nil; 80 | 81 | PEM_read_bio_X509_AUX: function(bp: PBIO; x: PPX509; cb: pem_password_cb; u: pointer): PX509; cdecl = nil; 82 | PEM_read_X509_AUX: function(var fp: FILE; x: PPX509; cb: pem_password_cb; u: pointer): PX509; cdecl = nil; 83 | 84 | PEM_write_bio_X509_AUX: function(bp: PBIO; x: PX509): TC_INT; cdecl = nil; 85 | PEM_write_X509_AUX: function(var fp: FILE; x: PX509): TC_INT; cdecl = nil; 86 | 87 | PEM_read_bio_X509_REQ: function(bp: PBIO; x: PPX509_REQ; cb: pem_password_cb; u: pointer): PX509_REQ; cdecl = nil; 88 | PEM_read_X509_REQ: function(var fp: FILE; x: PPX509_REQ; cb: pem_password_cb; u: pointer): PX509_REQ; cdecl = nil; 89 | 90 | PEM_write_bio_X509_REQ: function(bp: PBIO; x: PX509_REQ): TC_INT; cdecl = nil; 91 | PEM_write_X509_REQ: function(var fp: FILE; x: PX509_REQ): TC_INT; cdecl = nil; 92 | 93 | PEM_write_bio_X509_REQ_NEW: function(bp: PBIO; x: PX509_REQ): TC_INT; cdecl = nil; 94 | PEM_write_X509_REQ_NEW: function(var fp: FILE; x: PX509_REQ): TC_INT; cdecl = nil; 95 | 96 | PEM_read_bio_X509_CRL: function(bp: PBIO; x: PPX509_CRL; cb: pem_password_cb; u: pointer): PX509_CRL; cdecl = nil; 97 | PEM_read_X509_CRL: function(var fp: FILE; x: PPX509_CRL; cb: pem_password_cb; u: pointer): PX509_CRL; cdecl = nil; 98 | 99 | PEM_write_bio_X509_CRL: function(bp: PBIO; x: PX509_CRL): TC_INT; cdecl = nil; 100 | PEM_write_X509_CRL: function(var fp: FILE; x: PX509_CRL): TC_INT; cdecl = nil; 101 | {$ENDREGION} 102 | 103 | {$REGION 'PKCS7} 104 | PEM_read_bio_PKCS7: function(bp: PBIO; x: PPPKCS7; cb: pem_password_cb; u: pointer): PPKCS7; cdecl = nil; 105 | PEM_read_PKCS7: function(var fp: FILE; x: PPPKCS7; cb: pem_password_cb; u: pointer): PPKCS7; cdecl = nil; 106 | PEM_write_bio_PKCS7: function(bp: PBIO; x: PPKCS7): TC_INT; cdecl = nil; 107 | PEM_write_PKCS7: function(var fp: FILE; x: PPKCS7): TC_INT; cdecl = nil; 108 | {$ENDREGION} 109 | 110 | {$REGION 'NETSCAPE'} 111 | PEM_read_bio_NETSCAPE_CERT_SEQUENCE: function(bp: PBIO; x: PPNETSCAPE_CERT_SEQUENCE; cb: pem_password_cb; u: pointer): PNETSCAPE_CERT_SEQUENCE; cdecl = nil; 112 | PEM_read_NETSCAPE_CERT_SEQUENCE: function(var fp: FILE; x: PPNETSCAPE_CERT_SEQUENCE; cb: pem_password_cb; u: pointer): PNETSCAPE_CERT_SEQUENCE; cdecl = nil; 113 | PEM_write_bio_NETSCAPE_CERT_SEQUENCE: function(bp: PBIO; x: PNETSCAPE_CERT_SEQUENCE): TC_INT; cdecl = nil; 114 | PEM_write_NETSCAPE_CERT_SEQUENCE: function(var fp: FILE; x: PNETSCAPE_CERT_SEQUENCE): TC_INT; cdecl = nil; 115 | {$ENDREGION} 116 | 117 | PEM_write_ECPrivateKey: function(var fp: FILE; x: PEC_KEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 118 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 119 | PEM_write_bio_ECPrivateKey: function(bp: PBIO; x: PEC_KEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 120 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 121 | 122 | i2d_PKCS8PrivateKey_bio: function(bp: PBIO; x: PEVP_PKEY; enc: PEVP_CIPHER; kstr: PAnsiChar; 123 | klen: TC_INT; cb: pem_password_cb; u: pointer): TC_INT; cdecl = nil; 124 | 125 | 126 | procedure SSL_InitPEM; 127 | 128 | implementation 129 | uses ssl_lib; 130 | 131 | procedure SSL_InitPEM; 132 | begin 133 | if @PEM_read_bio_PrivateKey = nil then 134 | begin 135 | @PEM_read_bio_PrivateKey:= LoadFunctionCLib('PEM_read_bio_PrivateKey'); 136 | @PEM_read_PrivateKey:= LoadFunctionCLib('PEM_read_PrivateKey'); 137 | @PEM_write_bio_PrivateKey := LoadFunctionCLib('PEM_write_bio_PrivateKey'); 138 | @PEM_write_PrivateKey:= LoadFunctionCLib('PEM_write_PrivateKey'); 139 | @PEM_write_bio_PKCS8PrivateKey:= LoadFunctionCLib('PEM_write_bio_PKCS8PrivateKey'); 140 | @PEM_write_PKCS8PrivateKey:= LoadFunctionCLib('PEM_write_PKCS8PrivateKey'); 141 | @PEM_write_bio_PKCS8PrivateKey_nid:= LoadFunctionCLib('PEM_write_bio_PKCS8PrivateKey_nid'); 142 | @PEM_write_PKCS8PrivateKey_nid:= LoadFunctionCLib('PEM_write_PKCS8PrivateKey_nid'); 143 | @PEM_read_bio_PUBKEY:= LoadFunctionCLib('PEM_read_bio_PUBKEY'); 144 | @PEM_read_PUBKEY:= LoadFunctionCLib('PEM_read_PUBKEY'); 145 | @PEM_write_bio_PUBKEY:= LoadFunctionCLib('PEM_write_bio_PUBKEY'); 146 | @PEM_write_PUBKEY:= LoadFunctionCLib('PEM_write_PUBKEY'); 147 | 148 | {$REGION 'RSA'} 149 | @PEM_read_bio_RSAPrivateKey:= LoadFunctionCLib('PEM_read_bio_RSAPrivateKey'); 150 | @PEM_read_RSAPrivateKey:= LoadFunctionCLib('PEM_read_RSAPrivateKey'); 151 | @PEM_write_bio_RSAPrivateKey:= LoadFunctionCLib('PEM_write_bio_RSAPrivateKey'); 152 | @PEM_write_RSAPrivateKey:= LoadFunctionCLib('PEM_write_RSAPrivateKey'); 153 | @PEM_read_bio_RSAPublicKey:= LoadFunctionCLib('PEM_read_bio_RSAPublicKey'); 154 | @PEM_read_RSAPublicKey:=LoadFunctionCLib('PEM_read_RSAPublicKey'); 155 | @PEM_write_bio_RSAPublicKey:= LoadFunctionCLib('PEM_write_bio_RSAPublicKey'); 156 | @PEM_write_RSAPublicKey:= LoadFunctionCLib('PEM_write_RSAPublicKey'); 157 | @PEM_read_bio_RSA_PUBKEY:= LoadFunctionCLib('PEM_read_bio_RSA_PUBKEY'); 158 | @PEM_read_RSA_PUBKEY:= LoadFunctionCLib('PEM_read_RSA_PUBKEY'); 159 | @PEM_write_bio_RSA_PUBKEY:= LoadFunctionCLib('PEM_write_bio_RSA_PUBKEY'); 160 | @PEM_write_RSA_PUBKEY:= LoadFunctionCLib('PEM_write_RSA_PUBKEY'); 161 | {$ENDREGION} 162 | 163 | {$REGION 'DSA'} 164 | @PEM_read_bio_DSAPrivateKey:= LoadFunctionCLib('PEM_write_RSA_PUBKEY'); 165 | @PEM_read_DSAPrivateKey:=LoadFunctionCLib('PEM_read_DSAPrivateKey'); 166 | @PEM_write_bio_DSAPrivateKey:= LoadFunctionCLib('PEM_write_bio_DSAPrivateKey'); 167 | @PEM_write_DSAPrivateKey:= LoadFunctionCLib('PEM_write_DSAPrivateKey'); 168 | @PEM_read_bio_DSA_PUBKEY:= LoadFunctionCLib('PEM_read_bio_DSA_PUBKEY'); 169 | @PEM_read_DSA_PUBKEY:= LoadFunctionCLib('PEM_read_DSA_PUBKEY'); 170 | @PEM_write_bio_DSA_PUBKEY:= LoadFunctionCLib('PEM_write_bio_DSA_PUBKEY'); 171 | @PEM_write_DSA_PUBKEY:= LoadFunctionCLib('PEM_write_DSA_PUBKEY'); 172 | @PEM_read_bio_DSAparams:= LoadFunctionCLib('PEM_read_bio_DSAparams'); 173 | @PEM_read_DSAparams := LoadFunctionCLib('PEM_read_DSAparams'); 174 | @PEM_write_bio_DSAparams:= LoadFunctionCLib('PEM_write_bio_DSAparams'); 175 | @PEM_write_DSAparams:= LoadFunctionCLib('PEM_write_DSAparams'); 176 | {$ENDREGION} 177 | 178 | {$REGION 'DH'} 179 | @PEM_read_bio_DHparams:= LoadFunctionCLib('PEM_read_bio_DHparams'); 180 | @PEM_read_DHparams:= LoadFunctionCLib('PEM_read_DHparams'); 181 | @PEM_write_bio_DHparams:=LoadFunctionCLib('PEM_write_bio_DHparams'); 182 | @PEM_write_DHparams:= LoadFunctionCLib('PEM_write_DHparams'); 183 | {$ENDREGION} 184 | 185 | {$REGION 'X509'} 186 | @PEM_read_bio_X509:= LoadFunctionCLib('PEM_read_bio_X509'); 187 | @PEM_read_X509:= LoadFunctionCLib('PEM_read_X509'); 188 | @PEM_write_bio_X509:= LoadFunctionCLib('PEM_write_bio_X509'); 189 | @PEM_write_X509:=LoadFunctionCLib('PEM_write_X509'); 190 | @PEM_read_bio_X509_AUX:= LoadFunctionCLib('PEM_read_bio_X509_AUX'); 191 | @PEM_read_X509_AUX:= LoadFunctionCLib('PEM_read_X509_AUX'); 192 | @PEM_write_bio_X509_AUX:= LoadFunctionCLib('PEM_write_bio_X509_AUX'); 193 | @PEM_write_X509_AUX:= LoadFunctionCLib('PEM_write_X509_AUX'); 194 | @PEM_read_bio_X509_REQ:= LoadFunctionCLib('PEM_read_bio_X509_REQ'); 195 | @PEM_read_X509_REQ:= LoadFunctionCLib('PEM_read_X509_REQ'); 196 | @PEM_write_bio_X509_REQ:= LoadFunctionCLib('PEM_write_bio_X509_REQ'); 197 | @PEM_write_X509_REQ:= LoadFunctionCLib('PEM_write_X509_REQ'); 198 | @PEM_write_bio_X509_REQ_NEW:= LoadFunctionCLib('PEM_write_bio_X509_REQ_NEW'); 199 | @PEM_write_X509_REQ_NEW:= LoadFunctionCLib('PEM_write_X509_REQ_NEW'); 200 | @PEM_read_bio_X509_CRL:= LoadFunctionCLib('PEM_read_bio_X509_CRL'); 201 | @PEM_read_X509_CRL:= LoadFunctionCLib('PEM_read_X509_CRL'); 202 | @PEM_write_bio_X509_CRL:= LoadFunctionCLib('PEM_write_bio_X509_CRL'); 203 | @PEM_write_X509_CRL:= LoadFunctionCLib('PEM_write_X509_CRL'); 204 | {$ENDREGION} 205 | 206 | {$REGION 'PKCS7} 207 | @PEM_read_bio_PKCS7:= LoadFunctionCLib('PEM_read_bio_PKCS7'); 208 | @PEM_read_PKCS7:= LoadFunctionCLib('PEM_read_PKCS7'); 209 | @PEM_write_bio_PKCS7:= LoadFunctionCLib('PEM_write_bio_PKCS7'); 210 | @PEM_write_PKCS7:= LoadFunctionCLib('PEM_write_PKCS7'); 211 | {$ENDREGION} 212 | 213 | {$REGION 'NETSCAPE'} 214 | @PEM_read_bio_NETSCAPE_CERT_SEQUENCE:= LoadFunctionCLib('PEM_read_bio_NETSCAPE_CERT_SEQUENCE'); 215 | @PEM_read_NETSCAPE_CERT_SEQUENCE:= LoadFunctionCLib('PEM_read_NETSCAPE_CERT_SEQUENCE'); 216 | @PEM_write_bio_NETSCAPE_CERT_SEQUENCE:= LoadFunctionCLib('PEM_write_bio_NETSCAPE_CERT_SEQUENCE'); 217 | @PEM_write_NETSCAPE_CERT_SEQUENCE:= LoadFunctionCLib('PEM_write_NETSCAPE_CERT_SEQUENCE'); 218 | {$ENDREGION} 219 | 220 | 221 | @PEM_write_ECPrivateKey := LoadFunctionCLib('PEM_write_ECPrivateKey'); 222 | @PEM_write_bio_ECPrivateKey := LoadFunctionCLib('PEM_write_bio_ECPrivateKey'); 223 | @i2d_PKCS8PrivateKey_bio := LoadFunctionCLib('i2d_PKCS8PrivateKey_bio'); 224 | @PEM_read_bio_Parameters:= LoadFunctionCLib('PEM_read_bio_Parameters'); 225 | @PEM_write_bio_Parameters:= LoadFunctionCLib('PEM_write_bio_Parameters'); 226 | 227 | end; 228 | end; 229 | 230 | end. -------------------------------------------------------------------------------- /ssl_pkcs12.pas: -------------------------------------------------------------------------------- 1 | unit ssl_pkcs12; 2 | interface 3 | uses ssl_types; 4 | var 5 | 6 | PKCS12_x5092certbag: function(x509: PX509): PPKCS12_SAFEBAG; cdecl = nil; 7 | PKCS12_x509crl2certbag: function(crl: PX509_CRL): PPKCS12_SAFEBAG; cdecl = nil; 8 | PKCS12_certbag2x509: function(bag: PPKCS12_SAFEBAG): PX509; cdecl = nil; 9 | PKCS12_certbag2x509crl: function(bag: PPKCS12_SAFEBAG): PX509_CRL; cdecl = nil; 10 | 11 | PKCS12_item_pack_safebag: function(obj: Pointer; const it: PASN1_ITEM; nid1: TC_INT;nid2: TC_INT): PPKCS12_SAFEBAG; cdecl = nil; 12 | PKCS12_MAKE_KEYBAG: function(p8: PPKCS8_PRIV_KEY_INFO): PPKCS12_SAFEBAG; cdecl = nil; 13 | PKCS8_decrypt: function(p8: PX509_SIG; const pass: PAnsiChar; passlen: TC_INT): PPKCS8_PRIV_KEY_INFO; cdecl = nil; 14 | PKCS12_decrypt_skey: function(bag: PPKCS12_SAFEBAG; const pass: PAnsiChar; passlen: TC_INT): PPKCS8_PRIV_KEY_INFO; cdecl = nil; 15 | PKCS8_encrypt: function(pbe_nid: TC_INT; const cipher: PEVP_CIPHER;const pass: PAnsiChar; passlen: TC_INT;salt: PAnsiChar; saltlen: TC_INT; iter: TC_INT;p8: PPKCS8_PRIV_KEY_INFO): PX509_SIG; cdecl = nil; 16 | PKCS12_MAKE_SHKEYBAG: function(pbe_nid: TC_INT; const pass: PAnsiChar;passlen: TC_INT; salt: PAnsiChar;saltlen: TC_INT; iter: TC_INT;p8: PPKCS8_PRIV_KEY_INFO): PPKCS12_SAFEBAG; cdecl = nil; 17 | PKCS12_pack_p7data: function(sk: PSTACK_OF_PKCS12_SAFEBAG): PPKCS7; cdecl = nil; 18 | PKCS12_unpack_p7data: function(p7: PPKCS7): PSTACK_OF_PKCS12_SAFEBAG; cdecl = nil; 19 | PKCS12_pack_p7encdata: function(pbe_nid: TC_INT; const pass: PAnsiChar; passlen: TC_INT;salt: PAnsiChar; saltlen: TC_INT; iter: TC_INT;bags: PSTACK_OF_PKCS12_SAFEBAG): PPKCS7; cdecl = nil; 20 | PKCS12_unpack_p7encdata: function(p7: PPKCS7; const pass: PAnsiChar; passlen: TC_INT): PSTACK_OF_PKCS12_SAFEBAG; cdecl = nil; 21 | 22 | PKCS12_pack_authsafes: function(p12: PPKCS12; safes: PSTACK_OF_PKCS7): TC_INT; cdecl = nil; 23 | PKCS12_unpack_authsafes: function(p12: PPKCS12): PSTACK_OF_PKCS7; cdecl = nil; 24 | 25 | PKCS12_add_localkeyid: function(bag: PPKCS12_SAFEBAG; _name: PAnsiChar; namelen: TC_INT): TC_INT; cdecl = nil; 26 | PKCS12_add_friendlyname_asc: function(bag: PPKCS12_SAFEBAG; const _name: PAnsiChar; namelen: TC_INT): TC_INT; cdecl = nil; 27 | PKCS12_add_CSPName_asc: function(bag: PPKCS12_SAFEBAG; const _name: PAnsiChar; namelen: TC_INT): TC_INT; cdecl = nil; 28 | PKCS12_add_friendlyname_uni: function(bag: PPKCS12_SAFEBAG; const _name: PAnsiChar; namelen: TC_INT): TC_INT; cdecl = nil; 29 | PKCS8_add_keyusage: function(p8: PPKCS8_PRIV_KEY_INFO; usage: TC_INT): TC_INT; cdecl = nil; 30 | PKCS12_get_attr_gen: function(attrs: PSTACK_OF_X509_ATTRIBUTE; attr_nid: TC_INT): PASN1_TYPE; cdecl = nil; 31 | PKCS12_get_friendlyname: function(bag: PPKCS12_SAFEBAG): PAnsiChar; cdecl = nil; 32 | PKCS12_pbe_crypt: function(_algor: PX509_ALGOR; const pass: PAnsiChar;_passlen: TC_INT; _in: PAnsiChar; _inlen: TC_INT; _data: PPAnsiChar; var _datalen: TC_INT; _en_de: TC_INT): PAnsiChar; cdecl = nil; 33 | PKCS12_item_decrypt_d2i: function(_algor: PX509_ALGOR; const _it: PASN1_ITEM;const pass: PAnsiChar; _passlen: TC_INT; _oct: PASN1_OCTET_STRING; _zbuf: TC_INT): Pointer; cdecl = nil; 34 | PKCS12_item_i2d_encrypt: function(_algor: PX509_ALGOR; const _it: PASN1_ITEM;const pass: PAnsiChar; _passlen: TC_INT;_obj: Pointer; _zbuf: TC_INT): PASN1_OCTET_STRING; cdecl = nil; 35 | PKCS12_init: function(_mode: TC_INT): PPKCS12; cdecl = nil; 36 | PKCS12_key_gen_asc: function(const pass: PAnsiChar; passlen: TC_INT; salt: PAnsiChar;saltlen: TC_INT; id: TC_INT; _iter: TC_INT; _n: TC_INT; _out: PAnsiChar; const _md_type: PEVP_MD): TC_INT; cdecl = nil; 37 | PKCS12_key_gen_uni: function(pass: PAnsiChar; _passlen: TC_INT; salt: PAnsiChar; _saltlen: TC_INT; _id: TC_INT; _iter: TC_INT; _n: TC_INT; _out: PAnsiChar; const _md_type: PEVP_MD): TC_INT; cdecl = nil; 38 | PKCS12_PBE_keyivgen: function(_ctx: PEVP_CIPHER_CTX; const pass: PAnsiChar; _passlen: TC_INT;_param: PASN1_TYPE; const cipher: PEVP_CIPHER; const _md_type: PEVP_MD;_en_de: TC_INT): TC_INT; cdecl = nil; 39 | PKCS12_gen_mac: function(_p12: PPKCS12; const pass: PAnsiChar; _passlen: TC_INT;_mac: PAnsiChar; var _maclen: TC_UINT): TC_INT; cdecl = nil; 40 | PKCS12_verify_mac: function(_p12: PPKCS12; const pass: PAnsiChar; _passlen: TC_INT): TC_INT; cdecl = nil; 41 | PKCS12_set_mac: function(_p12: PPKCS12; const pass: PAnsiChar; _passlen: TC_INT;salt: PAnsiChar; _saltlen: TC_INT; _iter: TC_INT;const _md_type: PEVP_MD): TC_INT; cdecl = nil; 42 | PKCS12_setup_mac: function(_p12: PPKCS12; _iter: TC_INT; salt: PAnsiChar;_saltlen: TC_INT; const _md_type: PEVP_MD): TC_INT; cdecl = nil; 43 | OPENSSL_asc2uni: function(const _asc: PAnsiChar; _asclen: TC_INT; _uni: PPAnsiChar; var _unilen: TC_INT): PAnsiChar; cdecl = nil; 44 | OPENSSL_uni2asc: function(_uni: PAnsiChar; _unilen: TC_INT): PAnsiChar; cdecl = nil; 45 | 46 | PKCS12_new: function: PPKCS12; cdecl = nil; 47 | PKCS12_free: procedure(a: PPKCS12); cdecl = nil; 48 | d2i_PKCS12: function(a: PPPKCS12; _in: PPAnsiChar; len: TC_LONG): PPKCS12; cdecl = nil; 49 | i2d_PKCS12: function(a: PPKCS12; _out: PPAnsiChar): TC_INT; cdecl = nil; 50 | PKCS12_it: function: PASN1_ITEM; cdecl = nil; 51 | PKCS12_MAC_DATA_new: function: PPKCS12_MAC_DATA; cdecl = nil; 52 | PKCS12_MAC_DATA_free: procedure(a: PPKCS12_MAC_DATA); cdecl = nil; 53 | d2i_PKCS12_MAC_DATA: function(a: PPPKCS12_MAC_DATA; _in: PPAnsiChar; len: TC_LONG): PPKCS12_MAC_DATA; cdecl = nil; 54 | i2d_PKCS12_MAC_DATA: function(a: PPKCS12_MAC_DATA; _out: PPAnsiChar): TC_INT; cdecl = nil; 55 | PKCS12_MAC_DATA_it: function: PASN1_ITEM; cdecl = nil; 56 | PKCS12_SAFEBAG_new: function: PPKCS12_SAFEBAG; cdecl = nil; 57 | PKCS12_SAFEBAG_free: procedure(a: PPKCS12_SAFEBAG); cdecl = nil; 58 | d2i_PKCS12_SAFEBAG: function(a: PPPKCS12_SAFEBAG; _in: PPAnsiChar; len: TC_LONG): PPKCS12_SAFEBAG; cdecl = nil; 59 | i2d_PKCS12_SAFEBAG: function(a: PPKCS12_SAFEBAG; _out: PPAnsiChar): TC_INT; cdecl = nil; 60 | PKCS12_SAFEBAG_it: function: PASN1_ITEM; cdecl = nil; 61 | PKCS12_BAGS_new: function: PPKCS12_BAGS; cdecl = nil; 62 | PKCS12_BAGS_free: procedure(a: PPKCS12_BAGS); cdecl = nil; 63 | d2i_PKCS12_BAGS: function(a: PPPKCS12_BAGS; _in: PPAnsiChar; len: TC_LONG): PPKCS12_BAGS; cdecl = nil; 64 | i2d_PKCS12_BAGS: function(a: PPKCS12_BAGS; _out: PPAnsiChar): TC_INT; cdecl = nil; 65 | PKCS12_BAGS_it: function: PASN1_ITEM; cdecl = nil; 66 | 67 | PKCS12_PBE_add: procedure; cdecl = nil; 68 | PKCS12_parse: function(_p12: PPKCS12; const pass: PAnsiChar; _pkey: PPEVP_PKEY; _cert: PPX509;ca: PPSTACK_OF_X509): TC_INT; cdecl = nil; 69 | PKCS12_create: function(pass: PAnsiChar; _name: PAnsiChar; _pkey: PEVP_PKEY; _cert: PX509;ca: PSTACK_OF_X509; _nid_key: TC_INT; _nid_cert: TC_INT; _iter: TC_INT;_mac_iter: TC_INT; _keytype: TC_INT): PPKCS12; cdecl = nil; 70 | 71 | PKCS12_add_cert: function(_pbags: PPSTACK_OF_PKCS12_SAFEBAG; _cert: PX509): PPKCS12_SAFEBAG; cdecl = nil; 72 | PKCS12_add_key: function(_pbags: PPSTACK_OF_PKCS12_SAFEBAG; _key: PEVP_PKEY;_key_usage: TC_INT; _iter: TC_INT;_key_nid: TC_INT; pass: PAnsiChar): PPKCS12_SAFEBAG; cdecl = nil; 73 | PKCS12_add_safe: function(_psafes: PPSTACK_OF_PKCS7; _bags: PSTACK_OF_PKCS12_SAFEBAG;_safe_nid: TC_INT; _iter: TC_INT; pass: PAnsiChar): TC_INT; cdecl = nil; 74 | PKCS12_add_safes: function(_safes: PSTACK_OF_PKCS7; _p7_nid: TC_INT): PPKCS12; cdecl = nil; 75 | 76 | i2d_PKCS12_bio: function(_bp: PBIO; _p12: PPKCS12): TC_INT; cdecl = nil; 77 | d2i_PKCS12_bio: function(_bp: PBIO; _p12: PPPKCS12): PPKCS12; cdecl = nil; 78 | PKCS12_newpass: function(_p12: PPKCS12; _oldpass: PAnsiChar; _newpass: PAnsiChar): TC_INT; cdecl = nil; 79 | 80 | ERR_load_PKCS12_strings: procedure; cdecl = nil; 81 | 82 | procedure SSL_InitPKCS12; 83 | 84 | implementation 85 | uses ssl_lib; 86 | 87 | procedure SSL_InitPKCS12; 88 | begin 89 | if @PKCS12_new = nil then 90 | begin 91 | @PKCS12_x5092certbag:= LoadFunctionCLib('PKCS12_x5092certbag'); 92 | @PKCS12_x509crl2certbag:= LoadFunctionCLib('PKCS12_x509crl2certbag'); 93 | @PKCS12_certbag2x509:= LoadFunctionCLib('PKCS12_certbag2x509'); 94 | @PKCS12_certbag2x509crl:= LoadFunctionCLib('PKCS12_certbag2x509crl'); 95 | @PKCS12_item_pack_safebag:= LoadFunctionCLib('PKCS12_item_pack_safebag'); 96 | @PKCS12_MAKE_KEYBAG:= LoadFunctionCLib('PKCS12_MAKE_KEYBAG'); 97 | @PKCS8_decrypt:= LoadFunctionCLib('PKCS8_decrypt'); 98 | @PKCS12_decrypt_skey:= LoadFunctionCLib('PKCS12_decrypt_skey'); 99 | @PKCS8_encrypt:= LoadFunctionCLib('PKCS8_encrypt'); 100 | @PKCS12_MAKE_SHKEYBAG:= LoadFunctionCLib('PKCS12_MAKE_SHKEYBAG'); 101 | @PKCS12_pack_p7data:= LoadFunctionCLib('PKCS12_pack_p7data'); 102 | @PKCS12_unpack_p7data:= LoadFunctionCLib('PKCS12_unpack_p7data'); 103 | @PKCS12_pack_p7encdata:= LoadFunctionCLib('PKCS12_pack_p7encdata'); 104 | @PKCS12_unpack_p7encdata:= LoadFunctionCLib('PKCS12_unpack_p7encdata'); 105 | @PKCS12_pack_authsafes:= LoadFunctionCLib('PKCS12_pack_authsafes'); 106 | @PKCS12_unpack_authsafes:= LoadFunctionCLib('PKCS12_unpack_authsafes'); 107 | @PKCS12_add_localkeyid:= LoadFunctionCLib('PKCS12_add_localkeyid'); 108 | @PKCS12_add_friendlyname_asc:= LoadFunctionCLib('PKCS12_add_friendlyname_asc'); 109 | @PKCS12_add_CSPName_asc:= LoadFunctionCLib('PKCS12_add_CSPName_asc'); 110 | @PKCS12_add_friendlyname_uni:= LoadFunctionCLib('PKCS12_add_friendlyname_uni'); 111 | @PKCS8_add_keyusage:= LoadFunctionCLib('PKCS8_add_keyusage'); 112 | @PKCS12_get_attr_gen:= LoadFunctionCLib('PKCS12_get_attr_gen'); 113 | @PKCS12_get_friendlyname:= LoadFunctionCLib('PKCS12_get_friendlyname'); 114 | @PKCS12_pbe_crypt:= LoadFunctionCLib('PKCS12_pbe_crypt'); 115 | @PKCS12_item_decrypt_d2i:= LoadFunctionCLib('PKCS12_item_decrypt_d2i'); 116 | @PKCS12_item_i2d_encrypt:= LoadFunctionCLib('PKCS12_item_i2d_encrypt'); 117 | @PKCS12_init:= LoadFunctionCLib('PKCS12_init'); 118 | @PKCS12_key_gen_asc:= LoadFunctionCLib('PKCS12_key_gen_asc'); 119 | @PKCS12_key_gen_uni:= LoadFunctionCLib('PKCS12_key_gen_uni'); 120 | @PKCS12_PBE_keyivgen:= LoadFunctionCLib('PKCS12_PBE_keyivgen'); 121 | @PKCS12_gen_mac:= LoadFunctionCLib('PKCS12_gen_mac'); 122 | @PKCS12_verify_mac:= LoadFunctionCLib('PKCS12_verify_mac'); 123 | @PKCS12_set_mac:= LoadFunctionCLib('PKCS12_set_mac'); 124 | @PKCS12_setup_mac:= LoadFunctionCLib('PKCS12_setup_mac'); 125 | @OPENSSL_asc2uni:= LoadFunctionCLib('OPENSSL_asc2uni'); 126 | @OPENSSL_uni2asc:= LoadFunctionCLib('OPENSSL_uni2asc'); 127 | @PKCS12_new:= LoadFunctionCLib('PKCS12_new'); 128 | @PKCS12_free:= LoadFunctionCLib('PKCS12_free'); 129 | @d2i_PKCS12:= LoadFunctionCLib('d2i_PKCS12'); 130 | @i2d_PKCS12:= LoadFunctionCLib('i2d_PKCS12'); 131 | @PKCS12_it:= LoadFunctionCLib('PKCS12_it'); 132 | @PKCS12_MAC_DATA_new:= LoadFunctionCLib('PKCS12_MAC_DATA_new'); 133 | @PKCS12_MAC_DATA_free:= LoadFunctionCLib('PKCS12_MAC_DATA_free'); 134 | @d2i_PKCS12_MAC_DATA:= LoadFunctionCLib('d2i_PKCS12_MAC_DATA'); 135 | @i2d_PKCS12_MAC_DATA:= LoadFunctionCLib('i2d_PKCS12_MAC_DATA'); 136 | @PKCS12_MAC_DATA_it:= LoadFunctionCLib('PKCS12_MAC_DATA_it'); 137 | @PKCS12_SAFEBAG_new:= LoadFunctionCLib('PKCS12_SAFEBAG_new'); 138 | @PKCS12_SAFEBAG_free:= LoadFunctionCLib('PKCS12_SAFEBAG_free'); 139 | @d2i_PKCS12_SAFEBAG:= LoadFunctionCLib('d2i_PKCS12_SAFEBAG'); 140 | @i2d_PKCS12_SAFEBAG:= LoadFunctionCLib('i2d_PKCS12_SAFEBAG'); 141 | @PKCS12_SAFEBAG_it:= LoadFunctionCLib('PKCS12_SAFEBAG_it'); 142 | @PKCS12_BAGS_new:= LoadFunctionCLib('PKCS12_BAGS_new'); 143 | @PKCS12_BAGS_free:= LoadFunctionCLib('PKCS12_BAGS_free'); 144 | @d2i_PKCS12_BAGS:= LoadFunctionCLib('d2i_PKCS12_BAGS'); 145 | @i2d_PKCS12_BAGS:= LoadFunctionCLib('i2d_PKCS12_BAGS'); 146 | @PKCS12_BAGS_it:= LoadFunctionCLib('PKCS12_BAGS_it'); 147 | @PKCS12_PBE_add:= LoadFunctionCLib('PKCS12_PBE_add'); 148 | @PKCS12_parse:= LoadFunctionCLib('PKCS12_parse'); 149 | @PKCS12_create:= LoadFunctionCLib('PKCS12_create'); 150 | @PKCS12_add_cert:= LoadFunctionCLib('PKCS12_add_cert'); 151 | @PKCS12_add_key:= LoadFunctionCLib('PKCS12_add_key'); 152 | @PKCS12_add_safe:= LoadFunctionCLib('PKCS12_add_safe'); 153 | @PKCS12_add_safes:= LoadFunctionCLib('PKCS12_add_safes'); 154 | @i2d_PKCS12_bio:= LoadFunctionCLib('i2d_PKCS12_bio'); 155 | @d2i_PKCS12_bio:= LoadFunctionCLib('d2i_PKCS12_bio'); 156 | @PKCS12_newpass:= LoadFunctionCLib('PKCS12_newpass'); 157 | @ERR_load_PKCS12_strings:= LoadFunctionCLib('ERR_load_PKCS12_strings'); 158 | 159 | end; 160 | end; 161 | 162 | end. 163 | -------------------------------------------------------------------------------- /ssl_pkcs7.pas: -------------------------------------------------------------------------------- 1 | {$i ssl.inc} 2 | unit ssl_pkcs7; 3 | interface 4 | uses ssl_types; 5 | var 6 | PKCS7_ISSUER_AND_SERIAL_new: function: PPKCS7_ISSUER_AND_SERIAL; cdecl = nil; 7 | PKCS7_ISSUER_AND_SERIAL_free: procedure(a: PPKCS7_ISSUER_AND_SERIAL); cdecl = nil; 8 | d2i_PKCS7_ISSUER_AND_SERIAL: function(a: PPPKCS7_ISSUER_AND_SERIAL; _in: PPAnsiChar; len: TC_LONG): PPKCS7_ISSUER_AND_SERIAL; cdecl = nil; 9 | i2d_PKCS7_ISSUER_AND_SERIAL: function(a: PPKCS7_ISSUER_AND_SERIAL; _out: PPAnsiChar): TC_INT; cdecl = nil; 10 | PKCS7_ISSUER_AND_SERIAL_it: function: PASN1_ITEM; cdecl = nil; 11 | 12 | PKCS7_ISSUER_AND_SERIAL_digest: function(_data: PPKCS7_ISSUER_AND_SERIAL;const _type: PEVP_MD;_md: PAnsiChar; var _len: TC_UINT): TC_INT; cdecl = nil; 13 | PKCS7_dup: function(_p7: PPKCS7): PPKCS7; cdecl = nil; 14 | d2i_PKCS7_bio: function(_bp: PBIO;_p7: PPPKCS7): PPKCS7; cdecl = nil; 15 | i2d_PKCS7_bio: function(_bp: PBIO; _p7: PPKCS7): TC_INT; cdecl = nil; 16 | i2d_PKCS7_bio_stream: function(_out: PBIO; _p7: PPKCS7; _in: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 17 | PEM_write_bio_PKCS7_stream: function(_out: PBIO; _p7: PPKCS7; _in: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 18 | 19 | PKCS7_SIGNER_INFO_new: function: PPKCS7_SIGNER_INFO; cdecl = nil; 20 | PKCS7_SIGNER_INFO_free: procedure(a: PPKCS7_SIGNER_INFO); cdecl = nil; 21 | d2i_PKCS7_SIGNER_INFO: function(a: PPPKCS7_SIGNER_INFO; _in: PPAnsiChar; len: TC_LONG): PPKCS7_SIGNER_INFO; cdecl = nil; 22 | i2d_PKCS7_SIGNER_INFO: function(a: PPKCS7_SIGNER_INFO; _out: PPAnsiChar): TC_INT; cdecl = nil; 23 | PKCS7_SIGNER_INFO_it: function: PASN1_ITEM; cdecl = nil; 24 | PKCS7_RECIP_INFO_new: function: PPKCS7_RECIP_INFO; cdecl = nil; 25 | PKCS7_RECIP_INFO_free: procedure(a: PPKCS7_RECIP_INFO); cdecl = nil; 26 | d2i_PKCS7_RECIP_INFO: function(a: PPPKCS7_RECIP_INFO; _in: PPAnsiChar; len: TC_LONG): PPKCS7_RECIP_INFO; cdecl = nil; 27 | i2d_PKCS7_RECIP_INFO: function(a: PPKCS7_RECIP_INFO; _out: PPAnsiChar): TC_INT; cdecl = nil; 28 | PKCS7_RECIP_INFO_it: function: PASN1_ITEM; cdecl = nil; 29 | PKCS7_SIGNED_new: function: PPKCS7_SIGNED; cdecl = nil; 30 | PKCS7_SIGNED_free: procedure(a: PPKCS7_SIGNED); cdecl = nil; 31 | d2i_PKCS7_SIGNED: function(a: PPPKCS7_SIGNED; _in: PPAnsiChar; len: TC_LONG): PPKCS7_SIGNED; cdecl = nil; 32 | i2d_PKCS7_SIGNED: function(a: PPKCS7_SIGNED; _out: PPAnsiChar): TC_INT; cdecl = nil; 33 | PKCS7_SIGNED_it: function: PASN1_ITEM; cdecl = nil; 34 | PKCS7_ENC_CONTENT_new: function: PPKCS7_ENC_CONTENT; cdecl = nil; 35 | PKCS7_ENC_CONTENT_free: procedure(a: PPKCS7_ENC_CONTENT); cdecl = nil; 36 | d2i_PKCS7_ENC_CONTENT: function(a: PPPKCS7_ENC_CONTENT; _in: PPAnsiChar; len: TC_LONG): PPKCS7_ENC_CONTENT; cdecl = nil; 37 | i2d_PKCS7_ENC_CONTENT: function(a: PPKCS7_ENC_CONTENT; _out: PPAnsiChar): TC_INT; cdecl = nil; 38 | PKCS7_ENC_CONTENT_it: function: PASN1_ITEM; cdecl = nil; 39 | PKCS7_ENVELOPE_new: function: PPKCS7_ENVELOPE; cdecl = nil; 40 | PKCS7_ENVELOPE_free: procedure(a: PPKCS7_ENVELOPE); cdecl = nil; 41 | d2i_PKCS7_ENVELOPE: function(a: PPPKCS7_ENVELOPE; _in: PPAnsiChar; len: TC_LONG): PPKCS7_ENVELOPE; cdecl = nil; 42 | i2d_PKCS7_ENVELOPE: function(a: PPKCS7_ENVELOPE; _out: PPAnsiChar): TC_INT; cdecl = nil; 43 | PKCS7_ENVELOPE_it: function: PASN1_ITEM; cdecl = nil; 44 | PKCS7_SIGN_ENVELOPE_new: function: PPKCS7_SIGN_ENVELOPE; cdecl = nil; 45 | PKCS7_SIGN_ENVELOPE_free: procedure(a: PPKCS7_SIGN_ENVELOPE); cdecl = nil; 46 | d2i_PKCS7_SIGN_ENVELOPE: function(a: PPPKCS7_SIGN_ENVELOPE; _in: PPAnsiChar; len: TC_LONG): PPKCS7_SIGN_ENVELOPE; cdecl = nil; 47 | i2d_PKCS7_SIGN_ENVELOPE: function(a: PPKCS7_SIGN_ENVELOPE; _out: PPAnsiChar): TC_INT; cdecl = nil; 48 | PKCS7_SIGN_ENVELOPE_it: function: PASN1_ITEM; cdecl = nil; 49 | PKCS7_DIGEST_new: function: PPKCS7_DIGEST; cdecl = nil; 50 | PKCS7_DIGEST_free: procedure(a: PPKCS7_DIGEST); cdecl = nil; 51 | d2i_PKCS7_DIGEST: function(a: PPPKCS7_DIGEST; _in: PPAnsiChar; len: TC_LONG): PPKCS7_DIGEST; cdecl = nil; 52 | i2d_PKCS7_DIGEST: function(a: PPKCS7_DIGEST; _out: PPAnsiChar): TC_INT; cdecl = nil; 53 | PKCS7_DIGEST_it: function: PASN1_ITEM; cdecl = nil; 54 | PKCS7_ENCRYPT_new: function: PPKCS7_ENCRYPT; cdecl = nil; 55 | PKCS7_ENCRYPT_free: procedure(a: PPKCS7_ENCRYPT); cdecl = nil; 56 | d2i_PKCS7_ENCRYPT: function(a: PPPKCS7_ENCRYPT; _in: PPAnsiChar; len: TC_LONG): PPKCS7_ENCRYPT; cdecl = nil; 57 | i2d_PKCS7_ENCRYPT: function(a: PPKCS7_ENCRYPT; _out: PPAnsiChar): TC_INT; cdecl = nil; 58 | PKCS7_ENCRYPT_it: function: PASN1_ITEM; cdecl = nil; 59 | PKCS7_new: function: PPKCS7; cdecl = nil; 60 | PKCS7_free: procedure(a: PPKCS7); cdecl = nil; 61 | d2i_PKCS7: function(a: PPPKCS7; _in: PPAnsiChar; len: TC_LONG): PPKCS7; cdecl = nil; 62 | i2d_PKCS7: function(a: PPKCS7; _out: PPAnsiChar): TC_INT; cdecl = nil; 63 | PKCS7_it: function: PASN1_ITEM; cdecl = nil; 64 | PKCS7_ATTR_SIGN_it: function: PASN1_ITEM; cdecl = nil; 65 | PKCS7_ATTR_VERIFY_it: function: PASN1_ITEM; cdecl = nil; 66 | 67 | PKCS7_ctrl: function(_p7: PPKCS7; _cmd: TC_INT; _larg: TC_LONG; _parg: PAnsiChar): TC_LONG; cdecl = nil; 68 | 69 | PKCS7_set_type: function(_p7: PPKCS7; _type: TC_INT): TC_INT; cdecl = nil; 70 | PKCS7_set0_type_other: function(_p7: PPKCS7; _type: TC_INT; _other: PASN1_TYPE): TC_INT; cdecl = nil; 71 | PKCS7_set_content: function(_p7: PPKCS7; _p7_data: PPKCS7): TC_INT; cdecl = nil; 72 | PKCS7_SIGNER_INFO_set: function(_p7i: PPKCS7_SIGNER_INFO; _x509: PX509; _pkey: PEVP_PKEY;const _dgst: PEVP_MD): TC_INT; cdecl = nil; 73 | PKCS7_SIGNER_INFO_sign: function(_si: PPKCS7_SIGNER_INFO): TC_INT; cdecl = nil; 74 | PKCS7_add_signer: function(_p7: PPKCS7; _p7i: PPKCS7_SIGNER_INFO): TC_INT; cdecl = nil; 75 | PKCS7_add_certificate: function(_p7: PPKCS7; _x509: PX509): TC_INT; cdecl = nil; 76 | PKCS7_add_crl: function(_p7: Pointer; _x509: PX509_CRL): TC_INT; cdecl = nil; 77 | PKCS7_content_new: function(_p7: PPKCS7; _nid: TC_INT): TC_INT; cdecl = nil; 78 | PKCS7_dataVerify: function(_cert_store: PX509_STORE; _ctx: PX509_STORE_CTX;_bio: PBIO; _p7: PPKCS7; _si: PPKCS7_SIGNER_INFO): TC_INT; cdecl = nil; 79 | PKCS7_signatureVerify: function(_bio: PBIO; _p7: PPKCS7; _si: PPKCS7_SIGNER_INFO; _x509: PX509): TC_INT; cdecl = nil; 80 | 81 | PKCS7_dataInit: function(_p7: PPKCS7; _bio: PBIO): PBIO; cdecl = nil; 82 | PKCS7_dataFinal: function(_p7: PPKCS7; _bio: PBIO): TC_INT; cdecl = nil; 83 | PKCS7_dataDecode: function(_p7: PPKCS7; _pkey: PEVP_PKEY; _in_bio: PBIO; _pcert: PX509): PBIO; cdecl = nil; 84 | 85 | PKCS7_add_signature: function(_p7: PPKCS7; _x509: PX509; _pkey: PEVP_PKEY; const _dgst: PEVP_MD): PPKCS7_SIGNER_INFO; cdecl = nil; 86 | PKCS7_cert_from_signer_info: function(_p7: PPKCS7; _si: PPKCS7_SIGNER_INFO): PX509; cdecl = nil; 87 | PKCS7_set_digest: function(_p7: PPKCS7; const _md: PEVP_MD): TC_INT; cdecl = nil; 88 | PKCS7_get_signer_info: function(_p7: PPKCS7): PSTACK_OF_PKCS7_SIGNER_INFO; cdecl = nil; 89 | 90 | PKCS7_add_recipient: function(_p7: PPKCS7; _x509: PX509): PPKCS7_RECIP_INFO; cdecl = nil; 91 | PKCS7_SIGNER_INFO_get0_algs: procedure(_si: PPKCS7_SIGNER_INFO; _pk: PPEVP_PKEY; _pdig: PPX509_ALGOR; _psig: PPX509_ALGOR); cdecl = nil; 92 | PKCS7_RECIP_INFO_get0_alg: procedure(_ri: PPKCS7_RECIP_INFO; _penc: PPX509_ALGOR); cdecl = nil; 93 | PKCS7_add_recipient_info: function(_p7: PPKCS7; _ri: PPKCS7_RECIP_INFO): TC_INT; cdecl = nil; 94 | PKCS7_RECIP_INFO_set: function(_p7i: PPKCS7_RECIP_INFO; _x509: PX509): TC_INT; cdecl = nil; 95 | PKCS7_set_cipher: function(_p7: PPKCS7; const _cipher: PEVP_CIPHER): TC_INT; cdecl = nil; 96 | //PKCS7_stream: function(unsigned char ***boundary; _p7: PPKCS7): TC_INT; cdecl = nil; 97 | 98 | PKCS7_get_issuer_and_serial: function(_p7: PPKCS7; _idx: TC_INT): Pointer; cdecl = nil; 99 | PKCS7_digest_from_attributes: function( _sk: PSTACK_OF_X509_ATTRIBUTE): Pointer; cdecl = nil; 100 | PKCS7_add_signed_attribute: function(_p7si: PPKCS7_SIGNER_INFO;_nid: TC_INT;_type: TC_INT;_data: Pointer): TC_INT; cdecl = nil; 101 | PKCS7_add_attribute : function(_p7si: PPKCS7_SIGNER_INFO; _nid: TC_INT; _atrtype: TC_INT;_value: Pointer): TC_INT; cdecl = nil; 102 | PKCS7_get_attribute: function(_si: PPKCS7_SIGNER_INFO; _nid: TC_INT): PASN1_TYPE; cdecl = nil; 103 | PKCS7_get_signed_attribute: function(_si: PPKCS7_SIGNER_INFO; _nid: TC_INT): PASN1_TYPE; cdecl = nil; 104 | PKCS7_set_signed_attributes: function(_p7si: PPKCS7_SIGNER_INFO; _sk: PSTACK_OF_X509_ATTRIBUTE): TC_INT; cdecl = nil; 105 | PKCS7_set_attributes: function(_p7si: PPKCS7_SIGNER_INFO; _sk: PSTACK_OF_X509_ATTRIBUTE): TC_INT; cdecl = nil; 106 | 107 | PKCS7_sign: function(_signcert: PX509; _pkey: PEVP_PKEY; _certs: PSTACK_OF_X509;_data: PBIO; _flags: TC_INT): PPKCS7; cdecl = nil; 108 | 109 | PKCS7_sign_add_signer: function(_p7: PPKCS7;_signcert: PX509; _pkey: PEVP_PKEY; const _md: PEVP_MD;_flags: TC_INT): PPKCS7_SIGNER_INFO; cdecl = nil; 110 | 111 | PKCS7_final: function(_p7: PPKCS7; _data: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 112 | PKCS7_verify: function(_p7: PPKCS7; _certs: PSTACK_OF_X509; _store: PX509_STORE;_indata: PBIO; _out: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 113 | PKCS7_get0_signers: function(_p7: PPKCS7; _certs: PSTACK_OF_X509; _flags: TC_INT): PSTACK_OF_X509; cdecl = nil; 114 | PKCS7_encrypt: function( _certs: PSTACK_OF_X509; _in: PBIO; const _cipher: PEVP_CIPHER;_flags: TC_INT): PPKCS7; cdecl = nil; 115 | PKCS7_decrypt: function(_p7: PPKCS7; _pkey: PEVP_PKEY; _cert: PX509; _data: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 116 | 117 | PKCS7_add_attrib_smimecap: function(_si: PPKCS7_SIGNER_INFO; _cap: PSTACK_OF_X509_ALGOR): TC_INT; cdecl = nil; 118 | PKCS7_get_smimecap: function(si: PPKCS7_SIGNER_INFO): PSTACK_OF_X509_ALGOR; cdecl = nil; 119 | PKCS7_simple_smimecap: function( _sk: PSTACK_OF_X509_ALGOR; _nid: TC_INT; _arg: TC_INT): TC_INT; cdecl = nil; 120 | 121 | PKCS7_add_attrib_content_type: function(_si: PPKCS7_SIGNER_INFO; _coid: PASN1_OBJECT): TC_INT; cdecl = nil; 122 | PKCS7_add0_attrib_signing_time: function(_si: PPKCS7_SIGNER_INFO; _t: PASN1_TIME): TC_INT; cdecl = nil; 123 | PKCS7_add1_attrib_digest: function(_si: PPKCS7_SIGNER_INFO;const _md: PAnsiChar; _mdlen: TC_INT): TC_INT; cdecl = nil; 124 | 125 | SMIME_write_PKCS7: function(_bio: PBIO; _p7: PPKCS7; _data: PBIO; _flags: TC_INT): TC_INT; cdecl = nil; 126 | SMIME_read_PKCS7: function(_bio: PBIO; _bcont: PPBIO): PPKCS7; cdecl = nil; 127 | 128 | BIO_new_PKCS7: function(_out: PBIO; _p7: PPKCS7): PBIO; cdecl = nil; 129 | 130 | ERR_load_PKCS7_strings: procedure; cdecl = nil; 131 | 132 | procedure SSL_InitPKCS7; 133 | 134 | implementation 135 | uses ssl_lib; 136 | 137 | procedure SSL_InitPKCS7; 138 | begin 139 | if @PKCS7_new = nil then 140 | begin 141 | @PKCS7_ISSUER_AND_SERIAL_new:= LoadFunctionCLib('PKCS7_ISSUER_AND_SERIAL_new'); 142 | @PKCS7_ISSUER_AND_SERIAL_free:= LoadFunctionCLib('PKCS7_ISSUER_AND_SERIAL_free'); 143 | @d2i_PKCS7_ISSUER_AND_SERIAL:= LoadFunctionCLib('d2i_PKCS7_ISSUER_AND_SERIAL'); 144 | @i2d_PKCS7_ISSUER_AND_SERIAL:= LoadFunctionCLib('i2d_PKCS7_ISSUER_AND_SERIAL'); 145 | @PKCS7_ISSUER_AND_SERIAL_it:= LoadFunctionCLib('PKCS7_ISSUER_AND_SERIAL_it'); 146 | @PKCS7_ISSUER_AND_SERIAL_digest:= LoadFunctionCLib('PKCS7_ISSUER_AND_SERIAL_digest'); 147 | @PKCS7_dup:= LoadFunctionCLib('PKCS7_dup'); 148 | @d2i_PKCS7_bio:= LoadFunctionCLib('d2i_PKCS7_bio'); 149 | @i2d_PKCS7_bio:= LoadFunctionCLib('i2d_PKCS7_bio'); 150 | @i2d_PKCS7_bio_stream:= LoadFunctionCLib('i2d_PKCS7_bio_stream'); 151 | @PEM_write_bio_PKCS7_stream:= LoadFunctionCLib('PEM_write_bio_PKCS7_stream'); 152 | @PKCS7_SIGNER_INFO_new:= LoadFunctionCLib('PKCS7_SIGNER_INFO_new'); 153 | @PKCS7_SIGNER_INFO_free:= LoadFunctionCLib('PKCS7_SIGNER_INFO_free'); 154 | @d2i_PKCS7_SIGNER_INFO:= LoadFunctionCLib('d2i_PKCS7_SIGNER_INFO'); 155 | @i2d_PKCS7_SIGNER_INFO:= LoadFunctionCLib('i2d_PKCS7_SIGNER_INFO'); 156 | @PKCS7_SIGNER_INFO_it:= LoadFunctionCLib('PKCS7_SIGNER_INFO_it'); 157 | @PKCS7_RECIP_INFO_new:= LoadFunctionCLib('PKCS7_RECIP_INFO_new'); 158 | @PKCS7_RECIP_INFO_free:= LoadFunctionCLib('PKCS7_RECIP_INFO_free'); 159 | @d2i_PKCS7_RECIP_INFO:= LoadFunctionCLib('d2i_PKCS7_RECIP_INFO'); 160 | @i2d_PKCS7_RECIP_INFO:= LoadFunctionCLib('i2d_PKCS7_RECIP_INFO'); 161 | @PKCS7_RECIP_INFO_it:= LoadFunctionCLib('PKCS7_RECIP_INFO_it'); 162 | @PKCS7_SIGNED_new:= LoadFunctionCLib('PKCS7_SIGNED_new'); 163 | @PKCS7_SIGNED_free:= LoadFunctionCLib('PKCS7_SIGNED_free'); 164 | @d2i_PKCS7_SIGNED:= LoadFunctionCLib('d2i_PKCS7_SIGNED'); 165 | @i2d_PKCS7_SIGNED:= LoadFunctionCLib('i2d_PKCS7_SIGNED'); 166 | @PKCS7_SIGNED_it:= LoadFunctionCLib('PKCS7_SIGNED_it'); 167 | @PKCS7_ENC_CONTENT_new:= LoadFunctionCLib('PKCS7_ENC_CONTENT_new'); 168 | @PKCS7_ENC_CONTENT_free:= LoadFunctionCLib('PKCS7_ENC_CONTENT_free'); 169 | @d2i_PKCS7_ENC_CONTENT:= LoadFunctionCLib('d2i_PKCS7_ENC_CONTENT'); 170 | @i2d_PKCS7_ENC_CONTENT:= LoadFunctionCLib('i2d_PKCS7_ENC_CONTENT'); 171 | @PKCS7_ENC_CONTENT_it:= LoadFunctionCLib('PKCS7_ENC_CONTENT_it'); 172 | @PKCS7_ENVELOPE_new:= LoadFunctionCLib('PKCS7_ENVELOPE_new'); 173 | @PKCS7_ENVELOPE_free:= LoadFunctionCLib('PKCS7_ENVELOPE_free'); 174 | @d2i_PKCS7_ENVELOPE:= LoadFunctionCLib('d2i_PKCS7_ENVELOPE'); 175 | @i2d_PKCS7_ENVELOPE:= LoadFunctionCLib('i2d_PKCS7_ENVELOPE'); 176 | @PKCS7_ENVELOPE_it:= LoadFunctionCLib('PKCS7_ENVELOPE_it'); 177 | @PKCS7_SIGN_ENVELOPE_new:= LoadFunctionCLib('PKCS7_SIGN_ENVELOPE_new'); 178 | @PKCS7_SIGN_ENVELOPE_free:= LoadFunctionCLib('PKCS7_SIGN_ENVELOPE_free'); 179 | @d2i_PKCS7_SIGN_ENVELOPE:= LoadFunctionCLib('d2i_PKCS7_SIGN_ENVELOPE'); 180 | @i2d_PKCS7_SIGN_ENVELOPE:= LoadFunctionCLib('i2d_PKCS7_SIGN_ENVELOPE'); 181 | @PKCS7_SIGN_ENVELOPE_it:= LoadFunctionCLib('PKCS7_SIGN_ENVELOPE_it'); 182 | @PKCS7_DIGEST_new:= LoadFunctionCLib('PKCS7_DIGEST_new'); 183 | @PKCS7_DIGEST_free:= LoadFunctionCLib('PKCS7_DIGEST_free'); 184 | @d2i_PKCS7_DIGEST:= LoadFunctionCLib('d2i_PKCS7_DIGEST'); 185 | @i2d_PKCS7_DIGEST:= LoadFunctionCLib('i2d_PKCS7_DIGEST'); 186 | @PKCS7_DIGEST_it:= LoadFunctionCLib('PKCS7_DIGEST_it'); 187 | @PKCS7_ENCRYPT_new:= LoadFunctionCLib('PKCS7_ENCRYPT_new'); 188 | @PKCS7_ENCRYPT_free:= LoadFunctionCLib('PKCS7_ENCRYPT_free'); 189 | @d2i_PKCS7_ENCRYPT:= LoadFunctionCLib('d2i_PKCS7_ENCRYPT'); 190 | @i2d_PKCS7_ENCRYPT:= LoadFunctionCLib('i2d_PKCS7_ENCRYPT'); 191 | @PKCS7_ENCRYPT_it:= LoadFunctionCLib('PKCS7_ENCRYPT_it'); 192 | @PKCS7_new:= LoadFunctionCLib('PKCS7_new'); 193 | @PKCS7_free:= LoadFunctionCLib('PKCS7_free'); 194 | @d2i_PKCS7:= LoadFunctionCLib('d2i_PKCS7'); 195 | @i2d_PKCS7:= LoadFunctionCLib('i2d_PKCS7'); 196 | @PKCS7_it:= LoadFunctionCLib('PKCS7_it'); 197 | 198 | @PKCS7_ATTR_SIGN_it:= LoadFunctionCLib('PKCS7_ATTR_SIGN_it'); 199 | @PKCS7_ATTR_VERIFY_it:= LoadFunctionCLib('PKCS7_ATTR_VERIFY_it'); 200 | @PKCS7_ctrl:= LoadFunctionCLib('PKCS7_ctrl'); 201 | @PKCS7_set_type:= LoadFunctionCLib('PKCS7_set_type'); 202 | @PKCS7_set0_type_other:= LoadFunctionCLib('PKCS7_set0_type_other'); 203 | @PKCS7_set_content:= LoadFunctionCLib('PKCS7_set_content'); 204 | @PKCS7_SIGNER_INFO_set:= LoadFunctionCLib('PKCS7_SIGNER_INFO_set'); 205 | @PKCS7_SIGNER_INFO_sign:= LoadFunctionCLib('PKCS7_SIGNER_INFO_sign'); 206 | @PKCS7_add_signer:= LoadFunctionCLib('PKCS7_add_signer'); 207 | @PKCS7_add_certificate:= LoadFunctionCLib('PKCS7_add_certificate'); 208 | @PKCS7_add_crl:= LoadFunctionCLib('PKCS7_add_crl'); 209 | @PKCS7_content_new:= LoadFunctionCLib('PKCS7_content_new'); 210 | @PKCS7_dataVerify:= LoadFunctionCLib('PKCS7_dataVerify'); 211 | @PKCS7_signatureVerify:= LoadFunctionCLib('PKCS7_signatureVerify'); 212 | @PKCS7_dataInit:= LoadFunctionCLib('PKCS7_dataInit'); 213 | @PKCS7_dataFinal:= LoadFunctionCLib('PKCS7_dataFinal'); 214 | @PKCS7_dataDecode:= LoadFunctionCLib('PKCS7_dataDecode'); 215 | @PKCS7_add_signature:= LoadFunctionCLib('PKCS7_add_signature'); 216 | @PKCS7_cert_from_signer_info:= LoadFunctionCLib('PKCS7_cert_from_signer_info'); 217 | @PKCS7_set_digest:= LoadFunctionCLib('PKCS7_set_digest'); 218 | @PKCS7_get_signer_info:= LoadFunctionCLib('PKCS7_get_signer_info'); 219 | @PKCS7_add_recipient:= LoadFunctionCLib('PKCS7_add_recipient'); 220 | @PKCS7_SIGNER_INFO_get0_algs:= LoadFunctionCLib('PKCS7_SIGNER_INFO_get0_algs'); 221 | @PKCS7_RECIP_INFO_get0_alg:= LoadFunctionCLib('PKCS7_RECIP_INFO_get0_alg'); 222 | @PKCS7_add_recipient_info:= LoadFunctionCLib('PKCS7_add_recipient_info'); 223 | @PKCS7_RECIP_INFO_set:= LoadFunctionCLib('PKCS7_RECIP_INFO_set'); 224 | @PKCS7_set_cipher:= LoadFunctionCLib('PKCS7_set_cipher'); 225 | @PKCS7_get_issuer_and_serial:= LoadFunctionCLib('PKCS7_get_issuer_and_serial'); 226 | @PKCS7_digest_from_attributes:= LoadFunctionCLib('PKCS7_digest_from_attributes'); 227 | @PKCS7_add_signed_attribute:= LoadFunctionCLib('PKCS7_add_signed_attribute'); 228 | @PKCS7_add_attribute := LoadFunctionCLib('PKCS7_add_attribute'); 229 | @PKCS7_get_attribute:= LoadFunctionCLib('PKCS7_get_attribute'); 230 | @PKCS7_get_signed_attribute:= LoadFunctionCLib('PKCS7_get_signed_attribute'); 231 | @PKCS7_set_signed_attributes:= LoadFunctionCLib('PKCS7_set_signed_attributes'); 232 | @PKCS7_set_attributes:= LoadFunctionCLib('PKCS7_set_attributes'); 233 | @PKCS7_sign:= LoadFunctionCLib('PKCS7_sign'); 234 | @PKCS7_sign_add_signer:= LoadFunctionCLib('PKCS7_sign_add_signer'); 235 | @PKCS7_final:= LoadFunctionCLib('PKCS7_final'); 236 | @PKCS7_verify:= LoadFunctionCLib('PKCS7_verify'); 237 | @PKCS7_get0_signers:= LoadFunctionCLib('PKCS7_get0_signers'); 238 | @PKCS7_encrypt:= LoadFunctionCLib('PKCS7_encrypt'); 239 | @PKCS7_decrypt:= LoadFunctionCLib('PKCS7_decrypt'); 240 | @PKCS7_add_attrib_smimecap:= LoadFunctionCLib('PKCS7_add_attrib_smimecap'); 241 | @PKCS7_get_smimecap:= LoadFunctionCLib('PKCS7_get_smimecap'); 242 | @PKCS7_simple_smimecap:= LoadFunctionCLib('PKCS7_simple_smimecap'); 243 | @PKCS7_add_attrib_content_type:= LoadFunctionCLib('PKCS7_add_attrib_content_type'); 244 | @PKCS7_add0_attrib_signing_time:= LoadFunctionCLib('PKCS7_add0_attrib_signing_time'); 245 | @PKCS7_add1_attrib_digest:= LoadFunctionCLib('PKCS7_add1_attrib_digest'); 246 | @SMIME_write_PKCS7:= LoadFunctionCLib('SMIME_write_PKCS7'); 247 | @SMIME_read_PKCS7:= LoadFunctionCLib('SMIME_read_PKCS7'); 248 | @BIO_new_PKCS7:= LoadFunctionCLib('BIO_new_PKCS7'); 249 | @ERR_load_PKCS7_strings:= LoadFunctionCLib('ERR_load_PKCS7_strings'); 250 | 251 | end; 252 | end; 253 | end. -------------------------------------------------------------------------------- /ssl_rand.pas: -------------------------------------------------------------------------------- 1 | unit ssl_rand; 2 | interface 3 | uses ssl_types; 4 | var 5 | RAND_set_rand_method: function(const meth: PRAND_METHOD): TC_INT; cdecl = nil; 6 | RAND_get_rand_method: function: PRAND_METHOD; cdecl = nil; 7 | RAND_set_rand_engine: function(engine: PENGINE): TC_INT; cdecl = nil; 8 | RAND_SSLeay: function: PRAND_METHOD; cdecl = nil; 9 | RAND_cleanup: procedure; cdecl = nil; 10 | RAND_bytes: function(buf: PAnsiChar; num: TC_INT): TC_INT; cdecl = nil; 11 | RAND_pseudo_bytes: function(buf: PAnsiChar; num: TC_INT): TC_INT; cdecl = nil; 12 | RAND_seed: procedure(buf: Pointer; num: TC_INT); cdecl = nil; 13 | RAND_add: procedure(buf: Pointer; num: TC_INT; entropy: double); cdecl = nil; 14 | RAND_load_file: function(_file: PAnsiChar; max_bytes: TC_LONG): TC_INT; cdecl = nil; 15 | RAND_write_file: function(_file: PAnsiChar): TC_INT; cdecl = nil; 16 | RAND_file_name: function(_file: PAnsiChar; num: TC_size_t ): PAnsiChar; cdecl = nil; 17 | RAND_status: function: TC_INT; cdecl = nil; 18 | RAND_query_egd_bytes: function(path: PAnsiChar; buf: PAnsiChar; bytes: TC_INT): TC_INT; cdecl = nil; 19 | RAND_egd: function(path: PAnsiChar): TC_INT; cdecl = nil; 20 | RAND_egd_bytes: function(path: PAnsiChar; bytes: TC_INT): TC_INT; cdecl = nil; 21 | RAND_poll: function: TC_INT; cdecl = nil; 22 | 23 | RAND_screen: procedure; cdecl; 24 | //int RAND_event(UINT, WPARAM, LPARAM); 25 | 26 | RAND_set_fips_drbg_type: procedure(_type: TC_INT; flags: TC_INT); cdecl = nil; 27 | RAND_init_fips: function: TC_INT; cdecl = nil; 28 | ERR_load_RAND_strings: procedure; cdecl = nil; 29 | 30 | procedure SSL_InitRAND; 31 | 32 | implementation 33 | uses ssl_lib; 34 | 35 | procedure SSL_InitRAND; 36 | begin 37 | if @RAND_set_rand_method = nil then 38 | begin 39 | @RAND_set_rand_method:= LoadFunctionCLib('RAND_set_rand_method'); 40 | @RAND_get_rand_method:= LoadFunctionCLib('RAND_get_rand_method'); 41 | @RAND_set_rand_engine:= LoadFunctionCLib('RAND_set_rand_engine'); 42 | @RAND_SSLeay:= LoadFunctionCLib('RAND_SSLeay'); 43 | @RAND_cleanup:= LoadFunctionCLib('RAND_cleanup'); 44 | @RAND_bytes:= LoadFunctionCLib('RAND_bytes'); 45 | @RAND_pseudo_bytes:= LoadFunctionCLib('RAND_pseudo_bytes'); 46 | @RAND_seed:= LoadFunctionCLib('RAND_seed'); 47 | @RAND_add:= LoadFunctionCLib('RAND_add'); 48 | @RAND_load_file:= LoadFunctionCLib('RAND_load_file'); 49 | @RAND_write_file:= LoadFunctionCLib('RAND_write_file'); 50 | @RAND_file_name:= LoadFunctionCLib('RAND_file_name'); 51 | @RAND_status:= LoadFunctionCLib('RAND_status'); 52 | @RAND_query_egd_bytes:= LoadFunctionCLib('RAND_query_egd_bytes'); 53 | @RAND_egd:= LoadFunctionCLib('RAND_egd'); 54 | @RAND_egd_bytes:= LoadFunctionCLib('RAND_egd_bytes'); 55 | @RAND_poll:= LoadFunctionCLib('RAND_poll'); 56 | @RAND_screen:= LoadFunctionCLib('RAND_screen'); 57 | @RAND_set_fips_drbg_type:= LoadFunctionCLib('RAND_set_fips_drbg_type', false); 58 | @RAND_init_fips:= LoadFunctionCLib('RAND_init_fips', false); 59 | @ERR_load_RAND_strings:= LoadFunctionCLib('ERR_load_RAND_strings'); 60 | end; 61 | end; 62 | 63 | end. 64 | -------------------------------------------------------------------------------- /ssl_rc2.pas: -------------------------------------------------------------------------------- 1 | unit ssl_rc2; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | RC2_set_key: procedure(_key: PRC2_KEY; _len: TC_INT; const _data: PAnsiChar;_bits: TC_INT); cdecl = nil; 8 | RC2_ecb_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _key: PRC2_KEY; _enc: TC_INT); cdecl = nil; 9 | RC2_encrypt: procedure(_data: PC_ULONG;_key: PRC2_KEY); cdecl = nil; 10 | RC2_decrypt: procedure(_data: PC_ULONG;_key: PRC2_KEY); cdecl = nil; 11 | RC2_cbc_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _ks: PRC2_KEY; _iv: PAnsiChar; _enc: TC_INT); cdecl = nil; 12 | RC2_cfb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _schedule: PRC2_KEY; _ivec: PAnsiChar; var _num: TC_INT; _enc: TC_INT); cdecl = nil; 13 | RC2_ofb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _schedule: PRC2_KEY; _ivec: PAnsiChar; var _num: TC_INT); cdecl = nil; 14 | 15 | procedure SSL_Initrc2; 16 | 17 | implementation 18 | uses ssl_lib; 19 | 20 | procedure SSL_Initrc2; 21 | begin 22 | if @RC2_encrypt = nil then 23 | begin 24 | @RC2_set_key:= LoadFunctionCLib('RC2_set_key'); 25 | @RC2_ecb_encrypt:= LoadFunctionCLib('RC2_ecb_encrypt'); 26 | @RC2_encrypt:= LoadFunctionCLib('RC2_encrypt'); 27 | @RC2_decrypt:= LoadFunctionCLib('RC2_decrypt'); 28 | @RC2_cbc_encrypt:= LoadFunctionCLib('RC2_cbc_encrypt'); 29 | @RC2_cfb64_encrypt:= LoadFunctionCLib('RC2_cfb64_encrypt'); 30 | @RC2_ofb64_encrypt:= LoadFunctionCLib('RC2_ofb64_encrypt'); 31 | end; 32 | 33 | end; 34 | 35 | end. 36 | 37 | -------------------------------------------------------------------------------- /ssl_rc4.pas: -------------------------------------------------------------------------------- 1 | unit ssl_rc4; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | RC4_options: function: PAnsiChar; cdecl = nil; 8 | RC4_set_key: procedure(_key: PRC4_KEY; _len: TC_INT; const _data: PAnsiChar); cdecl = nil; 9 | private_RC4_set_key: procedure(_key: PRC4_KEY; _len: TC_INT; const _data: PAnsiChar); cdecl = nil; 10 | RC4: procedure(_key: PRC4_KEY; _len: TC_SIZE_T; const _indata: PAnsiChar; _outdata: PAnsiChar); cdecl = nil; 11 | 12 | procedure SSL_Initrc4; 13 | 14 | implementation 15 | uses ssl_lib; 16 | 17 | procedure SSL_Initrc4; 18 | begin 19 | if @RC4_options = nil then 20 | begin 21 | @RC4_options:= LoadFunctionCLib('RC4_options'); 22 | @RC4_set_key:= LoadFunctionCLib('RC4_set_key'); 23 | @private_RC4_set_key:= LoadFunctionCLib('private_RC4_set_key'); 24 | @RC4:= LoadFunctionCLib('RC4'); 25 | end; 26 | 27 | end; 28 | 29 | end. 30 | 31 | -------------------------------------------------------------------------------- /ssl_rc5.pas: -------------------------------------------------------------------------------- 1 | unit ssl_rc5; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | RC5_32_set_key: procedure(_key: PRC5_32_KEY; _len: TC_INT; const _data: PAnsiChar; _rounds: TC_INT); cdecl = nil; 8 | RC5_32_ecb_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _key: PRC5_32_KEY; _enc: TC_INT); cdecl = nil; 9 | RC5_32_encrypt: procedure(_data: PC_ULONG; _key: PRC5_32_KEY); cdecl = nil; 10 | RC5_32_decrypt: procedure(data: PC_ULONG; _key: PRC5_32_KEY); cdecl = nil; 11 | RC5_32_cbc_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _ks: PRC5_32_KEY; _iv: PAnsiChar; _enc: TC_INT); cdecl = nil; 12 | RC5_32_cfb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _schedule: PRC5_32_KEY; _ivec: PAnsiChar; var _num: TC_INT; _enc: TC_INT); cdecl = nil; 13 | RC5_32_ofb64_encrypt: procedure(const _in: PAnsiChar; _out: PAnsiChar; _length: TC_LONG; _schedule: PRC5_32_KEY; _ivec: PAnsiChar; var _num: TC_INT); cdecl = nil; 14 | 15 | procedure SSL_Initrc5; 16 | 17 | implementation 18 | uses ssl_lib; 19 | 20 | procedure SSL_Initrc5; 21 | begin 22 | if @RC5_32_encrypt = nil then 23 | begin 24 | @RC5_32_set_key:= LoadFunctionCLib('RC5_32_set_key', false); 25 | @RC5_32_ecb_encrypt:= LoadFunctionCLib('RC5_32_ecb_encrypt', false); 26 | @RC5_32_encrypt:= LoadFunctionCLib('RC5_32_encrypt', false); 27 | @RC5_32_decrypt:= LoadFunctionCLib('RC5_32_decrypt', false); 28 | @RC5_32_cbc_encrypt:= LoadFunctionCLib('RC5_32_cbc_encrypt', false); 29 | @RC5_32_cfb64_encrypt:= LoadFunctionCLib('RC5_32_cfb64_encrypt', false); 30 | @RC5_32_ofb64_encrypt:= LoadFunctionCLib('RC5_32_ofb64_encrypt', false); 31 | end; 32 | end; 33 | 34 | end. 35 | 36 | -------------------------------------------------------------------------------- /ssl_ripemd.pas: -------------------------------------------------------------------------------- 1 | unit ssl_ripemd; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | RIPEMD160_Init: function(_c: PRIPEMD160_CTX): TC_INT; cdecl = nil; 8 | RIPEMD160_Update: function(_c: PRIPEMD160_CTX; const _data: Pointer; _len: TC_SIZE_T): TC_INT; cdecl = nil; 9 | RIPEMD160_Final: function(_md: PAnsiChar; _c: PRIPEMD160_CTX): TC_INT; cdecl = nil; 10 | RIPEMD160: function(const _d: PAnsiChar; _n: TC_SIZE_T; _md: PAnsiChar): PAnsiChar; cdecl = nil; 11 | RIPEMD160_Transform: procedure(_c: PRIPEMD160_CTX; const _b: PAnsiChar); cdecl = nil; 12 | 13 | procedure SSL_Initripemd; 14 | 15 | implementation 16 | uses ssl_lib; 17 | 18 | procedure SSL_Initripemd; 19 | begin 20 | if @RIPEMD160_Init = nil then 21 | begin 22 | @RIPEMD160_Init:= LoadFunctionCLib('RIPEMD160_Init'); 23 | @RIPEMD160_Update:= LoadFunctionCLib('RIPEMD160_Update'); 24 | @RIPEMD160_Final:= LoadFunctionCLib('RIPEMD160_Final'); 25 | @RIPEMD160:= LoadFunctionCLib('RIPEMD160'); 26 | @RIPEMD160_Transform:= LoadFunctionCLib('RIPEMD160_Transform'); 27 | end; 28 | end; 29 | 30 | end. 31 | 32 | -------------------------------------------------------------------------------- /ssl_rsa.pas: -------------------------------------------------------------------------------- 1 | unit ssl_rsa; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | type 7 | TRSACallback = procedure(p1, p2: TC_INT; p3: Pointer); cdecl; 8 | 9 | var 10 | RSA_new: function: PRSA; cdecl = nil; 11 | RSA_new_method: function(pengine: PENGINE): PRSA; cdecl = nil; 12 | RSA_size: function(pval: Pointer): TC_INT; cdecl = nil; 13 | RSA_generate_key: function(bits: TC_INT; e: TC_ULONG; callback: TRSACallback; cb_arg: Pointer): PRSA; cdecl = nil; 14 | RSA_generate_key_ex: function(rsa: PRSA; bits: TC_INT; e: PBIGNUM; cb: PBN_GENCB): TC_INT; cdecl = nil; 15 | RSA_check_key: function(rsa: PRSA): TC_INT; cdecl = nil; 16 | RSA_public_encrypt: function(flen: TC_INT; from: PByte; _to: PByte; rsa: PRSA; padding: TC_INT): TC_INT cdecl = nil; 17 | RSA_private_encrypt: function(flen: TC_INT; from: PByte; _to: PByte; rsa: PRSA; padding: TC_INT): TC_INT cdecl = nil; 18 | RSA_public_decrypt: function(flen: TC_INT; from: PByte; _to: PByte; rsa: PRSA; padding: TC_INT): TC_INT cdecl = nil; 19 | RSA_private_decrypt: function(flen: TC_INT; from: PByte; _to: PByte; rsa: PRSA; padding: TC_INT): TC_INT cdecl = nil; 20 | RSA_free : procedure(rsa: PRSA) cdecl = nil; 21 | RSA_up_ref: function(rsa: PRSA): TC_INT; cdecl = nil; 22 | RSA_flags: function(rsa: PRSA): TC_INT; cdecl = nil; 23 | ERR_load_RSA_strings: procedure; cdecl = nil; 24 | 25 | 26 | RSA_set_default_method: procedure(const _meth: PRSA_METHOD); cdecl = nil; 27 | RSA_get_default_method: function: PRSA_METHOD; cdecl = nil; 28 | RSA_get_method: function(const _rsa: PRSA): PRSA_METHOD; cdecl = nil; 29 | RSA_set_method: function(_rsa: PRSA; const _meth: PRSA_METHOD): TC_INT; cdecl = nil; 30 | 31 | RSA_memory_lock: function(_r: PRSA): TC_INT; cdecl = nil; 32 | RSA_PKCS1_SSLeay: function: PRSA_METHOD; cdecl = nil; 33 | RSA_null_method: function: PRSA_METHOD; cdecl = nil; 34 | 35 | d2i_RSAPublicKey: function(a: PPRSA; _in: PPAnsiChar; len: TC_LONG): PRSA; cdecl = nil; 36 | i2d_RSAPublicKey: function(a: PRSA; _out: PPAnsiChar): TC_INT; cdecl = nil; 37 | RSAPublicKey_it: function: PASN1_ITEM; cdecl = nil; 38 | d2i_RSAPrivateKey: function(a: PPRSA; _in: PPAnsiChar; len: TC_LONG): PRSA; cdecl = nil; 39 | i2d_RSAPrivateKey: function(a: PRSA; _out: PPAnsiChar): TC_INT; cdecl = nil; 40 | RSAPrivateKey_it: function: PASN1_ITEM; cdecl = nil; 41 | 42 | 43 | RSA_PSS_PARAMS_new: function: PRSA_PSS_PARAMS; cdecl = nil; 44 | RSA_PSS_PARAMS_free: procedure(a: PRSA_PSS_PARAMS); cdecl = nil; 45 | d2i_RSA_PSS_PARAMS: function(a: PPRSA_PSS_PARAMS; _in: PPAnsiChar; len: TC_LONG): PRSA_PSS_PARAMS; cdecl = nil; 46 | i2d_RSA_PSS_PARAMS: function(a: PRSA_PSS_PARAMS; _out: PPAnsiChar): TC_INT; cdecl = nil; 47 | RSA_PSS_PARAMS_it: function: PASN1_ITEM; cdecl = nil; 48 | 49 | RSA_print: function(_bp: PBIO; const _r: PRSA; _offset: TC_INT): TC_INT; cdecl = nil; 50 | 51 | i2d_RSA_NET: function(const _a: PRSA; _pp: PPAnsiChar; _cb: RSA_NET_CALLBACK_FUNC; _sgckey: TC_INT): TC_INT; cdecl = nil; 52 | d2i_RSA_NET: function(_a: PPRSA; const _pp: PPAnsiChar; _length: TC_LONG; _cb: RSA_NET_CALLBACK_FUNC; _sgckey: TC_INT): PRSA; cdecl = nil; 53 | 54 | i2d_Netscape_RSA: function(const _a: PRSA; _pp: PPAnsiChar; _cb: RSA_NET_CALLBACK_FUNC): TC_INT; cdecl = nil; 55 | d2i_Netscape_RSA: function(_a: PPRSA ; const _pp: PPAnsiChar; _length: TC_LONG; _cb: RSA_NET_CALLBACK_FUNC): PRSA; cdecl = nil; 56 | 57 | RSA_sign: function(_type: TC_INT; const _m: PAnsiChar; _m_length: TC_UINT; _sigret: PAnsiChar; var _siglen: TC_UINT; _rsa: PRSA): TC_INT; cdecl = nil; 58 | RSA_verify: function(_type: TC_INT; const _m: PAnsiChar; _m_length: TC_UINT; const _sigbuf: PAnsiChar; _siglen: TC_UINT; _rsa: PRSA): TC_INT; cdecl = nil; 59 | 60 | RSA_sign_ASN1_OCTET_STRING: function(_type: TC_INT;const _m: PAnsiChar; _m_length: TC_UINT; _sigret: PAnsiChar; var _siglen: TC_UINT; _rsa: PRSA): TC_INT; cdecl = nil; 61 | RSA_verify_ASN1_OCTET_STRING: function(_type: TC_INT; const _m: PAnsiChar; _m_length: TC_UINT; _sigbuf: PAnsiChar; _siglen: TC_UINT; _rsa: PRSA): TC_INT; cdecl = nil; 62 | 63 | RSA_blinding_on: function(_rsa: PRSA; _ctx: PBN_CTX): TC_INT; cdecl = nil; 64 | RSA_blinding_off: procedure(_rsa: PRSA); cdecl = nil; 65 | RSA_setup_blinding: function(_rsa: PRSA; _ctx: PBN_CTX): PBN_BLINDING; cdecl = nil; 66 | 67 | RSA_padding_add_PKCS1_type_1: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT): TC_INT; cdecl = nil; 68 | RSA_padding_check_PKCS1_type_1: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT): TC_INT; cdecl = nil; 69 | RSA_padding_add_PKCS1_type_2: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT): TC_INT; cdecl = nil; 70 | RSA_padding_check_PKCS1_type_2: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT): TC_INT; cdecl = nil; 71 | PKCS1_MGF1: function(_mask: PAnsiChar; _len: TC_LONG; const _seed: PAnsiChar; _seedlen: TC_LONG; const _dgst: PEVP_MD): TC_INT; cdecl = nil; 72 | RSA_padding_add_PKCS1_OAEP: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; const _p: PAnsiChar; _pl: TC_INT): TC_INT; cdecl = nil; 73 | RSA_padding_check_PKCS1_OAEP: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT; const _p: PAnsiChar; _pl: TC_INT): TC_INT; cdecl = nil; 74 | RSA_padding_add_SSLv23: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT): TC_INT; cdecl = nil; 75 | RSA_padding_check_SSLv23: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT): TC_INT; cdecl = nil; 76 | RSA_padding_add_none: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT): TC_INT; cdecl = nil; 77 | RSA_padding_check_none: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT): TC_INT; cdecl = nil; 78 | RSA_padding_add_X931: function(_to: PAnsiChar;_tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT): TC_INT; cdecl = nil; 79 | RSA_padding_check_X931: function(_to: PAnsiChar; _tlen: TC_INT; const _f: PAnsiChar; _fl: TC_INT; _rsa_len: TC_INT): TC_INT; cdecl = nil; 80 | RSA_X931_hash_id: function(_nid: TC_INT): TC_INT; cdecl = nil; 81 | 82 | RSA_verify_PKCS1_PSS: function(_rsa: PRSA; const _mHash: PAnsiChar; const _Hash: PEVP_MD; const _EM: PAnsiChar; _sLen: TC_INT): TC_INT; cdecl = nil; 83 | RSA_padding_add_PKCS1_PSS: function(_rsa: PRSA; _EM: PAnsiChar; const _mHash: PAnsiChar; const _Hash: PEVP_MD; _sLen: TC_INT): TC_INT; cdecl = nil; 84 | 85 | RSA_verify_PKCS1_PSS_mgf1: function(_rsa: PRSA; const _mHash: PAnsiChar; const _Hash: PEVP_MD; const _mgf1Hash: PEVP_MD; const _EM: PAnsiChar; _sLen: TC_INT): TC_INT; cdecl = nil; 86 | 87 | RSA_padding_add_PKCS1_PSS_mgf1: function(_rsa: PRSA; _EM: PAnsiChar; const _mHash: PAnsiChar; const _Hash: PEVP_MD; const _mgf1Hash: PEVP_MD; _sLen: TC_INT): TC_INT; cdecl = nil; 88 | 89 | RSA_get_ex_new_index: function(_argl: TC_LONG; _argp: Pointer; _new_func: CRYPTO_EX_new; _dup_func: CRYPTO_EX_dup; _free_func: CRYPTO_EX_free): TC_INT; cdecl = nil; 90 | RSA_set_ex_data: function(_r: PRSA; _idx: TC_INT; _arg: Pointer): TC_INT; cdecl = nil; 91 | RSA_get_ex_data: function(const _r: PRSA; _idx: TC_INT): Pointer; cdecl = nil; 92 | 93 | RSAPublicKey_dup: function(_rsa: PRSA): PRSA; cdecl = nil; 94 | RSAPrivateKey_dup: function(_rsa: PRSA): PRSA; cdecl = nil; 95 | 96 | 97 | procedure EVP_PKEY_assign_RSA(key: PEVP_PKEY; rsa: PRSA); inline; 98 | 99 | procedure EVP_PKEY_CTX_set_rsa_padding(ctx: PEVP_PKEY_CTX; pad: TC_INT); inline; 100 | function EVP_PKEY_CTX_get_rsa_padding(ctx: PEVP_PKEY_CTX): TC_INT; inline; 101 | procedure EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx: PEVP_PKEY_CTX; len: TC_INT); inline; 102 | function EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx: PEVP_PKEY_CTX): TC_INT; inline; 103 | procedure EVP_PKEY_CTX_set_rsa_keygen_bits(ctx: PEVP_PKEY_CTX; bits: TC_INT); inline; 104 | procedure EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx: PEVP_PKEY_CTX; pubexp: Pointer); inline; 105 | procedure EVP_PKEY_CTX_set_rsa_mgf1_md(ctx: PEVP_PKEY_CTX; md: PEVP_MD); inline; 106 | procedure EVP_PKEY_CTX_get_rsa_mgf1_md(ctx: PEVP_PKEY_CTX; pmd: PPEVP_MD); inline; 107 | 108 | procedure SSL_InitRSA; 109 | 110 | implementation 111 | 112 | uses ssl_lib, ssl_evp, ssl_const; 113 | 114 | procedure EVP_PKEY_assign_RSA(key: PEVP_PKEY; rsa: PRSA); inline; 115 | begin 116 | EVP_PKEY_assign(key, EVP_PKEY_RSA, rsa); 117 | end; 118 | 119 | procedure EVP_PKEY_CTX_set_rsa_padding(ctx: PEVP_PKEY_CTX; pad: TC_INT); inline; 120 | begin 121 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, nil); 122 | end; 123 | 124 | function EVP_PKEY_CTX_get_rsa_padding(ctx: PEVP_PKEY_CTX): TC_INT; inline; 125 | var ppad: TC_INT; 126 | begin 127 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, @ppad); 128 | Result := ppad; 129 | end; 130 | 131 | procedure EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx: PEVP_PKEY_CTX; len: TC_INT); inline; 132 | begin 133 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, (EVP_PKEY_OP_SIGN or EVP_PKEY_OP_VERIFY), EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, nil); 134 | end; 135 | 136 | function EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx: PEVP_PKEY_CTX): TC_INT; inline; 137 | var plen: TC_INT; 138 | begin 139 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, (EVP_PKEY_OP_SIGN or EVP_PKEY_OP_VERIFY), EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, @plen); 140 | Result := plen; 141 | end; 142 | 143 | procedure EVP_PKEY_CTX_set_rsa_keygen_bits(ctx: PEVP_PKEY_CTX; bits: TC_INT); inline; 144 | begin 145 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, nil); 146 | end; 147 | 148 | procedure EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx: PEVP_PKEY_CTX; pubexp: Pointer); inline; 149 | begin 150 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp); 151 | end; 152 | 153 | procedure EVP_PKEY_CTX_set_rsa_mgf1_md(ctx: PEVP_PKEY_CTX; md: PEVP_MD); inline; 154 | begin 155 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, EVP_PKEY_CTRL_RSA_MGF1_MD, 0, md); 156 | end; 157 | 158 | procedure EVP_PKEY_CTX_get_rsa_mgf1_md(ctx: PEVP_PKEY_CTX; pmd: PPEVP_MD); inline; 159 | begin 160 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, @pmd); 161 | end; 162 | 163 | 164 | procedure SSL_InitRSA; 165 | begin 166 | if @RSA_new = nil then 167 | begin 168 | @RSA_new := LoadFunctionCLib('RSA_new'); 169 | @RSA_new_method := LoadFunctionCLib('RSA_new_method'); 170 | @RSA_size := LoadFunctionCLib('RSA_size'); 171 | @RSA_generate_key := LoadFunctionCLib('RSA_generate_key'); 172 | @RSA_generate_key_ex := LoadFunctionCLib('RSA_generate_key_ex'); 173 | @RSA_check_key := LoadFunctionCLib('RSA_check_key'); 174 | @RSA_public_encrypt := LoadFunctionCLib('RSA_public_encrypt'); 175 | @RSA_private_encrypt := LoadFunctionCLib('RSA_private_encrypt'); 176 | @RSA_public_decrypt := LoadFunctionCLib('RSA_public_decrypt'); 177 | @RSA_private_decrypt := LoadFunctionCLib('RSA_private_decrypt'); 178 | @RSA_free := LoadFunctionCLib('RSA_free'); 179 | @RSA_up_ref := LoadFunctionCLib('RSA_up_ref'); 180 | @RSA_flags := LoadFunctionCLib('RSA_flags'); 181 | @ERR_load_RSA_strings := LoadFunctionCLib('ERR_load_RSA_strings'); 182 | @RSA_set_default_method:= LoadFunctionCLib('RSA_set_default_method'); 183 | @RSA_get_default_method:= LoadFunctionCLib('RSA_get_default_method'); 184 | @RSA_get_method:= LoadFunctionCLib('RSA_get_method'); 185 | @RSA_set_method:= LoadFunctionCLib('RSA_set_method'); 186 | @RSA_memory_lock:= LoadFunctionCLib('RSA_memory_lock'); 187 | @RSA_PKCS1_SSLeay:= LoadFunctionCLib('RSA_PKCS1_SSLeay'); 188 | @RSA_null_method:= LoadFunctionCLib('RSA_null_method'); 189 | @RSA_PSS_PARAMS_new:= LoadFunctionCLib('RSA_PSS_PARAMS_new'); 190 | @RSA_PSS_PARAMS_free:= LoadFunctionCLib('RSA_PSS_PARAMS_free'); 191 | @d2i_RSA_PSS_PARAMS:= LoadFunctionCLib('d2i_RSA_PSS_PARAMS'); 192 | @i2d_RSA_PSS_PARAMS:= LoadFunctionCLib('i2d_RSA_PSS_PARAMS'); 193 | @RSA_PSS_PARAMS_it:= LoadFunctionCLib('RSA_PSS_PARAMS_it'); 194 | @RSA_print:= LoadFunctionCLib('RSA_print'); 195 | @i2d_RSA_NET:= LoadFunctionCLib('i2d_RSA_NET'); 196 | @d2i_RSA_NET:= LoadFunctionCLib('d2i_RSA_NET'); 197 | @i2d_Netscape_RSA:= LoadFunctionCLib('i2d_Netscape_RSA'); 198 | @d2i_Netscape_RSA:= LoadFunctionCLib('d2i_Netscape_RSA'); 199 | @RSA_sign:= LoadFunctionCLib('RSA_sign'); 200 | @RSA_verify:= LoadFunctionCLib('RSA_verify'); 201 | @RSA_sign_ASN1_OCTET_STRING:= LoadFunctionCLib('RSA_sign_ASN1_OCTET_STRING'); 202 | @RSA_verify_ASN1_OCTET_STRING:= LoadFunctionCLib('RSA_verify_ASN1_OCTET_STRING'); 203 | @RSA_blinding_on:= LoadFunctionCLib('RSA_blinding_on'); 204 | @RSA_blinding_off:= LoadFunctionCLib('RSA_blinding_off'); 205 | @RSA_setup_blinding:= LoadFunctionCLib('RSA_setup_blinding'); 206 | @RSA_padding_add_PKCS1_type_1:= LoadFunctionCLib('RSA_padding_add_PKCS1_type_1'); 207 | @RSA_padding_check_PKCS1_type_1:= LoadFunctionCLib('RSA_padding_check_PKCS1_type_1'); 208 | @RSA_padding_add_PKCS1_type_2:= LoadFunctionCLib('RSA_padding_add_PKCS1_type_2'); 209 | @RSA_padding_check_PKCS1_type_2:= LoadFunctionCLib('RSA_padding_check_PKCS1_type_2'); 210 | @PKCS1_MGF1:= LoadFunctionCLib('PKCS1_MGF1'); 211 | @RSA_padding_add_PKCS1_OAEP:= LoadFunctionCLib('RSA_padding_add_PKCS1_OAEP'); 212 | @RSA_padding_check_PKCS1_OAEP:= LoadFunctionCLib('RSA_padding_check_PKCS1_OAEP'); 213 | @RSA_padding_add_SSLv23:= LoadFunctionCLib('RSA_padding_add_SSLv23'); 214 | @RSA_padding_check_SSLv23:= LoadFunctionCLib('RSA_padding_check_SSLv23'); 215 | @RSA_padding_add_none:= LoadFunctionCLib('RSA_padding_add_none'); 216 | @RSA_padding_check_none:= LoadFunctionCLib('RSA_padding_check_none'); 217 | @RSA_padding_add_X931:= LoadFunctionCLib('RSA_padding_add_X931'); 218 | @RSA_padding_check_X931:= LoadFunctionCLib('RSA_padding_check_X931'); 219 | @RSA_X931_hash_id:= LoadFunctionCLib('RSA_X931_hash_id'); 220 | @RSA_verify_PKCS1_PSS:= LoadFunctionCLib('RSA_verify_PKCS1_PSS'); 221 | @RSA_padding_add_PKCS1_PSS:= LoadFunctionCLib('RSA_padding_add_PKCS1_PSS'); 222 | @RSA_verify_PKCS1_PSS_mgf1:= LoadFunctionCLib('RSA_verify_PKCS1_PSS_mgf1'); 223 | @RSA_padding_add_PKCS1_PSS_mgf1:= LoadFunctionCLib('RSA_padding_add_PKCS1_PSS_mgf1'); 224 | @RSA_get_ex_new_index:= LoadFunctionCLib('RSA_get_ex_new_index'); 225 | @RSA_set_ex_data:= LoadFunctionCLib('RSA_set_ex_data'); 226 | @RSA_get_ex_data:= LoadFunctionCLib('RSA_get_ex_data'); 227 | @RSAPublicKey_dup:= LoadFunctionCLib('RSAPublicKey_dup'); 228 | @RSAPrivateKey_dup:= LoadFunctionCLib('RSAPrivateKey_dup'); 229 | @d2i_RSAPublicKey:= LoadFunctionCLib('d2i_RSAPublicKey'); 230 | @i2d_RSAPublicKey:= LoadFunctionCLib('i2d_RSAPublicKey'); 231 | @RSAPublicKey_it:= LoadFunctionCLib('RSAPublicKey_it'); 232 | @d2i_RSAPrivateKey:= LoadFunctionCLib('d2i_RSAPrivateKey'); 233 | @i2d_RSAPrivateKey:= LoadFunctionCLib('i2d_RSAPrivateKey'); 234 | @RSAPrivateKey_it:= LoadFunctionCLib('RSAPrivateKey_it'); 235 | 236 | end; 237 | end; 238 | 239 | end. 240 | -------------------------------------------------------------------------------- /ssl_sha.pas: -------------------------------------------------------------------------------- 1 | unit ssl_sha; 2 | 3 | interface 4 | uses ssl_types; 5 | 6 | var 7 | SHA_Init: function(_c: PSHA_CTX): TC_INT; cdecl = nil; 8 | SHA_Update: function(_c: PSHA_CTX; const _data: Pointer; _len: TC_SIZE_T): TC_INT; cdecl = nil; 9 | SHA_Final: function(md: PAnsiChar; c: PSHA_CTX): TC_INT; cdecl = nil; 10 | SHA: function(const _d: PAnsiChar; n: TC_SIZE_T; md: PAnsiChar): PAnsiChar; cdecl = nil; 11 | SHA_Transform: procedure(c: PSHA_CTX; const data: PAnsiChar); cdecl = nil; 12 | SHA1_Init: function(c: PSHA_CTX): TC_INT; cdecl = nil; 13 | SHA1_Update: function(c: PSHA_CTX; const data: Pointer; len: TC_SIZE_T): TC_INT; cdecl = nil; 14 | SHA1_Final: function(md: PAnsiChar; c: PSHA_CTX): TC_INT; cdecl = nil; 15 | SHA1: function(const d: PAnsiChar; n: TC_SIZE_T; md: PAnsiChar): PAnsiChar; cdecl = nil; 16 | SHA1_Transform: procedure(c: PSHA_CTX; const data: PAnsiChar); cdecl = nil; 17 | SHA224_Init: function(c: PSHA256_CTX): TC_INT; cdecl = nil; 18 | SHA224_Update: function(c: PSHA256_CTX; const data: Pointer; len: TC_SIZE_T): TC_INT; cdecl = nil; 19 | SHA224_Final: function(md: PAnsiChar; c: PSHA256_CTX): TC_INT; cdecl = nil; 20 | SHA224: function(const d: PAnsiChar; n: TC_SIZE_T;md: PAnsiChar): PAnsiChar; cdecl = nil; 21 | SHA256_Init: function(c: PSHA256_CTX): TC_INT; cdecl = nil; 22 | SHA256_Update: function(c: PSHA256_CTX; const data: Pointer; len: TC_SIZE_T): TC_INT; cdecl = nil; 23 | SHA256_Final: function(md: PAnsiChar; c: PSHA256_CTX): TC_INT; cdecl = nil; 24 | SHA256: function(const d: PAnsiChar; n: TC_SIZE_T;md: PAnsiChar): PAnsiChar; cdecl = nil; 25 | SHA256_Transform: procedure(c: PSHA256_CTX; const data: PAnsiChar); cdecl = nil; 26 | SHA384_Init: function(c: PSHA512_CTX): TC_INT; cdecl = nil; 27 | SHA384_Update: function(c: PSHA512_CTX; const data: Pointer; len: TC_SIZE_T): TC_INT; cdecl = nil; 28 | SHA384_Final: function(md: PAnsiChar; c: PSHA512_CTX): TC_INT; cdecl = nil; 29 | SHA384: function(const d: PAnsiChar; n: TC_SIZE_T;md: PAnsiChar): PAnsiChar; cdecl = nil; 30 | SHA512_Init: function(c: PSHA512_CTX): TC_INT; cdecl = nil; 31 | SHA512_Update: function(c: PSHA512_CTX; const data: Pointer; len: TC_SIZE_T): TC_INT; cdecl = nil; 32 | SHA512_Final: function(md: PAnsiChar; c: PSHA512_CTX): TC_INT; cdecl = nil; 33 | SHA512: function(const d: PAnsiChar; n: TC_SIZE_T;md: PAnsiChar): PAnsiChar; cdecl = nil; 34 | SHA512_Transform: procedure(c: PSHA512_CTX; const data: PAnsiChar); cdecl = nil; 35 | 36 | 37 | procedure SSL_Initsha; 38 | 39 | implementation 40 | uses ssl_lib; 41 | 42 | procedure SSL_Initsha; 43 | begin 44 | if @SHA_Init = nil then 45 | begin 46 | @SHA_Init:= LoadFunctionCLib('SHA_Init'); 47 | @SHA_Update:= LoadFunctionCLib('SHA_Update'); 48 | @SHA_Final:= LoadFunctionCLib('SHA_Final'); 49 | @SHA:= LoadFunctionCLib('SHA'); 50 | @SHA_Transform:= LoadFunctionCLib('SHA_Transform'); 51 | @SHA1_Init:= LoadFunctionCLib('SHA1_Init'); 52 | @SHA1_Update:= LoadFunctionCLib('SHA1_Update'); 53 | @SHA1_Final:= LoadFunctionCLib('SHA1_Final'); 54 | @SHA1:= LoadFunctionCLib('SHA1'); 55 | @SHA1_Transform:= LoadFunctionCLib('SHA1_Transform'); 56 | @SHA224_Init:= LoadFunctionCLib('SHA224_Init'); 57 | @SHA224_Update:= LoadFunctionCLib('SHA224_Update'); 58 | @SHA224_Final:= LoadFunctionCLib('SHA224_Final'); 59 | @SHA224:= LoadFunctionCLib('SHA224'); 60 | @SHA256_Init:= LoadFunctionCLib('SHA256_Init'); 61 | @SHA256_Update:= LoadFunctionCLib('SHA256_Update'); 62 | @SHA256_Final:= LoadFunctionCLib('SHA256_Final'); 63 | @SHA256:= LoadFunctionCLib('SHA256'); 64 | @SHA256_Transform:= LoadFunctionCLib('SHA256_Transform'); 65 | @SHA384_Init:= LoadFunctionCLib('SHA384_Init'); 66 | @SHA384_Update:= LoadFunctionCLib('SHA384_Update'); 67 | @SHA384_Final:= LoadFunctionCLib('SHA384_Final'); 68 | @SHA384:= LoadFunctionCLib('SHA384'); 69 | @SHA512_Init:= LoadFunctionCLib('SHA512_Init'); 70 | @SHA512_Update:= LoadFunctionCLib('SHA512_Update'); 71 | @SHA512_Final:= LoadFunctionCLib('SHA512_Final'); 72 | @SHA512:= LoadFunctionCLib('SHA512'); 73 | @SHA512_Transform:= LoadFunctionCLib('SHA512_Transform'); 74 | end; 75 | 76 | end; 77 | 78 | end. 79 | 80 | -------------------------------------------------------------------------------- /ssl_sk.pas: -------------------------------------------------------------------------------- 1 | unit ssl_sk; 2 | 3 | interface 4 | uses ssl_types; 5 | var 6 | sk_value: function (_stack: PSTACK_OF; _i: TC_INT): Pointer; cdecl = nil; 7 | sk_new_null: function: PSTACK_OF; cdecl = nil; 8 | sk_push: function(st: PSTACK_OF; data: Pointer): TC_INT; cdecl = nil; 9 | sk_pop_free: procedure(st: PSTACK_OF; func: SK_POP_FREE_PROC); cdecl = nil; 10 | sk_free: procedure(_stack: PSTACK_OF); cdecl = nil; 11 | 12 | function sk_X509_NAME_ENTRY_value(_stack: PSTACK_OF_X509_NAME_ENTRY; i: Integer): PX509_NAME_ENTRY; 13 | function sk_X509_EXTENSION_new_null: PSTACK_OF_X509_EXTENSION; 14 | function sk_X509_EXTENSION_push(_stak: PSTACK_OF_X509_EXTENSION; data: Pointer): TC_INT; 15 | procedure sk_X509_EXTENSION_pop_free(st: PSTACK_OF_X509_EXTENSION; func: SK_POP_FREE_PROC); 16 | procedure sk_X509_EXTENSION_free(st: PSTACK_OF_X509_EXTENSION); 17 | 18 | function sk_X509_new_null: PSTACK_OF_X509; 19 | function sk_X509_push(_stak: PSTACK_OF_X509; data: Pointer): TC_INT; 20 | procedure SSL_initSk; 21 | 22 | implementation 23 | uses ssl_lib; 24 | 25 | function sk_X509_NAME_ENTRY_value(_stack: PSTACK_OF_X509_NAME_ENTRY; i: Integer): PX509_NAME_ENTRY; 26 | begin 27 | Result := sk_value(_stack, i); 28 | end; 29 | 30 | function sk_X509_EXTENSION_new_null: PSTACK_OF_X509_EXTENSION; 31 | begin 32 | Result := sk_new_null; 33 | end; 34 | 35 | function sk_X509_new_null: PSTACK_OF_X509; 36 | begin 37 | Result := sk_new_null; 38 | end; 39 | 40 | function sk_X509_EXTENSION_push(_stak: PSTACK_OF_X509_EXTENSION; data: Pointer): TC_INT; 41 | begin 42 | Result := sk_push(_stak, data); 43 | end; 44 | 45 | function sk_X509_push(_stak: PSTACK_OF_X509; data: Pointer): TC_INT; 46 | begin 47 | Result := sk_push(_stak, data); 48 | end; 49 | 50 | procedure sk_X509_EXTENSION_pop_free(st: PSTACK_OF_X509_EXTENSION; func: SK_POP_FREE_PROC); 51 | begin 52 | sk_pop_free(st, func); 53 | end; 54 | 55 | procedure sk_X509_EXTENSION_free(st: PSTACK_OF_X509_EXTENSION); 56 | begin 57 | sk_free(st); 58 | end; 59 | 60 | procedure SSL_initSk; 61 | begin 62 | if @sk_value = nil then 63 | begin 64 | @sk_value := LoadFunctionCLib('sk_value'); 65 | @sk_new_null := LoadFunctionCLib('sk_new_null'); 66 | @sk_push := LoadFunctionCLib('sk_push'); 67 | @sk_pop_free := LoadFunctionCLib('sk_pop_free'); 68 | @sk_free := LoadFunctionCLib('sk_free'); 69 | end; 70 | end; 71 | 72 | end. 73 | -------------------------------------------------------------------------------- /ssl_util.pas: -------------------------------------------------------------------------------- 1 | unit ssl_util; 2 | 3 | interface 4 | uses ssl_types, ssl_asn; 5 | var 6 | CRYPTO_malloc : function(num: TC_INT; const _file: PAnsiChar; line: TC_INT): Pointer cdecl = nil; 7 | CRYPTO_realloc: function(addr: Pointer; num: TC_INT; _file: PAnsiChar; line: TC_INT): Pointer; cdecl = nil; 8 | CRYPTO_free : procedure(ptr : Pointer) cdecl = nil; 9 | CRYPTO_malloc_init: procedure; cdecl = nil; 10 | CRYPTO_set_mem_functions:function (_malloc: CRYPTO_mem_alloc_func; _realloc: CRYPTO_mem_realloc_func; _free: CRYPTO_mem_free_func): TC_INT; cdecl = nil; 11 | fCRYPTO_lock: procedure(_mode: TC_INT; _type: TC_INT; _file: PAnsiChar; line: TC_INT); cdecl = nil; 12 | 13 | 14 | OPENSSL_gmtime: function(var timer: TC_time_t; var time: tm): tm; cdecl = nil; 15 | 16 | function OpenSSL_malloc(iSize: TC_INT): Pointer; 17 | procedure OpenSSL_free(ptr: Pointer); 18 | 19 | function Asn1ToString(str: PASN1_STRING): String; 20 | function StringToASN1(s: String; nid: Integer): PASN1_STRING; 21 | function OBJ_ln2sn(ln: PAnsiChar): PAnsiChar; 22 | function OBJ_sn2ln(ln: PAnsiChar): PAnsiChar; 23 | function OBJ_obj2sn(a: PASN1_OBJECT): PAnsiChar; 24 | function OBJ_obj2String(a: PASN1_OBJECT; no_name: Integer = 0): String; 25 | 26 | procedure SSL_InitUtil; 27 | 28 | function DateTimeToUnixTime(ADateTime: TDateTime): TC_time_t; 29 | function UnixTimeToDateTime(const AUnixTime: TC_time_t): TDateTime; 30 | 31 | function ASN1ToDateTime(a: PASN1_TIME): TDateTime; 32 | function DateTimeToASN1(ADateTime: TDateTime): PASN1_TIME; 33 | 34 | implementation 35 | uses ssl_lib, ssl_const, SysUtils, ssl_err, ssl_objects, Math; 36 | 37 | function _CR_alloc(_size: TC_SIZE_T): Pointer; cdecl; 38 | begin 39 | Result := AllocMem(_size); 40 | end; 41 | 42 | function _CR_realloc(_mem: Pointer; _size: TC_SIZE_T): Pointer; cdecl; 43 | begin 44 | Result := ReallocMemory(_mem, _size); 45 | end; 46 | 47 | procedure _CR_free(_mem: Pointer); cdecl; 48 | begin 49 | FreeMem(_mem); 50 | end; 51 | 52 | 53 | procedure SSL_InitUtil; 54 | begin 55 | if @CRYPTO_malloc = nil then 56 | begin 57 | @CRYPTO_malloc := LoadFunctionCLib('CRYPTO_malloc'); 58 | @CRYPTO_free := LoadFunctionCLib('CRYPTO_free'); 59 | @CRYPTO_realloc := LoadFunctionCLib('CRYPTO_realloc', false); 60 | @CRYPTO_set_mem_functions := LoadFunctionCLib('CRYPTO_set_mem_functions'); 61 | @fCRYPTO_lock := LoadFunctionCLib('CRYPTO_lock'); 62 | CRYPTO_set_mem_functions(_CR_alloc, _CR_realloc, _CR_free); 63 | 64 | @OPENSSL_gmtime := LoadFunctionCLib('OPENSSL_gmtime', False); 65 | end; 66 | end; 67 | 68 | 69 | function OpenSSL_malloc(iSize: TC_INT): Pointer; 70 | begin 71 | if @CRYPTO_malloc <> nil then 72 | Result := CRYPTO_malloc(iSize, '', 0) 73 | else 74 | Result := nil; 75 | end; 76 | 77 | procedure OpenSSL_free(ptr: Pointer); 78 | begin 79 | if @CRYPTO_Free <> nil then 80 | CRYPTO_free(ptr); 81 | end; 82 | 83 | function Asn1ToString(str: PASN1_STRING): String; 84 | var 85 | P: PWideChar; 86 | begin 87 | case Str._type of 88 | V_ASN1_BMPSTRING: begin 89 | P := GetMemory(Str.length div 2); 90 | UnicodeToUtf8(str.data, p, str.length div 2); 91 | Result := P; 92 | FreeMem(P); 93 | end; 94 | V_ASN1_UTF8STRING: begin 95 | Result := Str.data; 96 | end; 97 | V_ASN1_T61STRING: begin 98 | Result := Str.data; 99 | end; 100 | else 101 | Result := Str.data; 102 | end; 103 | end; 104 | 105 | function StringToASN1(s: String; nid: Integer): PASN1_STRING; 106 | var 107 | B: TBytes; 108 | gmask: TC_ULONG; 109 | mask: TC_ULONG; 110 | tbl: PASN1_STRING_TABLE; 111 | _in: PAnsiChar; 112 | _ins: AnsiString; 113 | begin 114 | B := TEncoding.Convert(TEncoding.Default, TEncoding.UTF8, BytesOf(s)); 115 | _ins := StringOf(B); 116 | 117 | gmask := ASN1_STRING_get_default_mask(); 118 | mask := DIRSTRING_TYPE and gmask; 119 | Result := nil; 120 | tbl := ASN1_STRING_TABLE_get(nid); 121 | SSL_CheckError; 122 | if tbl <> nil then 123 | begin 124 | mask := tbl.mask; 125 | if (tbl.flags and STABLE_NO_MASK) = 0 then 126 | mask := mask and gmask; 127 | end; 128 | ASN1_mbstring_copy(@Result, @_ins[1], -1, MBSTRING_UTF8, mask); 129 | SSL_CheckError; 130 | 131 | end; 132 | 133 | function OBJ_ln2sn(ln: PAnsiChar): PAnsiChar; 134 | begin 135 | Result := OBJ_nid2sn(OBJ_ln2nid(ln)) 136 | end; 137 | 138 | function OBJ_sn2ln(ln: PAnsiChar): PAnsiChar; 139 | begin 140 | Result := OBJ_nid2ln(OBJ_sn2nid(ln)) 141 | end; 142 | 143 | function OBJ_obj2sn(a: PASN1_OBJECT): PAnsiChar; 144 | begin 145 | OBJ_obj2nid(a); 146 | SSL_CheckError; 147 | Result := OBJ_nid2sn(OBJ_obj2nid(a)); 148 | end; 149 | 150 | function OBJ_obj2String(a: PASN1_OBJECT; no_name: Integer = 0): String; 151 | var len: Integer; 152 | buf: PAnsiChar; 153 | begin 154 | Len := OBJ_obj2txt(buf, 256, a, no_name); 155 | SSL_CheckError; 156 | Result := buf; 157 | end; 158 | 159 | function DateTimeToUnixTime(ADateTime: TDateTime): TC_time_t; 160 | begin 161 | Result := Round((ADateTime - UnixDateDelta) * SecsPerDay); 162 | end; 163 | 164 | function UnixTimeToDateTime(const AUnixTime: TC_time_t): TDateTime; 165 | begin 166 | Result:= UnixDateDelta + (AUnixTime / SecsPerDay); 167 | end; 168 | 169 | function GeneralizedTimeToDateTime(AGenTime: String): TDateTime; 170 | var FS: TFormatSettings; 171 | y, m, d, h, mm, s: Word; 172 | begin 173 | y := StrToInt(Copy(AGenTime, 1, 4)); 174 | m := StrToInt(Copy(AGenTime, 5, 2)); 175 | d := StrToInt(Copy(AGenTime, 7, 2)); 176 | h := StrToInt(Copy(AGenTime, 9, 2)); 177 | mm := StrToInt(Copy(AGenTime, 11, 2)); 178 | s := StrToInt(Copy(AGenTime, 13, 2)); 179 | Result := EncodeDate(y, m, d)+EncodeTime(h, mm, s, 0); 180 | end; 181 | 182 | function ASN1ToDateTime(a: PASN1_TIME): TDateTime; 183 | var gt: PASN1_GENERALIZEDTIME; 184 | begin 185 | gt := ASN1_TIME_to_generalizedtime(a, nil); 186 | Result := GeneralizedTimeToDateTime(gt.data); 187 | end; 188 | 189 | 190 | function DateTimeToASN1(ADateTime: TDateTime): PASN1_TIME; 191 | begin 192 | Result := ASN1_TIME_new; 193 | ASN1_TIME_set(Result, DateTimeToUnixTime(ADateTime)); 194 | end; 195 | 196 | end. 197 | 198 | 199 | --------------------------------------------------------------------------------