// SPDX-License-Identifier: GPL-2.0
/*
 * Minimal library implementation of GCM
 *
 * Copyright 2022 Google LLC
 */

#include <linux/module.h>

#include <crypto/algapi.h>
#include <crypto/gcm.h>
#include <crypto/ghash.h>

#include <asm/irqflags.h>

static void aesgcm_encrypt_block(const struct crypto_aes_ctx *ctx, void *dst,
				 const void *src)
{
	unsigned long flags;

	/*
	 * In AES-GCM, both the GHASH key derivation and the CTR mode
	 * encryption operate on known plaintext, making them susceptible to
	 * timing attacks on the encryption key. The AES library already
	 * mitigates this risk to some extent by pulling the entire S-box into
	 * the caches before doing any substitutions, but this strategy is more
	 * effective when running with interrupts disabled.
	 */
	local_irq_save(flags);
	aes_encrypt(ctx, dst, src);
	local_irq_restore(flags);
}

/**
 * aesgcm_expandkey - Expands the AES and GHASH keys for the AES-GCM key
 *		      schedule
 *
 * @ctx:	The data structure that will hold the AES-GCM key schedule
 * @key:	The AES encryption input key
 * @keysize:	The length in bytes of the input key
 * @authsize:	The size in bytes of the GCM authentication tag
 *
 * Returns: 0 on success, or -EINVAL if @keysize or @authsize contain values
 * that are not permitted by the GCM specification.
 */
int aesgcm_expandkey(struct aesgcm_ctx *ctx, const u8 *key,
		     unsigned int keysize, unsigned int authsize)
{
	u8 kin[AES_BLOCK_SIZE] = {};
	int ret;

	ret = crypto_gcm_check_authsize(authsize) ?:
	      aes_expandkey(&ctx->aes_ctx, key, keysize);
	if (ret)
		return ret;

	ctx->authsize = authsize;
	aesgcm_encrypt_block(&ctx->aes_ctx, &ctx->ghash_key, kin);

	return 0;
}
EXPORT_SYMBOL(aesgcm_expandkey);

static void aesgcm_ghash(be128 *ghash, const be128 *key, const void *src,
			 int len)
{
	while (len > 0) {
		crypto_xor((u8 *)ghash, src, min(len, GHASH_BLOCK_SIZE));
		gf128mul_lle(ghash, key);

		src += GHASH_BLOCK_SIZE;
		len -= GHASH_BLOCK_SIZE;
	}
}

static void aesgcm_mac(const struct aesgcm_ctx *ctx, const u8 *src, int src_len,
		       const u8 *assoc, int assoc_len, __be32 *ctr, u8 *authtag)
{
	be128 tail = { cpu_to_be64(assoc_len * 8), cpu_to_be64(src_len * 8) };
	u8 buf[AES_BLOCK_SIZE];
	be128 ghash = {};

	aesgcm_ghash(&ghash, &ctx->ghash_key, assoc, assoc_len);
	aesgcm_ghash(&ghash, &ctx->ghash_key, src, src_len);
	aesgcm_ghash(&ghash, &ctx->ghash_key, &tail, sizeof(tail));

	ctr[3] = cpu_to_be32(1);
	aesgcm_encrypt_block(&ctx->aes_ctx, buf, ctr);
	crypto_xor_cpy(authtag, buf, (u8 *)&ghash, ctx->authsize);

	memzero_explicit(&ghash, sizeof(ghash));
	memzero_explicit(buf, sizeof(buf));
}

static void aesgcm_crypt(const struct aesgcm_ctx *ctx, u8 *dst, const u8 *src,
			 int len, __be32 *ctr)
{
	u8 buf[AES_BLOCK_SIZE];
	unsigned int n = 2;

	while (len > 0) {
		/*
		 * The counter increment below must not result in overflow or
		 * carry into the next 32-bit word, as this could result in
		 * inadvertent IV reuse, which must be avoided at all cost for
		 * stream ciphers such as AES-CTR. Given the range of 'int
		 * len', this cannot happen, so no explicit test is necessary.
		 */
		ctr[3] = cpu_to_be32(n++);
		aesgcm_encrypt_block(&ctx->aes_ctx, buf, ctr);
		crypto_xor_cpy(dst, src, buf, min(len, AES_BLOCK_SIZE));

		dst += AES_BLOCK_SIZE;
		src += AES_BLOCK_SIZE;
		len -= AES_BLOCK_SIZE;
	}
	memzero_explicit(buf, sizeof(buf));
}

