aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2016-12-08 16:25:58 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2017-06-16 16:51:10 +0300
commit19c488fdd9f9868cbe60f1ff8558f48c7bba6f04 (patch)
treea5da69e3b7eab6f77d6921c3447c1d05f7de4744 /platform/linux-generic
parent966c1c956a21f4e70c873a3c3546e65299837457 (diff)
linux-gen: crypto: add algo capability functions
Implemented cipher and authentication algorithm capability functions. Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Reviewed-by: Balasubramanian Manoharan <bala.manoharan@linaro.org> Reviewed-by: Nikhil Agarwal <nikhil.agarwal@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic')
-rw-r--r--platform/linux-generic/odp_crypto.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c
index dfeb9f3f2..6963ee625 100644
--- a/platform/linux-generic/odp_crypto.c
+++ b/platform/linux-generic/odp_crypto.c
@@ -656,6 +656,83 @@ int odp_crypto_auth_capability(odp_auth_alg_t auth,
return num;
}
+int odp_crypto_cipher_capability(odp_cipher_alg_t cipher,
+ odp_crypto_cipher_capability_t dst[],
+ int num_copy)
+{
+ const odp_crypto_cipher_capability_t *src;
+ int num;
+ int size = sizeof(odp_crypto_cipher_capability_t);
+
+ switch (cipher) {
+ case ODP_CIPHER_ALG_NULL:
+ src = NULL;
+ num = 0;
+ break;
+ case ODP_CIPHER_ALG_DES:
+ src = cipher_capa_des;
+ num = sizeof(cipher_capa_des) / size;
+ break;
+ case ODP_CIPHER_ALG_3DES_CBC:
+ src = cipher_capa_trides_cbc;
+ num = sizeof(cipher_capa_trides_cbc) / size;
+ break;
+ case ODP_CIPHER_ALG_AES_CBC:
+ src = cipher_capa_aes_cbc;
+ num = sizeof(cipher_capa_aes_cbc) / size;
+ break;
+ case ODP_CIPHER_ALG_AES_GCM:
+ src = cipher_capa_aes_gcm;
+ num = sizeof(cipher_capa_aes_gcm) / size;
+ break;
+ default:
+ return -1;
+ }
+
+ if (num < num_copy)
+ num_copy = num;
+
+ memcpy(dst, src, num_copy * size);
+
+ return num;
+}
+
+int odp_crypto_auth_capability(odp_auth_alg_t auth,
+ odp_crypto_auth_capability_t dst[], int num_copy)
+{
+ const odp_crypto_auth_capability_t *src;
+ int num;
+ int size = sizeof(odp_crypto_auth_capability_t);
+
+ switch (auth) {
+ case ODP_AUTH_ALG_NULL:
+ src = NULL;
+ num = 0;
+ break;
+ case ODP_AUTH_ALG_MD5_HMAC:
+ src = auth_capa_md5_hmac;
+ num = sizeof(auth_capa_md5_hmac) / size;
+ break;
+ case ODP_AUTH_ALG_SHA256_HMAC:
+ src = auth_capa_sha256_hmac;
+ num = sizeof(auth_capa_sha256_hmac) / size;
+ break;
+ case ODP_AUTH_ALG_AES_GCM:
+ src = auth_capa_aes_gcm;
+ num = sizeof(auth_capa_aes_gcm) / size;
+ break;
+ default:
+ return -1;
+ }
+
+ if (num < num_copy)
+ num_copy = num;
+
+ memcpy(dst, src, num_copy * size);
+
+ return num;
+}
+
int
odp_crypto_session_create(odp_crypto_session_param_t *param,
odp_crypto_session_t *session_out,