]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
6c2205b8 JK |
2 | #ifndef _CRYPTO_LRW_H |
3 | #define _CRYPTO_LRW_H | |
4 | ||
5 | #include <crypto/b128ops.h> | |
6 | ||
7 | struct scatterlist; | |
8 | struct gf128mul_64k; | |
9 | struct blkcipher_desc; | |
10 | ||
11 | #define LRW_BLOCK_SIZE 16 | |
12 | ||
13 | struct lrw_table_ctx { | |
14 | /* optimizes multiplying a random (non incrementing, as at the | |
15 | * start of a new sector) value with key2, we could also have | |
16 | * used 4k optimization tables or no optimization at all. In the | |
17 | * latter case we would have to store key2 here */ | |
18 | struct gf128mul_64k *table; | |
19 | /* stores: | |
20 | * key2*{ 0,0,...0,0,0,0,1 }, key2*{ 0,0,...0,0,0,1,1 }, | |
21 | * key2*{ 0,0,...0,0,1,1,1 }, key2*{ 0,0,...0,1,1,1,1 } | |
22 | * key2*{ 0,0,...1,1,1,1,1 }, etc | |
23 | * needed for optimized multiplication of incrementing values | |
24 | * with key2 */ | |
25 | be128 mulinc[128]; | |
26 | }; | |
27 | ||
28 | int lrw_init_table(struct lrw_table_ctx *ctx, const u8 *tweak); | |
29 | void lrw_free_table(struct lrw_table_ctx *ctx); | |
30 | ||
31 | struct lrw_crypt_req { | |
32 | be128 *tbuf; | |
33 | unsigned int tbuflen; | |
34 | ||
35 | struct lrw_table_ctx *table_ctx; | |
36 | void *crypt_ctx; | |
37 | void (*crypt_fn)(void *ctx, u8 *blks, unsigned int nbytes); | |
38 | }; | |
39 | ||
40 | int lrw_crypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |
41 | struct scatterlist *src, unsigned int nbytes, | |
42 | struct lrw_crypt_req *req); | |
43 | ||
44 | #endif /* _CRYPTO_LRW_H */ |