Skip to content

Commit

Permalink
crypto: xcbc - Use crypto_xor
Browse files Browse the repository at this point in the history
This patch replaces the local xor function with the generic
crypto_xor function.

Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
herbertx committed Jul 22, 2009
1 parent 6fba00d commit b588ef6
Showing 1 changed file with 6 additions and 16 deletions.
22 changes: 6 additions & 16 deletions crypto/xcbc.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,10 @@ struct crypto_xcbc_ctx {
u8 *prev;
u8 *key;
u8 *consts;
void (*xor)(u8 *a, const u8 *b, unsigned int bs);
unsigned int keylen;
unsigned int len;
};

static void xor_128(u8 *a, const u8 *b, unsigned int bs)
{
((u32 *)a)[0] ^= ((u32 *)b)[0];
((u32 *)a)[1] ^= ((u32 *)b)[1];
((u32 *)a)[2] ^= ((u32 *)b)[2];
((u32 *)a)[3] ^= ((u32 *)b)[3];
}

static int _crypto_xcbc_digest_setkey(struct crypto_shash *parent,
struct crypto_xcbc_ctx *ctx)
{
Expand Down Expand Up @@ -122,15 +113,15 @@ static int crypto_xcbc_digest_update(struct shash_desc *pdesc, const u8 *p,
len -= bs - ctx->len;
p += bs - ctx->len;

ctx->xor(ctx->prev, ctx->odds, bs);
crypto_xor(ctx->prev, ctx->odds, bs);
crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev);

/* clearing the length */
ctx->len = 0;

/* encrypting the rest of data */
while (len > bs) {
ctx->xor(ctx->prev, p, bs);
crypto_xor(ctx->prev, p, bs);
crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev);
p += bs;
len -= bs;
Expand Down Expand Up @@ -162,8 +153,8 @@ static int crypto_xcbc_digest_final(struct shash_desc *pdesc, u8 *out)
crypto_cipher_encrypt_one(tfm, key2,
(u8 *)(ctx->consts + bs));

ctx->xor(ctx->prev, ctx->odds, bs);
ctx->xor(ctx->prev, key2, bs);
crypto_xor(ctx->prev, ctx->odds, bs);
crypto_xor(ctx->prev, key2, bs);
_crypto_xcbc_digest_setkey(parent, ctx);

crypto_cipher_encrypt_one(tfm, out, ctx->prev);
Expand All @@ -184,8 +175,8 @@ static int crypto_xcbc_digest_final(struct shash_desc *pdesc, u8 *out)
crypto_cipher_encrypt_one(tfm, key3,
(u8 *)(ctx->consts + bs * 2));

ctx->xor(ctx->prev, ctx->odds, bs);
ctx->xor(ctx->prev, key3, bs);
crypto_xor(ctx->prev, ctx->odds, bs);
crypto_xor(ctx->prev, key3, bs);

_crypto_xcbc_digest_setkey(parent, ctx);

Expand All @@ -209,7 +200,6 @@ static int xcbc_init_tfm(struct crypto_tfm *tfm)

switch(bs) {
case 16:
ctx->xor = xor_128;
break;
default:
return -EINVAL;
Expand Down

0 comments on commit b588ef6

Please sign in to comment.