]>
Commit | Line | Data |
---|---|---|
6c2205b8 JK |
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 */ |