Each crypto_tfm object contains fields with verbose names for the chosen algorithm and it's driver, which is potentially interesting for userspace to know. This patch exports them to the later as part of struct session_op. --- cryptodev.h | 9 +++++++++ cryptodev_main.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/cryptodev.h b/cryptodev.h index f367262..a20f1d2 100644 --- a/cryptodev.h +++ b/cryptodev.h @@ -68,6 +68,9 @@ enum cryptodev_crypto_op_t { /* Values for hashes/MAC */ #define AALG_MAX_RESULT_LEN 64 +/* maximum length of verbose alg names (depends on CRYPTO_MAX_ALG_NAME) */ +#define CRYPTODEV_MAX_ALG_NAME 64 + /* input of CIOCGSESSION */ struct session_op { /* Specify either cipher or mac @@ -83,6 +86,12 @@ struct session_op { __u32 ses; /* session identifier */ __u16 alignmask; /* alignment constraints */ + + /* verbose names for the requested ciphers */ + struct alg_info { + char cra_name[CRYPTODEV_MAX_ALG_NAME]; + char cra_driver_name[CRYPTODEV_MAX_ALG_NAME]; + } cipher_info, hash_info; }; #define COP_ENCRYPT 0 diff --git a/cryptodev_main.c b/cryptodev_main.c index e869557..2c322a4 100644 --- a/cryptodev_main.c +++ b/cryptodev_main.c @@ -32,6 +32,7 @@ * */ +#include <crypto/hash.h> #include <linux/crypto.h> #include <linux/mm.h> #include <linux/highmem.h> @@ -126,6 +127,14 @@ struct csession { /* cryptodev's own workqueue, keeps crypto tasks from disturbing the force */ static struct workqueue_struct *cryptodev_wq; +static inline void tfm_info_to_alg_info(struct alg_info *dst, struct crypto_tfm *tfm) +{ + snprintf(dst->cra_name, CRYPTODEV_MAX_ALG_NAME, + "%s", crypto_tfm_alg_name(tfm)); + snprintf(dst->cra_driver_name, CRYPTODEV_MAX_ALG_NAME, + "%s", crypto_tfm_alg_driver_name(tfm)); +} + /* Prepare session for future use. */ static int crypto_create_session(struct fcrypt *fcr, struct session_op *sop) @@ -260,6 +269,9 @@ crypto_create_session(struct fcrypt *fcr, struct session_op *sop) ret = -EINVAL; goto error_cipher; } + + tfm_info_to_alg_info(&sop->cipher_info, + crypto_ablkcipher_tfm(ses_new->cdata.async.s)); } if (hash_name) { @@ -288,6 +300,9 @@ crypto_create_session(struct fcrypt *fcr, struct session_op *sop) ret = -EINVAL; goto error_hash; } + + tfm_info_to_alg_info(&sop->hash_info, + crypto_ahash_tfm(ses_new->hdata.async.s)); } sop->alignmask = ses_new->alignmask = max(ses_new->cdata.alignmask, -- 1.7.3.2 _______________________________________________ Cryptodev-linux-devel mailing list Cryptodev-linux-devel@gna.org https://mail.gna.org/listinfo/cryptodev-linux-devel