Skip to content

Commit

Permalink
crypto: xts - remove xts_crypt()
Browse files Browse the repository at this point in the history
Now that all users of xts_crypt() have been removed in favor of the XTS
template wrapping an ECB mode algorithm, remove xts_crypt().

Signed-off-by: Eric Biggers <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
ebiggers authored and herbertx committed Mar 2, 2018
1 parent 44893bc commit eb66ecd
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 89 deletions.
72 changes: 0 additions & 72 deletions crypto/xts.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,78 +357,6 @@ static int decrypt(struct skcipher_request *req)
return do_decrypt(req, init_crypt(req, decrypt_done));
}

int xts_crypt(struct blkcipher_desc *desc, struct scatterlist *sdst,
struct scatterlist *ssrc, unsigned int nbytes,
struct xts_crypt_req *req)
{
const unsigned int bsize = XTS_BLOCK_SIZE;
const unsigned int max_blks = req->tbuflen / bsize;
struct blkcipher_walk walk;
unsigned int nblocks;
le128 *src, *dst, *t;
le128 *t_buf = req->tbuf;
int err, i;

BUG_ON(max_blks < 1);

blkcipher_walk_init(&walk, sdst, ssrc, nbytes);

err = blkcipher_walk_virt(desc, &walk);
nbytes = walk.nbytes;
if (!nbytes)
return err;

nblocks = min(nbytes / bsize, max_blks);
src = (le128 *)walk.src.virt.addr;
dst = (le128 *)walk.dst.virt.addr;

/* calculate first value of T */
req->tweak_fn(req->tweak_ctx, (u8 *)&t_buf[0], walk.iv);

i = 0;
goto first;

for (;;) {
do {
for (i = 0; i < nblocks; i++) {
gf128mul_x_ble(&t_buf[i], t);
first:
t = &t_buf[i];

/* PP <- T xor P */
le128_xor(dst + i, t, src + i);
}

/* CC <- E(Key2,PP) */
req->crypt_fn(req->crypt_ctx, (u8 *)dst,
nblocks * bsize);

/* C <- T xor CC */
for (i = 0; i < nblocks; i++)
le128_xor(dst + i, dst + i, &t_buf[i]);

src += nblocks;
dst += nblocks;
nbytes -= nblocks * bsize;
nblocks = min(nbytes / bsize, max_blks);
} while (nblocks > 0);

*(le128 *)walk.iv = *t;

err = blkcipher_walk_done(desc, &walk, nbytes);
nbytes = walk.nbytes;
if (!nbytes)
break;

nblocks = min(nbytes / bsize, max_blks);
src = (le128 *)walk.src.virt.addr;
dst = (le128 *)walk.dst.virt.addr;
}

return err;
}
EXPORT_SYMBOL_GPL(xts_crypt);

static int init_tfm(struct crypto_skcipher *tfm)
{
struct skcipher_instance *inst = skcipher_alg_instance(tfm);
Expand Down
17 changes: 0 additions & 17 deletions include/crypto/xts.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,10 @@
#include <crypto/internal/skcipher.h>
#include <linux/fips.h>

struct scatterlist;
struct blkcipher_desc;

#define XTS_BLOCK_SIZE 16

struct xts_crypt_req {
le128 *tbuf;
unsigned int tbuflen;

void *tweak_ctx;
void (*tweak_fn)(void *ctx, u8* dst, const u8* src);
void *crypt_ctx;
void (*crypt_fn)(void *ctx, u8 *blks, unsigned int nbytes);
};

#define XTS_TWEAK_CAST(x) ((void (*)(void *, u8*, const u8*))(x))

int xts_crypt(struct blkcipher_desc *desc, struct scatterlist *dst,
struct scatterlist *src, unsigned int nbytes,
struct xts_crypt_req *req);

static inline int xts_check_key(struct crypto_tfm *tfm,
const u8 *key, unsigned int keylen)
{
Expand Down

0 comments on commit eb66ecd

Please sign in to comment.