On 11 December 2017 at 20:28, Pierce Ng <pierce@samadhiweb.com> wrote:
On Mon, Dec 11, 2017 at 12:46:59AM +0800, Ben Coman wrote:
where the "EVP function provide a high level interface to OpenSSL cryptographic functions."
Hi Ben,
As it happened, over the weekend I implemented the Pharo wrappers for the EVP_DigestSign* and EVP_DigestVerify* APIs. It is straightforward to add the non-public key-using message digest functions, so I've just done it. Code snippets:
| msg st c | msg := 'Grumpy wizards make toxic brew for the evil Queen and Jack.'. st := SHA256 hashMessage: msg asByteArray. c := LcEvpSHA256 new hashMessage: msg asByteArray. st = c => true
Using Sven's example:
| msg st c | key := ByteArray new: 32. msg := 'Grumpy wizards make toxic brew for the evil Queen and Jack.'. st := (HMAC on: SHA256) key: key; digestMessage: msg asByteArray. c := (HMAC on: LcEvpSHA256) key: key; digestMessage: msg asByteArray. st = c => true
Code at http://smalltalkhub.com/#!/~PierceNg/OpenSSL-Pharo.
I've also added tests for SHA256 similar to the snippets above. I will add SHA512 tests when I find the test vectors.
I don't about SHA512-only, but I found some HMACSHA512 test vectors at https://tools.ietf.org/html/rfc4231. I've attached the first five tests I got working against LibSodium.
In the next two weeks when I have some time off from work, I will attempt to move the repo to GH. Meanwhile, I've added you as a contributor to the STH repo if you'd like to hack on it.
thx. cheers -ben