Commit 82607b29 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

optimize make_kn (from HEAD, by Andy)

parent fd9d2eaf
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -77,19 +77,17 @@ struct CMAC_CTX_st

/* Make temporary keys K1 and K2 */

static void make_kn(unsigned char *k1, unsigned char *l, int bl)
static void make_kn(unsigned char *k1, const unsigned char *l, int bl)
	{
	int i;
	unsigned char c = l[0], carry = c>>7, cnext;

	/* Shift block to left, including carry */
	for (i = 0; i < bl; i++)
		{
		k1[i] = l[i] << 1;
		if (i < bl - 1 && l[i + 1] & 0x80)
			k1[i] |= 1;
		}
	for (i = 0; i < bl-1; i++, c = cnext)
		k1[i] = (c << 1) | ((cnext=l[i+1]) >> 7);

	/* If MSB set fixup with R */
	if (l[0] & 0x80)
		k1[bl - 1] ^= bl == 16 ? 0x87 : 0x1b;
	k1[i] = (c << 1) ^ ((0-carry)&(bl==16?0x87:0x1b));
	}

CMAC_CTX *CMAC_CTX_new(void)