/**
 * aesgcm_encrypt - Perform AES-GCM encryption on a block of data
 *
 * @ctx:	The AES-GCM key schedule
 * @dst:	Pointer to the ciphertext output buffer
 * @src:	Pointer the plaintext (may equal @dst for encryption in place)
 * @crypt_len:	The size in bytes of the plaintext and ciphertext.
 * @assoc:	Pointer to the associated data,
 * @assoc_len:	The size in bytes of the associated data
 * @iv:		The initialization vector (IV) to use for this block of data
 *		(must be 12 bytes in size as per the GCM spec recommendation)
 * @authtag:	The address of the buffer in memory where the authentication
 *		tag should be stored. The buffer is assumed to have space for
 *		@ctx->authsize bytes.
 */
void aesgcm_encrypt(const struct aesgcm_ctx *ctx, u8 *dst, const u8 *src,
		    int crypt_len, const u8 *assoc, int assoc_len,
		    const u8 iv[GCM_AES_IV_SIZE], u8 *authtag)
{
	__be32 ctr[4];

	memcpy(ctr, iv, GCM_AES_IV_SIZE);

	aesgcm_crypt(ctx, dst, src, crypt_len, ctr);
	aesgcm_mac(ctx, dst, crypt_len, assoc, assoc_len, ctr, authtag);
}
EXPORT_SYMBOL(aesgcm_encrypt);

/**
 * aesgcm_decrypt - Perform AES-GCM decryption on a block of data
 *
 * @ctx:	The AES-GCM key schedule
 * @dst:	Pointer to the plaintext output buffer
 * @src:	Pointer the ciphertext (may equal @dst for decryption in place)
 * @crypt_len:	The size in bytes of the plaintext and ciphertext.
 * @assoc:	Pointer to the associated data,
 * @assoc_len:	The size in bytes of the associated data
 * @iv:		The initialization vector (IV) to use for this block of data
 *		(must be 12 bytes in size as per the GCM spec recommendation)
 * @authtag:	The address of the buffer in memory where the authentication
 *		tag is stored.
 *
 * Returns: true on success, or false if the ciphertext failed authentication.
 * On failure, no plaintext will be returned.
 */
bool __must_check aesgcm_decrypt(const struct aesgcm_ctx *ctx, u8 *dst,
				 const u8 *src, int crypt_len, const u8 *assoc,
				 int assoc_len, const u8 iv[GCM_AES_IV_SIZE],
				 const u8 *authtag)
{
	u8 tagbuf[AES_BLOCK_SIZE];
	__be32 ctr[4];

	memcpy(ctr, iv, GCM_AES_IV_SIZE);

	aesgcm_mac(ctx, src, crypt_len, assoc, assoc_len, ctr, tagbuf);
	if (crypto_memneq(authtag, tagbuf, ctx->authsize)) {
		memzero_explicit(tagbuf, sizeof(tagbuf));
		return false;
	}
	aesgcm_crypt(ctx, dst, src, crypt_len, ctr);
	return true;
}
EXPORT_SYMBOL(aesgcm_decrypt);

MODULE_DESCRIPTION("Generic AES-GCM library");
MODULE_AUTHOR("Ard Biesheuvel <ardb@kernel.org>");
MODULE_LICENSE("GPL");

#ifndef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS

/*
 * Test code below. Vectors taken from crypto/testmgr.h
 */

static const u8 __initconst ctext0[16] =
	"\x58\xe2\xfc\xce\xfa\x7e\x30\x61"
	"\x36\x7f\x1d\x57\xa4\xe7\x45\x5a";

static const u8 __initconst ptext1[16];

static const u8 __initconst ctext1[32] =
	"\x03\x88\xda\xce\x60\xb6\xa3\x92"
	"\xf3\x28\xc2\xb9\x71\xb2\xfe\x78"
	"\xab\x6e\x47\xd4\x2c\xec\x13\xbd"
	"\xf5\x3a\x67\xb2\x12\x57\xbd\xdf";

