Hi, On Fri, Nov 06, 2015 at 05:39:03AM +0000, Miod Vallat wrote: > Running regress/lib/libcrypto/aead fails on big-endian platforms without > the following diff, for the ``Test vector from RFC7539 2.8.2'' test, due > to 64-bit counters being truncated to size_t. >
Yes, the counter should be unsigned 64bit. OK reyk@ I can only see one other *int64_t in LibreSSL's API, should it be unsigned long long? Or is it OK to start using C99 types in the API? (yes!) The comment "converting size_t to u8" should also be updated: ---snip--- void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, const unsigned char key[32], const unsigned char iv[8], size_t counter) { struct chacha_ctx ctx; /* * chacha_ivsetup expects the counter to be in u8. Rather than * converting size_t to u8 and then back again, pass a counter of * NULL and manually assign it afterwards. */ chacha_keysetup(&ctx, key, 256); chacha_ivsetup(&ctx, iv, NULL); if (counter != 0) { ctx.input[12] = (uint32_t)counter; ctx.input[13] = (uint32_t)(((uint64_t)counter) >> 32); } chacha_encrypt_bytes(&ctx, in, out, (uint32_t)len); } ---snap--- Reyk > Index: chacha/chacha.c > =================================================================== > RCS file: /OpenBSD/src/lib/libssl/src/crypto/chacha/chacha.c,v > retrieving revision 1.6 > diff -u -p -r1.6 chacha.c > --- chacha/chacha.c 8 Jul 2014 14:30:23 -0000 1.6 > +++ chacha/chacha.c 6 Nov 2015 05:37:19 -0000 > @@ -57,7 +57,7 @@ ChaCha(ChaCha_ctx *ctx, unsigned char *o > > void > CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, > - const unsigned char key[32], const unsigned char iv[8], size_t counter) > + const unsigned char key[32], const unsigned char iv[8], uint64_t counter) > { > struct chacha_ctx ctx; > > Index: chacha/chacha.h > =================================================================== > RCS file: /OpenBSD/src/lib/libssl/src/crypto/chacha/chacha.h,v > retrieving revision 1.6 > diff -u -p -r1.6 chacha.h > --- chacha/chacha.h 25 Jul 2014 14:04:51 -0000 1.6 > +++ chacha/chacha.h 6 Nov 2015 05:37:19 -0000 > @@ -44,7 +44,7 @@ void ChaCha(ChaCha_ctx *ctx, unsigned ch > size_t len); > > void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t > len, > - const unsigned char key[32], const unsigned char iv[8], size_t counter); > + const unsigned char key[32], const unsigned char iv[8], uint64_t > counter); > > #ifdef __cplusplus > } > --