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

Commit 196f7b51 authored by David Sterba's avatar David Sterba Committed by Alistair Delva
Browse files

UPSTREAM: crypto: blake2b - merge _update to api callback



Now that there's only one call to blake2b_update, we can merge it to the
callback and simplify. The empty input check is split and the rest of
code un-indented.

Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>

(cherry picked from commit 0b4b5f10ac1ffb7f51db1832d189c33955c0d4c1)
Bug: 178411248
Change-Id: Ic260edcee45116ac1a9f03f2792fe577a2c629c6
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
parent a6233627
Loading
Loading
Loading
Loading
+30 −36
Original line number Diff line number Diff line
@@ -137,35 +137,6 @@ static void blake2b_compress(struct blake2b_state *S,
#undef G
#undef ROUND

static void blake2b_update(struct blake2b_state *S, const void *pin, size_t inlen)
{
	const u8 *in = (const u8 *)pin;

	if (inlen > 0) {
		size_t left = S->buflen;
		size_t fill = BLAKE2B_BLOCKBYTES - left;

		if (inlen > fill) {
			S->buflen = 0;
			/* Fill buffer */
			memcpy(S->buf + left, in, fill);
			blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
			/* Compress */
			blake2b_compress(S, S->buf);
			in += fill;
			inlen -= fill;
			while (inlen > BLAKE2B_BLOCKBYTES) {
				blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
				blake2b_compress(S, in);
				in += BLAKE2B_BLOCKBYTES;
				inlen -= BLAKE2B_BLOCKBYTES;
			}
		}
		memcpy(S->buf + S->buflen, in, inlen);
		S->buflen += inlen;
	}
}

struct digest_tfm_ctx {
	u8 key[BLAKE2B_KEYBYTES];
	unsigned int keylen;
@@ -210,12 +181,35 @@ static int blake2b_init(struct shash_desc *desc)
	return 0;
}

static int digest_update(struct shash_desc *desc, const u8 *data,
			 unsigned int length)
static int blake2b_update(struct shash_desc *desc, const u8 *in,
			  unsigned int inlen)
{
	struct blake2b_state *state = shash_desc_ctx(desc);
	const size_t left = state->buflen;
	const size_t fill = BLAKE2B_BLOCKBYTES - left;

	if (!inlen)
		return 0;

	if (inlen > fill) {
		state->buflen = 0;
		/* Fill buffer */
		memcpy(state->buf + left, in, fill);
		blake2b_increment_counter(state, BLAKE2B_BLOCKBYTES);
		/* Compress */
		blake2b_compress(state, state->buf);
		in += fill;
		inlen -= fill;
		while (inlen > BLAKE2B_BLOCKBYTES) {
			blake2b_increment_counter(state, BLAKE2B_BLOCKBYTES);
			blake2b_compress(state, in);
			in += BLAKE2B_BLOCKBYTES;
			inlen -= BLAKE2B_BLOCKBYTES;
		}
	}
	memcpy(state->buf + state->buflen, in, inlen);
	state->buflen += inlen;

	blake2b_update(state, data, length);
	return 0;
}

@@ -252,7 +246,7 @@ static struct shash_alg blake2b_algs[] = {
		.digestsize		= BLAKE2B_160_DIGEST_SIZE,
		.setkey			= digest_setkey,
		.init			= blake2b_init,
		.update			= digest_update,
		.update			= blake2b_update,
		.final			= blake2b_final,
		.descsize		= sizeof(struct blake2b_state),
	}, {
@@ -266,7 +260,7 @@ static struct shash_alg blake2b_algs[] = {
		.digestsize		= BLAKE2B_256_DIGEST_SIZE,
		.setkey			= digest_setkey,
		.init			= blake2b_init,
		.update			= digest_update,
		.update			= blake2b_update,
		.final			= blake2b_final,
		.descsize		= sizeof(struct blake2b_state),
	}, {
@@ -280,7 +274,7 @@ static struct shash_alg blake2b_algs[] = {
		.digestsize		= BLAKE2B_384_DIGEST_SIZE,
		.setkey			= digest_setkey,
		.init			= blake2b_init,
		.update			= digest_update,
		.update			= blake2b_update,
		.final			= blake2b_final,
		.descsize		= sizeof(struct blake2b_state),
	}, {
@@ -294,7 +288,7 @@ static struct shash_alg blake2b_algs[] = {
		.digestsize		= BLAKE2B_512_DIGEST_SIZE,
		.setkey			= digest_setkey,
		.init			= blake2b_init,
		.update			= digest_update,
		.update			= blake2b_update,
		.final			= blake2b_final,
		.descsize		= sizeof(struct blake2b_state),
	}