[CRYPTO] lib: table driven multiplications in GF(2^128)
authorRik Snel <rsnel@cube.dyndns.org>
Wed, 29 Nov 2006 07:59:44 +0000 (18:59 +1100)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 7 Dec 2006 02:38:55 +0000 (18:38 -0800)
commitc494e0705d670c51ac736c8c4d92750705fe3187
tree9f00826afc317f976c03ef4e77284b13204c0c9d
parentaec3694b987900de7ab789ea5749d673e0d634c4
[CRYPTO] lib: table driven multiplications in GF(2^128)

A lot of cypher modes need multiplications in GF(2^128). LRW, ABL, GCM...
I use functions from this library in my LRW implementation and I will
also use them in my ABL (Arbitrary Block Length, an unencumbered (correct
me if I am wrong, wide block cipher mode).

Elements of GF(2^128) must be presented as u128 *, it encourages automatic
and proper alignment.

The library contains support for two different representations of GF(2^128),
see the comment in gf128mul.h. There different levels of optimization
(memory/speed tradeoff).

The code is based on work by Dr Brian Gladman. Notable changes:
- deletion of two optimization modes
- change from u32 to u64 for faster handling on 64bit machines
- support for 'bbe' representation in addition to the, already implemented,
  'lle' representation.
- move 'inline void' functions from header to 'static void' in the
  source file
- update to use the linux coding style conventions

The original can be found at:
http://fp.gladman.plus.com/AES/modes.vc8.19-06-06.zip

The copyright (and GPL statement) of the original author is preserved.

Signed-off-by: Rik Snel <rsnel@cube.dyndns.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/Kconfig
crypto/Makefile
crypto/gf128mul.c [new file with mode: 0644]
include/crypto/gf128mul.h [new file with mode: 0644]