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.crypto_auth_hmacsha512_BYTES.html
https://dirvine.github.io/data_chain/master///rust_sodium_sys/constant.crypto_auth_hmacsha512256_BYTES.html��

cheers -ben