• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/crypto/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_u	= {
44 		.cipher	= {
45 			.cia_min_keysize	= AES_MIN_KEY_SIZE,
46 			.cia_max_keysize	= AES_MAX_KEY_SIZE,
47 			.cia_setkey		= crypto_aes_set_key,
48 			.cia_encrypt		= aes_encrypt,
49 			.cia_decrypt		= aes_decrypt
50 		}
51 	}
52 };
53 
aes_init(void)54 static int __init aes_init(void)
55 {
56 	return crypto_register_alg(&aes_alg);
57 }
58 
aes_fini(void)59 static void __exit aes_fini(void)
60 {
61 	crypto_unregister_alg(&aes_alg);
62 }
63 
64 module_init(aes_init);
65 module_exit(aes_fini);
66 
67 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized");
68 MODULE_LICENSE("GPL");
69 MODULE_ALIAS_CRYPTO("aes");
70 MODULE_ALIAS_CRYPTO("aes-asm");
71