On 3 March 2018 at 02:22, Hernán Morales Durand <hernan.morales@gmail.com> wrote:
Hi
2018-03-02 11:24 GMT-03:00 Esteban A. Maringolo <emaringolo@gmail.com>:
2018-03-02 8:54 GMT-03:00 Ben Coman <btc@openinworld.com>:
On 2 March 2018 at 10:43, Esteban A. Maringolo <emaringolo@gmail.com> wrote:
So after all this what's the recommended way to use HMAC-SHA512 in Pharo 6?
Libsodium installation instructions... https://github.com/Traadh/bittrex
Why did you create BittrexLibsodium library wrapper instead of a plain Libsodium wrapper like the one at http://smalltalkhub.com/#!/~tonyg/Crypto-Nacl/ ?
If that is the one available from the Pharo Catalog, when I tried it, it used a different api than the libsodium library supplied by Ubuntu 16.04. It makes this call out... crypto_hash_sha512_ref() but Ubuntu libsodium library did not export that, but instead... crypto_hash_sha512() I failed to track down the implications of the "_ref", and at that time Crypto-Nacl did not supply a 64-bit library, so a single FFI matching the system supplied libsodium library was easier. Also as a minor policy, I prefer to use the system library than one compiled by a third-party. cheers -ben
I inspected the Nacl library and it provides the functions:
crypto_auth_hmacsha256 crypto_auth_hmacsha256_bytes crypto_auth_hmacsha256_keybytes crypto_auth_hmacsha256_primitive crypto_auth_hmacsha256_ref crypto_auth_hmacsha256_ref_verify crypto_auth_hmacsha256_verify crypto_auth_hmacsha512256 crypto_auth_hmacsha512256_bytes crypto_auth_hmacsha512256_keybytes crypto_auth_hmacsha512256_primitive crypto_auth_hmacsha512256_ref crypto_auth_hmacsha512256_ref_verify crypto_auth_hmacsha512256_verify
I've also followed the Ben's example in Nacl but the output is truncated
| data message output key expected | data := 'Hi There' . key := (ByteArray readHexFrom: '0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', '0b0b0b0b') extendedToSize: 32. expected := ByteArray readHexFrom: '87aa7cdea5ef619d4ff0b4241a1d6cb0', '2379f4e2ce4ec2787ad0b30545e17cde', 'daa833b7d6b8a702038b274eaea3f4e4', 'be9d914eeb61f1702e696c203a126854'. output := ByteArray new: 64. Nacl apiCryptoAuthHMAC512: output message: data messageLength: data size key: key. output
Just off the top of my head, should the following method properly be named apiCryptoAuthHMAC512256:message:messageLength:key: to match the library function its calling?
Nacl class>>apiCryptoAuthHMAC512: c message: m messageLength: mlen key: key
^ self ffiCall: #(long crypto_auth_hmacsha512256(byte * c, byte * m, ulonglong mlen, byte * key)) module: 'libsodium'.
Ben do you know what could be happening here?
By how much is it truncated? Perhaps half? https://dirvine.github.io/data_chain/master///rust_sodium_sys/constant.crypt... https://dirvine.github.io/data_chain/master///rust_sodium_sys/constant.crypt... cheers -ben