static const u8 __initconst ptext2[64] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39\x1a\xaf\xd2\x55";

static const u8 __initconst ctext2[80] =
	"\x42\x83\x1e\xc2\x21\x77\x74\x24"
	"\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
	"\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
	"\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
	"\x21\xd5\x14\xb2\x54\x66\x93\x1c"
	"\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
	"\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
	"\x3d\x58\xe0\x91\x47\x3f\x59\x85"
	"\x4d\x5c\x2a\xf3\x27\xcd\x64\xa6"
	"\x2c\xf3\x5a\xbd\x2b\xa6\xfa\xb4";

static const u8 __initconst ptext3[60] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39";

static const u8 __initconst ctext3[76] =
	"\x42\x83\x1e\xc2\x21\x77\x74\x24"
	"\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
	"\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
	"\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
	"\x21\xd5\x14\xb2\x54\x66\x93\x1c"
	"\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
	"\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
	"\x3d\x58\xe0\x91"
	"\x5b\xc9\x4f\xbc\x32\x21\xa5\xdb"
	"\x94\xfa\xe9\x5a\xe7\x12\x1a\x47";

static const u8 __initconst ctext4[16] =
	"\xcd\x33\xb2\x8a\xc7\x73\xf7\x4b"
	"\xa0\x0e\xd1\xf3\x12\x57\x24\x35";

static const u8 __initconst ctext5[32] =
	"\x98\xe7\x24\x7c\x07\xf0\xfe\x41"
	"\x1c\x26\x7e\x43\x84\xb0\xf6\x00"
	"\x2f\xf5\x8d\x80\x03\x39\x27\xab"
	"\x8e\xf4\xd4\x58\x75\x14\xf0\xfb";

static const u8 __initconst ptext6[64] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39\x1a\xaf\xd2\x55";

static const u8 __initconst ctext6[80] =
	"\x39\x80\xca\x0b\x3c\x00\xe8\x41"
	"\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
	"\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
	"\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
	"\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
	"\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
	"\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
	"\xcc\xda\x27\x10\xac\xad\xe2\x56"
	"\x99\x24\xa7\xc8\x58\x73\x36\xbf"
	"\xb1\x18\x02\x4d\xb8\x67\x4a\x14";

static const u8 __initconst ctext7[16] =
	"\x53\x0f\x8a\xfb\xc7\x45\x36\xb9"
	"\xa9\x63\xb4\xf1\xc4\xcb\x73\x8b";

static const u8 __initconst ctext8[32] =
	"\xce\xa7\x40\x3d\x4d\x60\x6b\x6e"
	"\x07\x4e\xc5\xd3\xba\xf3\x9d\x18"
	"\xd0\xd1\xc8\xa7\x99\x99\x6b\xf0"
	"\x26\x5b\x98\xb5\xd4\x8a\xb9\x19";

static const u8 __initconst ptext9[64] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39\x1a\xaf\xd2\x55";

static const u8 __initconst ctext9[80] =
	"\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
	"\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
	"\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
	"\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
	"\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
	"\xa7\xb0\x8b\x10\x56\x82\x88\x38"
	"\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
	"\xbc\xc9\xf6\x62\x89\x80\x15\xad"
	"\xb0\x94\xda\xc5\xd9\x34\x71\xbd"
	"\xec\x1a\x50\x22\x70\xe3\xcc\x6c";

static const u8 __initconst ptext10[60] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39";

static const u8 __initconst ctext10[76] =
	"\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
	"\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
	"\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
	"\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
	"\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
	"\xa7\xb0\x8b\x10\x56\x82\x88\x38"
	"\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
	"\xbc\xc9\xf6\x62"
	"\x76\xfc\x6e\xce\x0f\x4e\x17\x68"
	"\xcd\xdf\x88\x53\xbb\x2d\x55\x1b";

static const u8 __initconst ptext11[60] =
	"\xd9\x31\x32\x25\xf8\x84\x06\xe5"
	"\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
	"\x86\xa7\xa9\x53\x15\x34\xf7\xda"
	"\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
	"\x1c\x3c\x0c\x95\x95\x68\x09\x53"
	"\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
	"\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
	"\xba\x63\x7b\x39";

