Nikos Mavrogiannopoulos <[email protected]> writes:

> It seems that ctr_crypt16() would not handle the whole input and that
> was complicating things. I've modified it towards that, and added the
> parameter. I did a gcm_fill(), but I didn't see the need for the
> nettle_block16 update, as the version I did (quite simplistic), didn't
> seem to differ in performance comparing to ctr_fill16.

I've applied first part with some reorganization. ctr-internal.h now
declares 

  /* Fill BUFFER (n blocks) with incrementing CTR values. It would be
     nice if CTR was always 64-bit aligned, but it isn't when called
     from ctr_crypt. */
  typedef void
  nettle_fill16_func(uint8_t *ctr, size_t n, union nettle_block16 *buffer);
  
  void
  _ctr_crypt16(const void *ctx, nettle_cipher_func *f,
             nettle_fill16_func *fill, uint8_t *ctr,
             size_t length, uint8_t *dst,
             const uint8_t *src);

And I moved the implementation to a separate file ctr16.c.

Your change to gcm.c is then applied almost unchanged on top of that.
Result pushed to a branch named "gcm-ctr-opt". On my machine, it gives a
gcm_aes128 speedup of 54% (from 12.2 cycles/byte to 7.9).

Very nice! Needs a little testing on big-endian before merge to master.

Thanks,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.
_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to