lib/crypto/x86/aes.h

Source file repositories/reference/linux-study-clean/lib/crypto/x86/aes.h

File Facts

System
Linux kernel
Corpus path
lib/crypto/x86/aes.h
Extension
.h
Size
2815 bytes
Lines
86
Domain
Kernel Services
Bucket
lib
Inferred role
Kernel Services: implementation source
Status
source implementation candidate

Why This File Exists

Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.

Dependency Surface

Detected Declarations

Annotated Snippet

irq_fpu_usable()) {
		kernel_fpu_begin();
		if (key_len == AES_KEYSIZE_128)
			aes128_expandkey_aesni(rndkeys, inv_rndkeys, in_key);
		else
			aes256_expandkey_aesni(rndkeys, inv_rndkeys, in_key);
		kernel_fpu_end();
	} else {
		aes_expandkey_generic(rndkeys, inv_rndkeys, in_key, key_len);
	}
}

static void aes_encrypt_arch(const struct aes_enckey *key,
			     u8 out[AES_BLOCK_SIZE],
			     const u8 in[AES_BLOCK_SIZE])
{
	if (static_branch_likely(&have_aes) && irq_fpu_usable()) {
		kernel_fpu_begin();
		aes_encrypt_aesni(key->k.rndkeys, key->nrounds, out, in);
		kernel_fpu_end();
	} else {
		aes_encrypt_generic(key->k.rndkeys, key->nrounds, out, in);
	}
}

static void aes_decrypt_arch(const struct aes_key *key,
			     u8 out[AES_BLOCK_SIZE],
			     const u8 in[AES_BLOCK_SIZE])
{
	if (static_branch_likely(&have_aes) && irq_fpu_usable()) {
		kernel_fpu_begin();
		aes_decrypt_aesni(key->inv_k.inv_rndkeys, key->nrounds,
				  out, in);
		kernel_fpu_end();
	} else {
		aes_decrypt_generic(key->inv_k.inv_rndkeys, key->nrounds,
				    out, in);
	}
}

#define aes_mod_init_arch aes_mod_init_arch
static void aes_mod_init_arch(void)
{
	if (boot_cpu_has(X86_FEATURE_AES))
		static_branch_enable(&have_aes);
}

Annotation

Implementation Notes