static const u8 __initconst ctext11[76] =
	"\x39\x80\xca\x0b\x3c\x00\xe8\x41"
	"\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
	"\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
	"\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
	"\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
	"\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
	"\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
	"\xcc\xda\x27\x10"
	"\x25\x19\x49\x8e\x80\xf1\x47\x8f"
	"\x37\xba\x55\xbd\x6d\x27\x61\x8c";

static const u8 __initconst ptext12[719] =
	"\x42\xc1\xcc\x08\x48\x6f\x41\x3f"
	"\x2f\x11\x66\x8b\x2a\x16\xf0\xe0"
	"\x58\x83\xf0\xc3\x70\x14\xc0\x5b"
	"\x3f\xec\x1d\x25\x3c\x51\xd2\x03"
	"\xcf\x59\x74\x1f\xb2\x85\xb4\x07"
	"\xc6\x6a\x63\x39\x8a\x5b\xde\xcb"
	"\xaf\x08\x44\xbd\x6f\x91\x15\xe1"
	"\xf5\x7a\x6e\x18\xbd\xdd\x61\x50"
	"\x59\xa9\x97\xab\xbb\x0e\x74\x5c"
	"\x00\xa4\x43\x54\x04\x54\x9b\x3b"
	"\x77\xec\xfd\x5c\xa6\xe8\x7b\x08"
	"\xae\xe6\x10\x3f\x32\x65\xd1\xfc"
	"\xa4\x1d\x2c\x31\xfb\x33\x7a\xb3"
	"\x35\x23\xf4\x20\x41\xd4\xad\x82"
	"\x8b\xa4\xad\x96\x1c\x20\x53\xbe"
	"\x0e\xa6\xf4\xdc\x78\x49\x3e\x72"
	"\xb1\xa9\xb5\x83\xcb\x08\x54\xb7"
	"\xad\x49\x3a\xae\x98\xce\xa6\x66"
	"\x10\x30\x90\x8c\x55\x83\xd7\x7c"
	"\x8b\xe6\x53\xde\xd2\x6e\x18\x21"
	"\x01\x52\xd1\x9f\x9d\xbb\x9c\x73"
	"\x57\xcc\x89\x09\x75\x9b\x78\x70"
	"\xed\x26\x97\x4d\xb4\xe4\x0c\xa5"
	"\xfa\x70\x04\x70\xc6\x96\x1c\x7d"
	"\x54\x41\x77\xa8\xe3\xb0\x7e\x96"
	"\x82\xd9\xec\xa2\x87\x68\x55\xf9"
	"\x8f\x9e\x73\x43\x47\x6a\x08\x36"
	"\x93\x67\xa8\x2d\xde\xac\x41\xa9"
	"\x5c\x4d\x73\x97\x0f\x70\x68\xfa"
	"\x56\x4d\x00\xc2\x3b\x1f\xc8\xb9"
	"\x78\x1f\x51\x07\xe3\x9a\x13\x4e"
	"\xed\x2b\x2e\xa3\xf7\x44\xb2\xe7"
	"\xab\x19\x37\xd9\xba\x76\x5e\xd2"
	"\xf2\x53\x15\x17\x4c\x6b\x16\x9f"
	"\x02\x66\x49\xca\x7c\x91\x05\xf2"
	"\x45\x36\x1e\xf5\x77\xad\x1f\x46"
	"\xa8\x13\xfb\x63\xb6\x08\x99\x63"
	"\x82\xa2\xed\xb3\xac\xdf\x43\x19"
	"\x45\xea\x78\x73\xd9\xb7\x39\x11"
	"\xa3\x13\x7c\xf8\x3f\xf7\xad\x81"
	"\x48\x2f\xa9\x5c\x5f\xa0\xf0\x79"
	"\xa4\x47\x7d\x80\x20\x26\xfd\x63"
	"\x0a\xc7\x7e\x6d\x75\x47\xff\x76"
	"\x66\x2e\x8a\x6c\x81\x35\xaf\x0b"
	"\x2e\x6a\x49\x60\xc1\x10\xe1\xe1"
	"\x54\x03\xa4\x09\x0c\x37\x7a\x15"
	"\x23\x27\x5b\x8b\x4b\xa5\x64\x97"
	"\xae\x4a\x50\x73\x1f\x66\x1c\x5c"
	"\x03\x25\x3c\x8d\x48\x58\x71\x34"
	"\x0e\xec\x4e\x55\x1a\x03\x6a\xe5"
	"\xb6\x19\x2b\x84\x2a\x20\xd1\xea"
	"\x80\x6f\x96\x0e\x05\x62\xc7\x78"
	"\x87\x79\x60\x38\x46\xb4\x25\x57"
	"\x6e\x16\x63\xf8\xad\x6e\xd7\x42"
	"\x69\xe1\x88\xef\x6e\xd5\xb4\x9a"
	"\x3c\x78\x6c\x3b\xe5\xa0\x1d\x22"
	"\x86\x5c\x74\x3a\xeb\x24\x26\xc7"
	"\x09\xfc\x91\x96\x47\x87\x4f\x1a"
	"\xd6\x6b\x2c\x18\x47\xc0\xb8\x24"
	"\xa8\x5a\x4a\x9e\xcb\x03\xe7\x2a"
	"\x09\xe6\x4d\x9c\x6d\x86\x60\xf5"
	"\x2f\x48\x69\x37\x9f\xf2\xd2\xcb"
	"\x0e\x5a\xdd\x6e\x8a\xfb\x6a\xfe"
	"\x0b\x63\xde\x87\x42\x79\x8a\x68"
	"\x51\x28\x9b\x7a\xeb\xaf\xb8\x2f"
	"\x9d\xd1\xc7\x45\x90\x08\xc9\x83"
	"\xe9\x83\x84\xcb\x28\x69\x09\x69"
	"\xce\x99\x46\x00\x54\xcb\xd8\x38"
	"\xf9\x53\x4a\xbf\x31\xce\x57\x15"
	"\x33\xfa\x96\x04\x33\x42\xe3\xc0"
	"\xb7\x54\x4a\x65\x7a\x7c\x02\xe6"
	"\x19\x95\xd0\x0e\x82\x07\x63\xf9"
	"\xe1\x2b\x2a\xfc\x55\x92\x52\xc9"
	"\xb5\x9f\x23\x28\x60\xe7\x20\x51"
	"\x10\xd3\xed\x6d\x9b\xab\xb8\xe2"
	"\x5d\x9a\x34\xb3\xbe\x9c\x64\xcb"
	"\x78\xc6\x91\x22\x40\x91\x80\xbe"
	"\xd7\x78\x5c\x0e\x0a\xdc\x08\xe9"
	"\x67\x10\xa4\x83\x98\x79\x23\xe7"
	"\x92\xda\xa9\x22\x16\xb1\xe7\x78"
	"\xa3\x1c\x6c\x8f\x35\x7c\x4d\x37"
	"\x2f\x6e\x0b\x50\x5c\x34\xb9\xf9"
	"\xe6\x3d\x91\x0d\x32\x95\xaa\x3d"
	"\x48\x11\x06\xbb\x2d\xf2\x63\x88"
	"\x3f\x73\x09\xe2\x45\x56\x31\x51"
	"\xfa\x5e\x4e\x62\xf7\x90\xf9\xa9"
	"\x7d\x7b\x1b\xb1\xc8\x26\x6e\x66"
	"\xf6\x90\x9a\x7f\xf2\x57\xcc\x23"
	"\x59\xfa\xfa\xaa\x44\x04\x01\xa7"
	"\xa4\x78\xdb\x74\x3d\x8b\xb5";

