diff options
author | Pascal van Leeuwen <pascalvanl@gmail.com> | 2019-08-30 03:52:31 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-09-05 00:37:29 -0400 |
commit | 48e97afa41784c4b94e01f8605179bd49e759d03 (patch) | |
tree | e786207ea77ba6576c427aefb96212925e840d5c | |
parent | 3e450886ec573cb9d7cb1758317b5e4e0f308b52 (diff) |
crypto: inside-secure - Added AES-CFB support
This patch adds support for AES in 128 bit cipher feedback mode (AES-CFB).
Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | drivers/crypto/inside-secure/safexcel.c | 1 | ||||
-rw-r--r-- | drivers/crypto/inside-secure/safexcel.h | 2 | ||||
-rw-r--r-- | drivers/crypto/inside-secure/safexcel_cipher.c | 36 |
3 files changed, 39 insertions, 0 deletions
diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c index 46cdcbeb122b..3196cb30e1b5 100644 --- a/drivers/crypto/inside-secure/safexcel.c +++ b/drivers/crypto/inside-secure/safexcel.c | |||
@@ -981,6 +981,7 @@ static struct safexcel_alg_template *safexcel_algs[] = { | |||
981 | &safexcel_alg_cbc_des3_ede, | 981 | &safexcel_alg_cbc_des3_ede, |
982 | &safexcel_alg_ecb_aes, | 982 | &safexcel_alg_ecb_aes, |
983 | &safexcel_alg_cbc_aes, | 983 | &safexcel_alg_cbc_aes, |
984 | &safexcel_alg_cfb_aes, | ||
984 | &safexcel_alg_ctr_aes, | 985 | &safexcel_alg_ctr_aes, |
985 | &safexcel_alg_md5, | 986 | &safexcel_alg_md5, |
986 | &safexcel_alg_sha1, | 987 | &safexcel_alg_sha1, |
diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h index c6f93ec88c84..6f781ed1f0a5 100644 --- a/drivers/crypto/inside-secure/safexcel.h +++ b/drivers/crypto/inside-secure/safexcel.h | |||
@@ -336,6 +336,7 @@ struct safexcel_context_record { | |||
336 | /* control1 */ | 336 | /* control1 */ |
337 | #define CONTEXT_CONTROL_CRYPTO_MODE_ECB (0 << 0) | 337 | #define CONTEXT_CONTROL_CRYPTO_MODE_ECB (0 << 0) |
338 | #define CONTEXT_CONTROL_CRYPTO_MODE_CBC (1 << 0) | 338 | #define CONTEXT_CONTROL_CRYPTO_MODE_CBC (1 << 0) |
339 | #define CONTEXT_CONTROL_CRYPTO_MODE_CFB (5 << 0) | ||
339 | #define CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD (6 << 0) | 340 | #define CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD (6 << 0) |
340 | #define CONTEXT_CONTROL_CRYPTO_MODE_XTS (7 << 0) | 341 | #define CONTEXT_CONTROL_CRYPTO_MODE_XTS (7 << 0) |
341 | #define CONTEXT_CONTROL_CRYPTO_MODE_XCM ((6 << 0) | BIT(17)) | 342 | #define CONTEXT_CONTROL_CRYPTO_MODE_XCM ((6 << 0) | BIT(17)) |
@@ -767,6 +768,7 @@ extern struct safexcel_alg_template safexcel_alg_ecb_des3_ede; | |||
767 | extern struct safexcel_alg_template safexcel_alg_cbc_des3_ede; | 768 | extern struct safexcel_alg_template safexcel_alg_cbc_des3_ede; |
768 | extern struct safexcel_alg_template safexcel_alg_ecb_aes; | 769 | extern struct safexcel_alg_template safexcel_alg_ecb_aes; |
769 | extern struct safexcel_alg_template safexcel_alg_cbc_aes; | 770 | extern struct safexcel_alg_template safexcel_alg_cbc_aes; |
771 | extern struct safexcel_alg_template safexcel_alg_cfb_aes; | ||
770 | extern struct safexcel_alg_template safexcel_alg_ctr_aes; | 772 | extern struct safexcel_alg_template safexcel_alg_ctr_aes; |
771 | extern struct safexcel_alg_template safexcel_alg_md5; | 773 | extern struct safexcel_alg_template safexcel_alg_md5; |
772 | extern struct safexcel_alg_template safexcel_alg_sha1; | 774 | extern struct safexcel_alg_template safexcel_alg_sha1; |
diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c index 7091b6086e2e..4e06c61f9ff9 100644 --- a/drivers/crypto/inside-secure/safexcel_cipher.c +++ b/drivers/crypto/inside-secure/safexcel_cipher.c | |||
@@ -1136,6 +1136,42 @@ struct safexcel_alg_template safexcel_alg_cbc_aes = { | |||
1136 | }, | 1136 | }, |
1137 | }; | 1137 | }; |
1138 | 1138 | ||
1139 | static int safexcel_skcipher_aes_cfb_cra_init(struct crypto_tfm *tfm) | ||
1140 | { | ||
1141 | struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); | ||
1142 | |||
1143 | safexcel_skcipher_cra_init(tfm); | ||
1144 | ctx->alg = SAFEXCEL_AES; | ||
1145 | ctx->mode = CONTEXT_CONTROL_CRYPTO_MODE_CFB; | ||
1146 | return 0; | ||
1147 | } | ||
1148 | |||
1149 | struct safexcel_alg_template safexcel_alg_cfb_aes = { | ||
1150 | .type = SAFEXCEL_ALG_TYPE_SKCIPHER, | ||
1151 | .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_AES_XFB, | ||
1152 | .alg.skcipher = { | ||
1153 | .setkey = safexcel_skcipher_aes_setkey, | ||
1154 | .encrypt = safexcel_encrypt, | ||
1155 | .decrypt = safexcel_decrypt, | ||
1156 | .min_keysize = AES_MIN_KEY_SIZE, | ||
1157 | .max_keysize = AES_MAX_KEY_SIZE, | ||
1158 | .ivsize = AES_BLOCK_SIZE, | ||
1159 | .base = { | ||
1160 | .cra_name = "cfb(aes)", | ||
1161 | .cra_driver_name = "safexcel-cfb-aes", | ||
1162 | .cra_priority = SAFEXCEL_CRA_PRIORITY, | ||
1163 | .cra_flags = CRYPTO_ALG_ASYNC | | ||
1164 | CRYPTO_ALG_KERN_DRIVER_ONLY, | ||
1165 | .cra_blocksize = 1, | ||
1166 | .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), | ||
1167 | .cra_alignmask = 0, | ||
1168 | .cra_init = safexcel_skcipher_aes_cfb_cra_init, | ||
1169 | .cra_exit = safexcel_skcipher_cra_exit, | ||
1170 | .cra_module = THIS_MODULE, | ||
1171 | }, | ||
1172 | }, | ||
1173 | }; | ||
1174 | |||
1139 | static int safexcel_skcipher_aesctr_setkey(struct crypto_skcipher *ctfm, | 1175 | static int safexcel_skcipher_aesctr_setkey(struct crypto_skcipher *ctfm, |
1140 | const u8 *key, unsigned int len) | 1176 | const u8 *key, unsigned int len) |
1141 | { | 1177 | { |