Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/crypto/aes_ti.c
26131 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Scalar fixed time AES core transform
4
*
5
* Copyright (C) 2017 Linaro Ltd <[email protected]>
6
*/
7
8
#include <crypto/aes.h>
9
#include <crypto/algapi.h>
10
#include <linux/module.h>
11
12
static int aesti_set_key(struct crypto_tfm *tfm, const u8 *in_key,
13
unsigned int key_len)
14
{
15
struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
16
17
return aes_expandkey(ctx, in_key, key_len);
18
}
19
20
static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
21
{
22
const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
23
unsigned long flags;
24
25
/*
26
* Temporarily disable interrupts to avoid races where cachelines are
27
* evicted when the CPU is interrupted to do something else.
28
*/
29
local_irq_save(flags);
30
31
aes_encrypt(ctx, out, in);
32
33
local_irq_restore(flags);
34
}
35
36
static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
37
{
38
const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
39
unsigned long flags;
40
41
/*
42
* Temporarily disable interrupts to avoid races where cachelines are
43
* evicted when the CPU is interrupted to do something else.
44
*/
45
local_irq_save(flags);
46
47
aes_decrypt(ctx, out, in);
48
49
local_irq_restore(flags);
50
}
51
52
static struct crypto_alg aes_alg = {
53
.cra_name = "aes",
54
.cra_driver_name = "aes-fixed-time",
55
.cra_priority = 100 + 1,
56
.cra_flags = CRYPTO_ALG_TYPE_CIPHER,
57
.cra_blocksize = AES_BLOCK_SIZE,
58
.cra_ctxsize = sizeof(struct crypto_aes_ctx),
59
.cra_module = THIS_MODULE,
60
61
.cra_cipher.cia_min_keysize = AES_MIN_KEY_SIZE,
62
.cra_cipher.cia_max_keysize = AES_MAX_KEY_SIZE,
63
.cra_cipher.cia_setkey = aesti_set_key,
64
.cra_cipher.cia_encrypt = aesti_encrypt,
65
.cra_cipher.cia_decrypt = aesti_decrypt
66
};
67
68
static int __init aes_init(void)
69
{
70
return crypto_register_alg(&aes_alg);
71
}
72
73
static void __exit aes_fini(void)
74
{
75
crypto_unregister_alg(&aes_alg);
76
}
77
78
module_init(aes_init);
79
module_exit(aes_fini);
80
81
MODULE_DESCRIPTION("Generic fixed time AES");
82
MODULE_AUTHOR("Ard Biesheuvel <[email protected]>");
83
MODULE_LICENSE("GPL v2");
84
85