hmac
The hmac library provides a portable implementation of HMAC
(Keyed-Hashing for Message Authentication) as specified in RFC 2104:
https://datatracker.ietf.org/doc/html/rfc2104.html
The library exports a single object, hmac, implementing the
hmac_protocol protocol with the predicates:
digest/4hex_digest/4digest/5hex_digest/5
The first argument is a hash object implementing the
hash_digest_protocol protocol from the hashes library. Currently
supported hash objects are:
md5sha1sha256sha3_224sha3_256sha3_384sha3_512
On backend Prolog compilers supporting only bounded integer arithmetic,
only md5 is available. On backends supporting unbounded integer
arithmetic, all the listed hash objects are available.
The digest/5 and hex_digest/5 predicates implement the
truncation rule described in RFC 2104 and RFC 2202 by returning the
requested number of leftmost digest bytes.
API documentation
Open the ../../apis/library_index.html#hmac link in a web browser.
Loading
To load all entities in this library, load the loader.lgt file:
| ?- logtalk_load(hmac(loader)).
Testing
To test this library predicates, load the tester.lgt file:
| ?- logtalk_load(hmac(tester)).
Examples
Compute the HMAC-SHA-256 digest for a text message and return it as a hexadecimal atom:
| ?- atom_codes('Jefe', Key),
atom_codes('what do ya want for nothing?', Message),
hmac::hex_digest(sha256, Key, Message, Digest).
Key = [74,101,102,101],
Message = [119,104,97,116,32,100,111,32,121,97,32,119,97,110,116,32,102,111,114,32,110,111,116,104,105,110,103,63],
Digest = '5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843'
yes
Compute a truncated 16-byte HMAC-SHA-256 digest:
| ?- atom_codes('Jefe', Key),
atom_codes('what do ya want for nothing?', Message),
hmac::hex_digest(sha256, Key, Message, 16, Digest).
Key = [74,101,102,101],
Message = [119,104,97,116,32,100,111,32,121,97,32,119,97,110,116,32,102,111,114,32,110,111,116,104,105,110,103,63],
Digest = '5bdcc146bf60754e6a042426089575c7'
yes