diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2011-11-08 22:50:31 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2011-11-08 22:50:31 -0500 |
commit | 6c2205b8ffec035f4925b8ee84b7758afeee58b5 (patch) | |
tree | 85c202ee4056deaaddfee2c532eeabe44c02551d /include/crypto | |
parent | 171c02048f50d7187991f251ddeed2d7e5de104f (diff) |
crypto: lrw - add interface for parallelized cipher implementions
Export gf128mul table initialization routines and add lrw_crypt() function
that can be used by cipher implementations that can benefit from parallelized
cipher operations.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/crypto')
-rw-r--r-- | include/crypto/lrw.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/include/crypto/lrw.h b/include/crypto/lrw.h new file mode 100644 index 000000000000..25a2c8716375 --- /dev/null +++ b/include/crypto/lrw.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef _CRYPTO_LRW_H | ||
2 | #define _CRYPTO_LRW_H | ||
3 | |||
4 | #include <crypto/b128ops.h> | ||
5 | |||
6 | struct scatterlist; | ||
7 | struct gf128mul_64k; | ||
8 | struct blkcipher_desc; | ||
9 | |||
10 | #define LRW_BLOCK_SIZE 16 | ||
11 | |||
12 | struct lrw_table_ctx { | ||
13 | /* optimizes multiplying a random (non incrementing, as at the | ||
14 | * start of a new sector) value with key2, we could also have | ||
15 | * used 4k optimization tables or no optimization at all. In the | ||
16 | * latter case we would have to store key2 here */ | ||
17 | struct gf128mul_64k *table; | ||
18 | /* stores: | ||
19 | * key2*{ 0,0,...0,0,0,0,1 }, key2*{ 0,0,...0,0,0,1,1 }, | ||
20 | * key2*{ 0,0,...0,0,1,1,1 }, key2*{ 0,0,...0,1,1,1,1 } | ||
21 | * key2*{ 0,0,...1,1,1,1,1 }, etc | ||
22 | * needed for optimized multiplication of incrementing values | ||
23 | * with key2 */ | ||
24 | be128 mulinc[128]; | ||
25 | }; | ||
26 | |||
27 | int lrw_init_table(struct lrw_table_ctx *ctx, const u8 *tweak); | ||
28 | void lrw_free_table(struct lrw_table_ctx *ctx); | ||
29 | |||
30 | struct lrw_crypt_req { | ||
31 | be128 *tbuf; | ||
32 | unsigned int tbuflen; | ||
33 | |||
34 | struct lrw_table_ctx *table_ctx; | ||
35 | void *crypt_ctx; | ||
36 | void (*crypt_fn)(void *ctx, u8 *blks, unsigned int nbytes); | ||
37 | }; | ||
38 | |||
39 | int lrw_crypt(struct blkcipher_desc *desc, struct scatterlist *dst, | ||
40 | struct scatterlist *src, unsigned int nbytes, | ||
41 | struct lrw_crypt_req *req); | ||
42 | |||
43 | #endif /* _CRYPTO_LRW_H */ | ||