static const u8 __initconst ctext12[735] =
	"\x84\x0b\xdb\xd5\xb7\xa8\xfe\x20"
	"\xbb\xb1\x12\x7f\x41\xea\xb3\xc0"
	"\xa2\xb4\x37\x19\x11\x58\xb6\x0b"
	"\x4c\x1d\x38\x05\x54\xd1\x16\x73"
	"\x8e\x1c\x20\x90\xa2\x9a\xb7\x74"
	"\x47\xe6\xd8\xfc\x18\x3a\xb4\xea"
	"\xd5\x16\x5a\x2c\x53\x01\x46\xb3"
	"\x18\x33\x74\x6c\x50\xf2\xe8\xc0"
	"\x73\xda\x60\x22\xeb\xe3\xe5\x9b"
	"\x20\x93\x6c\x4b\x37\x99\xb8\x23"
	"\x3b\x4e\xac\xe8\x5b\xe8\x0f\xb7"
	"\xc3\x8f\xfb\x4a\x37\xd9\x39\x95"
	"\x34\xf1\xdb\x8f\x71\xd9\xc7\x0b"
	"\x02\xf1\x63\xfc\x9b\xfc\xc5\xab"
	"\xb9\x14\x13\x21\xdf\xce\xaa\x88"
	"\x44\x30\x1e\xce\x26\x01\x92\xf8"
	"\x9f\x00\x4b\x0c\x4b\xf7\x5f\xe0"
	"\x89\xca\x94\x66\x11\x21\x97\xca"
	"\x3e\x83\x74\x2d\xdb\x4d\x11\xeb"
	"\x97\xc2\x14\xff\x9e\x1e\xa0\x6b"
	"\x08\xb4\x31\x2b\x85\xc6\x85\x6c"
	"\x90\xec\x39\xc0\xec\xb3\xb5\x4e"
	"\xf3\x9c\xe7\x83\x3a\x77\x0a\xf4"
	"\x56\xfe\xce\x18\x33\x6d\x0b\x2d"
	"\x33\xda\xc8\x05\x5c\xb4\x09\x2a"
	"\xde\x6b\x52\x98\x01\xef\x36\x3d"
	"\xbd\xf9\x8f\xa8\x3e\xaa\xcd\xd1"
	"\x01\x2d\x42\x49\xc3\xb6\x84\xbb"
	"\x48\x96\xe0\x90\x93\x6c\x48\x64"
	"\xd4\xfa\x7f\x93\x2c\xa6\x21\xc8"
	"\x7a\x23\x7b\xaa\x20\x56\x12\xae"
	"\x16\x9d\x94\x0f\x54\xa1\xec\xca"
	"\x51\x4e\xf2\x39\xf4\xf8\x5f\x04"
	"\x5a\x0d\xbf\xf5\x83\xa1\x15\xe1"
	"\xf5\x3c\xd8\x62\xa3\xed\x47\x89"
	"\x85\x4c\xe5\xdb\xac\x9e\x17\x1d"
	"\x0c\x09\xe3\x3e\x39\x5b\x4d\x74"
	"\x0e\xf5\x34\xee\x70\x11\x4c\xfd"
	"\xdb\x34\xb1\xb5\x10\x3f\x73\xb7"
	"\xf5\xfa\xed\xb0\x1f\xa5\xcd\x3c"
	"\x8d\x35\x83\xd4\x11\x44\x6e\x6c"
	"\x5b\xe0\x0e\x69\xa5\x39\xe5\xbb"
	"\xa9\x57\x24\x37\xe6\x1f\xdd\xcf"
	"\x16\x2a\x13\xf9\x6a\x2d\x90\xa0"
	"\x03\x60\x7a\xed\x69\xd5\x00\x8b"
	"\x7e\x4f\xcb\xb9\xfa\x91\xb9\x37"
	"\xc1\x26\xce\x90\x97\x22\x64\x64"
	"\xc1\x72\x43\x1b\xf6\xac\xc1\x54"
	"\x8a\x10\x9c\xdd\x8d\xd5\x8e\xb2"
	"\xe4\x85\xda\xe0\x20\x5f\xf4\xb4"
	"\x15\xb5\xa0\x8d\x12\x74\x49\x23"
	"\x3a\xdf\x4a\xd3\xf0\x3b\x89\xeb"
	"\xf8\xcc\x62\x7b\xfb\x93\x07\x41"
	"\x61\x26\x94\x58\x70\xa6\x3c\xe4"
	"\xff\x58\xc4\x13\x3d\xcb\x36\x6b"
	"\x32\xe5\xb2\x6d\x03\x74\x6f\x76"
	"\x93\x77\xde\x48\xc4\xfa\x30\x4a"
	"\xda\x49\x80\x77\x0f\x1c\xbe\x11"
	"\xc8\x48\xb1\xe5\xbb\xf2\x8a\xe1"
	"\x96\x2f\x9f\xd1\x8e\x8a\x5c\xe2"
	"\xf7\xd7\xd8\x54\xf3\x3f\xc4\x91"
	"\xb8\xfb\x86\xdc\x46\x24\x91\x60"
	"\x6c\x2f\xc9\x41\x37\x51\x49\x54"
	"\x09\x81\x21\xf3\x03\x9f\x2b\xe3"
	"\x1f\x39\x63\xaf\xf4\xd7\x53\x60"
	"\xa7\xc7\x54\xf9\xee\xb1\xb1\x7d"
	"\x75\x54\x65\x93\xfe\xb1\x68\x6b"
	"\x57\x02\xf9\xbb\x0e\xf9\xf8\xbf"
	"\x01\x12\x27\xb4\xfe\xe4\x79\x7a"
	"\x40\x5b\x51\x4b\xdf\x38\xec\xb1"
	"\x6a\x56\xff\x35\x4d\x42\x33\xaa"
	"\x6f\x1b\xe4\xdc\xe0\xdb\x85\x35"
	"\x62\x10\xd4\xec\xeb\xc5\x7e\x45"
	"\x1c\x6f\x17\xca\x3b\x8e\x2d\x66"
	"\x4f\x4b\x36\x56\xcd\x1b\x59\xaa"
	"\xd2\x9b\x17\xb9\x58\xdf\x7b\x64"
	"\x8a\xff\x3b\x9c\xa6\xb5\x48\x9e"
	"\xaa\xe2\x5d\x09\x71\x32\x5f\xb6"
	"\x29\xbe\xe7\xc7\x52\x7e\x91\x82"
	"\x6b\x6d\x33\xe1\x34\x06\x36\x21"
	"\x5e\xbe\x1e\x2f\x3e\xc1\xfb\xea"
	"\x49\x2c\xb5\xca\xf7\xb0\x37\xea"
	"\x1f\xed\x10\x04\xd9\x48\x0d\x1a"
	"\x1c\xfb\xe7\x84\x0e\x83\x53\x74"
	"\xc7\x65\xe2\x5c\xe5\xba\x73\x4c"
	"\x0e\xe1\xb5\x11\x45\x61\x43\x46"
	"\xaa\x25\x8f\xbd\x85\x08\xfa\x4c"
	"\x15\xc1\xc0\xd8\xf5\xdc\x16\xbb"
	"\x7b\x1d\xe3\x87\x57\xa7\x2a\x1d"
	"\x38\x58\x9e\x8a\x43\xdc\x57"
	"\xd1\x81\x7d\x2b\xe9\xff\x99\x3a"
	"\x4b\x24\x52\x58\x55\xe1\x49\x14";

static struct {
	const u8	*ptext;
	const u8	*ctext;

	u8		key[AES_MAX_KEY_SIZE];
	u8		iv[GCM_AES_IV_SIZE];
	u8		assoc[20];

	int		klen;
	int		clen;
	int		plen;
	int		alen;
} const aesgcm_tv[] __initconst = {
	{ /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
		.klen	= 16,
		.ctext	= ctext0,
		.clen	= sizeof(ctext0),
	}, {
		.klen	= 16,
		.ptext	= ptext1,
		.plen	= sizeof(ptext1),
		.ctext	= ctext1,
		.clen	= sizeof(ctext1),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
		.klen	= 16,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext2,
		.plen	= sizeof(ptext2),
		.ctext	= ctext2,
		.clen	= sizeof(ctext2),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
		.klen	= 16,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext3,
		.plen	= sizeof(ptext3),
		.assoc	= "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xab\xad\xda\xd2",
		.alen	= 20,
		.ctext	= ctext3,
		.clen	= sizeof(ctext3),
	}, {
		.klen	= 24,
		.ctext	= ctext4,
		.clen	= sizeof(ctext4),
	}, {
		.klen	= 24,
		.ptext	= ptext1,
		.plen	= sizeof(ptext1),
		.ctext	= ctext5,
		.clen	= sizeof(ctext5),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
			  "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
		.klen	= 24,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext6,
		.plen	= sizeof(ptext6),
		.ctext	= ctext6,
		.clen	= sizeof(ctext6),
	}, {
		.klen	= 32,
		.ctext	= ctext7,
		.clen	= sizeof(ctext7),
	}, {
		.klen	= 32,
		.ptext	= ptext1,
		.plen	= sizeof(ptext1),
		.ctext	= ctext8,
		.clen	= sizeof(ctext8),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
			  "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
		.klen	= 32,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext9,
		.plen	= sizeof(ptext9),
		.ctext	= ctext9,
		.clen	= sizeof(ctext9),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
			  "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
		.klen	= 32,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext10,
		.plen	= sizeof(ptext10),
		.assoc	= "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xab\xad\xda\xd2",
		.alen	= 20,
		.ctext	= ctext10,
		.clen	= sizeof(ctext10),
	}, {
		.key	= "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
			  "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
			  "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
		.klen	= 24,
		.iv	= "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
			  "\xde\xca\xf8\x88",
		.ptext	= ptext11,
		.plen	= sizeof(ptext11),
		.assoc	= "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
			  "\xab\xad\xda\xd2",
		.alen	= 20,
		.ctext	= ctext11,
		.clen	= sizeof(ctext11),
	}, {
		.key	= "\x62\x35\xf8\x95\xfc\xa5\xeb\xf6"
			  "\x0e\x92\x12\x04\xd3\xa1\x3f\x2e"
			  "\x8b\x32\xcf\xe7\x44\xed\x13\x59"
			  "\x04\x38\x77\xb0\xb9\xad\xb4\x38",
		.klen	= 32,
		.iv	= "\x00\xff\xff\xff\xff\x00\x00\xff"
			  "\xff\xff\x00\xff",
		.ptext	= ptext12,
		.plen	= sizeof(ptext12),
		.ctext	= ctext12,
		.clen	= sizeof(ctext12),
	}
};

