2013/3/26 Anthony Walter <sys...@gmail.com> > 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} >
Nice. But there situations that the user does not have the OpenSSL lib. The routines I sent does not depend on external libs. -- Silvio Clécio My public projects - github.com/silvioprog
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal