I use OpenSSL for this stuff, which can be compiled directly into your project.
{$ifdef windows} // optionally link library into the project {$define static} {$endif} {$ifdef static} {$define libssl := external} {$define libeay := external} {$else} {$ifdef unix} {$define libssl := external 'libssl.so'} {$define libeay := external 'libssl.so'} {$else} {$define libssl := external 'libssl32.dll'} {$define libeay := external 'libeay32.dll'} {$endif} {$endif} function SSL_library_init: Integer; cdecl; libssl; procedure SSL_load_error_strings; cdecl; libssl; function SSLv23_client_method: TSSLMethod; cdecl; libssl; function SSL_CTX_new(method: TSSLMethod): TSSLCtx; cdecl; libssl; procedure SSL_CTX_free(context: TSSLCtx); cdecl; libssl; function SSL_new(context: TSSLCtx): TSSL; cdecl; libssl; function SSL_shutdown(ssl: TSSL): LongInt; cdecl; libssl; procedure SSL_free(ssl: TSSL); cdecl; libssl; function SSL_set_fd(ssl: TSSL; socket: LongInt): LongBool; cdecl; libssl; function SSL_connect(ssl: TSSL): LongBool; cdecl; libssl; function SSL_write(ssl: TSSL; buffer: Pointer; size: LongWord): LongInt; cdecl; libssl; function SSL_read(ssl: TSSL; buffer: Pointer; size: LongWord): LongInt; cdecl; libssl; function SSL_get_error(ssl: TSSL; ret_code: Integer): Integer; cdecl; libssl; { Hashing routines } function MD5_Init(out context: TMD5Ctx): LongBool; cdecl; libeay; function MD5_Update(var context: TMD5Ctx; data: Pointer; size: Cardinal): LongBool; cdecl; libeay; function MD5_Final(out digest: TMD5Digest; var context: TMD5Ctx): LongBool; cdecl; libeay; function SHA1_Init(out context: TSHA1Ctx): LongBool; cdecl; libeay; function SHA1_Update(var context: TSHA1Ctx; data: Pointer; size: Cardinal): LongBool; cdecl; libeay; function SHA1_Final(out digest: TSHA1Digest; var context: TSHA1Ctx): LongBool; cdecl; libeay; function SHA256_Init(out context: TSHA256Ctx): LongBool; cdecl; libeay; function SHA256_Update(var context: TSHA256Ctx; data: Pointer; size: Cardinal): LongBool; cdecl; libeay; function SHA256_Final(out digest: TSHA256Digest; var context: TSHA256Ctx): LongBool; cdecl; libeay; function SHA512_Init(out context: TSHA512Ctx): LongBool; cdecl; libeay; function SHA512_Update(var context: TSHA512Ctx; data: Pointer; size: Cardinal): LongBool; cdecl; libeay; function SHA512_Final(out digest: TSHA512Digest; var context: TSHA512Ctx): LongBool; cdecl; libeay; function EVP_md5: TEVPMethod; cdecl; libeay; function EVP_sha1: TEVPMethod; cdecl; libeay; function EVP_sha256: TEVPMethod; cdecl; libeay; function EVP_sha512: TEVPMethod; cdecl; libeay; procedure HMAC_CTX_init(out context: THMACCtx); cdecl; libeay; procedure HMAC_CTX_cleanup(var context: THMACCtx); cdecl; libeay; function HMAC_Init_ex(var context: THMACCtx; key: Pointer; size: Cardinal; method: TEVPMethod; engine: Pointer): LongBool; cdecl; libeay; function HMAC_Update(var context: THMACCtx; data: Pointer; size: Cardinal): LongBool; cdecl; libeay; function HMAC_Final(var context: THMACCtx; digest: Pointer; var digestSize: LongWord): LongBool; cdecl; libeay; implementation {$ifdef static} {$linklib libssl.a} {$linklib libcrypto.a} {$endif}
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal