Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b588ef6e authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: xcbc - Use crypto_xor



This patch replaces the local xor function with the generic
crypto_xor function.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 6fba00d1
Loading
Loading
Loading
Loading
+6 −16
Original line number Original line Diff line number Diff line
@@ -47,19 +47,10 @@ struct crypto_xcbc_ctx {
	u8 *prev;
	u8 *prev;
	u8 *key;
	u8 *key;
	u8 *consts;
	u8 *consts;
	void (*xor)(u8 *a, const u8 *b, unsigned int bs);
	unsigned int keylen;
	unsigned int keylen;
	unsigned int len;
	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,
static int _crypto_xcbc_digest_setkey(struct crypto_shash *parent,
				      struct crypto_xcbc_ctx *ctx)
				      struct crypto_xcbc_ctx *ctx)
{
{
@@ -122,7 +113,7 @@ static int crypto_xcbc_digest_update(struct shash_desc *pdesc, const u8 *p,
	len -= bs - ctx->len;
	len -= bs - ctx->len;
	p += 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);
	crypto_cipher_encrypt_one(tfm, ctx->prev, ctx->prev);


	/* clearing the length */
	/* clearing the length */
@@ -130,7 +121,7 @@ static int crypto_xcbc_digest_update(struct shash_desc *pdesc, const u8 *p,


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


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


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


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


		_crypto_xcbc_digest_setkey(parent, ctx);
		_crypto_xcbc_digest_setkey(parent, ctx);


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


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