static int __init libaesgcm_init(void)
{
	for (int i = 0; i < ARRAY_SIZE(aesgcm_tv); i++) {
		u8 tagbuf[AES_BLOCK_SIZE];
		int plen = aesgcm_tv[i].plen;
		struct aesgcm_ctx ctx;
		u8 buf[sizeof(ptext12)];

		if (aesgcm_expandkey(&ctx, aesgcm_tv[i].key, aesgcm_tv[i].klen,
				     aesgcm_tv[i].clen - plen)) {
			pr_err("aesgcm_expandkey() failed on vector %d\n", i);
			return -ENODEV;
		}

		if (!aesgcm_decrypt(&ctx, buf, aesgcm_tv[i].ctext, plen,
				    aesgcm_tv[i].assoc, aesgcm_tv[i].alen,
				    aesgcm_tv[i].iv, aesgcm_tv[i].ctext + plen)
		    || memcmp(buf, aesgcm_tv[i].ptext, plen)) {
			pr_err("aesgcm_decrypt() #1 failed on vector %d\n", i);
			return -ENODEV;
		}

		/* encrypt in place */
		aesgcm_encrypt(&ctx, buf, buf, plen, aesgcm_tv[i].assoc,
			       aesgcm_tv[i].alen, aesgcm_tv[i].iv, tagbuf);
		if (memcmp(buf, aesgcm_tv[i].ctext, plen)) {
			pr_err("aesgcm_encrypt() failed on vector %d\n", i);
			return -ENODEV;
		}

		/* decrypt in place */
		if (!aesgcm_decrypt(&ctx, buf, buf, plen, aesgcm_tv[i].assoc,
				    aesgcm_tv[i].alen, aesgcm_tv[i].iv, tagbuf)
		    || memcmp(buf, aesgcm_tv[i].ptext, plen)) {
			pr_err("aesgcm_decrypt() #2 failed on vector %d\n", i);
			return -ENODEV;
		}
	}
	return 0;
}
module_init(libaesgcm_init);

static void __exit libaesgcm_exit(void)
{
}
module_exit(libaesgcm_exit);
#endif
