1 /*
2  * Glue Code for the asm optimized version of the AES Cipher Algorithm
3  *
4  */
5 
6 #include <linux/module.h>
7 #include <crypto/aes.h>
8 #include <asm/aes.h>
9 
10 asmlinkage void aes_enc_blk(struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
11 asmlinkage void aes_dec_blk(struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
12 
crypto_aes_encrypt_x86(struct crypto_aes_ctx * ctx,u8 * dst,const u8 * src)13 void crypto_aes_encrypt_x86(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
14 {
15 	aes_enc_blk(ctx, dst, src);
16 }
17 EXPORT_SYMBOL_GPL(crypto_aes_encrypt_x86);
18 
crypto_aes_decrypt_x86(struct crypto_aes_ctx * ctx,u8 * dst,const u8 * src)19 void crypto_aes_decrypt_x86(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
20 {
21 	aes_dec_blk(ctx, dst, src);
22 }
23 EXPORT_SYMBOL_GPL(crypto_aes_decrypt_x86);
24 
aes_encrypt(struct crypto_tfm * tfm,u8 * dst,const u8 * src)25 static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
26 {
27 	aes_enc_blk(crypto_tfm_ctx(tfm), dst, src);
28 }
29 
aes_decrypt(struct crypto_tfm * tfm,u8 * dst,const u8 * src)30 static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
31 {
32 	aes_dec_blk(crypto_tfm_ctx(tfm), dst, src);
33 }
34 
35 static struct crypto_alg aes_alg = {
36 	.cra_name		= "aes",
37 	.cra_driver_name	= "aes-asm",
38 	.cra_priority		= 200,
39 	.cra_flags		= CRYPTO_ALG_TYPE_CIPHER,
40 	.cra_blocksize		= AES_BLOCK_SIZE,
41 	.cra_ctxsize		= sizeof(struct crypto_aes_ctx),
42 	.cra_module		= THIS_MODULE,
43 	.cra_list		= LIST_HEAD_INIT(aes_alg.cra_list),
44 	.cra_u	= {
45 		.cipher	= {
46 			.cia_min_keysize	= AES_MIN_KEY_SIZE,
47 			.cia_max_keysize	= AES_MAX_KEY_SIZE,
48 			.cia_setkey		= crypto_aes_set_key,
49 			.cia_encrypt		= aes_encrypt,
50 			.cia_decrypt		= aes_decrypt
51 		}
52 	}
53 };
54 
aes_init(void)55 static int __init aes_init(void)
56 {
57 	return crypto_register_alg(&aes_alg);
58 }
59 
aes_fini(void)60 static void __exit aes_fini(void)
61 {
62 	crypto_unregister_alg(&aes_alg);
63 }
64 
65 module_init(aes_init);
66 module_exit(aes_fini);
67 
68 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized");
69 MODULE_LICENSE("GPL");
70 MODULE_ALIAS("aes");
71 MODULE_ALIAS("aes-asm");
72