| Jussi Kivilinna | 6c2205b | 2011-11-09 11:50:31 +0800 | [diff] [blame] | 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 */ |