[fpc-pascal] HMAC_SHA1 and FPC

silvioprog silvioprog at gmail.com
Tue Mar 26 04:24:37 CET 2013


2013/3/26 Anthony Walter <sysrpl at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130326/fc8ae78a/attachment.html>


More information about the fpc-pascal mailing list