diff options
author | Steffen Klassert <steffen.klassert@secunet.com> | 2011-09-27 01:41:54 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2011-10-21 08:24:05 -0400 |
commit | 50496a1fab6c6a90b77da4b247321a88e632bd46 (patch) | |
tree | 5e6cd05515919eeb151160c3af702b4839ab0afb | |
parent | 6238cbaec429c98d1a280014839c934107c7c8f6 (diff) |
crypto: Add userspace report for blkcipher type algorithms
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | crypto/blkcipher.c | 25 | ||||
-rw-r--r-- | include/linux/cryptouser.h | 10 |
2 files changed, 35 insertions, 0 deletions
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c index 7a7219266e3c..2572d2600136 100644 --- a/crypto/blkcipher.c +++ b/crypto/blkcipher.c | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <linux/seq_file.h> | 24 | #include <linux/seq_file.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | #include <linux/string.h> | 26 | #include <linux/string.h> |
27 | #include <linux/cryptouser.h> | ||
28 | #include <net/netlink.h> | ||
27 | 29 | ||
28 | #include "internal.h" | 30 | #include "internal.h" |
29 | 31 | ||
@@ -492,6 +494,28 @@ static int crypto_init_blkcipher_ops(struct crypto_tfm *tfm, u32 type, u32 mask) | |||
492 | return crypto_init_blkcipher_ops_async(tfm); | 494 | return crypto_init_blkcipher_ops_async(tfm); |
493 | } | 495 | } |
494 | 496 | ||
497 | static int crypto_blkcipher_report(struct sk_buff *skb, struct crypto_alg *alg) | ||
498 | { | ||
499 | struct crypto_report_blkcipher rblkcipher; | ||
500 | |||
501 | snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "blkcipher"); | ||
502 | snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s", | ||
503 | alg->cra_blkcipher.geniv ?: "<default>"); | ||
504 | |||
505 | rblkcipher.blocksize = alg->cra_blocksize; | ||
506 | rblkcipher.min_keysize = alg->cra_blkcipher.min_keysize; | ||
507 | rblkcipher.max_keysize = alg->cra_blkcipher.max_keysize; | ||
508 | rblkcipher.ivsize = alg->cra_blkcipher.ivsize; | ||
509 | |||
510 | NLA_PUT(skb, CRYPTOCFGA_REPORT_BLKCIPHER, | ||
511 | sizeof(struct crypto_report_blkcipher), &rblkcipher); | ||
512 | |||
513 | return 0; | ||
514 | |||
515 | nla_put_failure: | ||
516 | return -EMSGSIZE; | ||
517 | } | ||
518 | |||
495 | static void crypto_blkcipher_show(struct seq_file *m, struct crypto_alg *alg) | 519 | static void crypto_blkcipher_show(struct seq_file *m, struct crypto_alg *alg) |
496 | __attribute__ ((unused)); | 520 | __attribute__ ((unused)); |
497 | static void crypto_blkcipher_show(struct seq_file *m, struct crypto_alg *alg) | 521 | static void crypto_blkcipher_show(struct seq_file *m, struct crypto_alg *alg) |
@@ -511,6 +535,7 @@ const struct crypto_type crypto_blkcipher_type = { | |||
511 | #ifdef CONFIG_PROC_FS | 535 | #ifdef CONFIG_PROC_FS |
512 | .show = crypto_blkcipher_show, | 536 | .show = crypto_blkcipher_show, |
513 | #endif | 537 | #endif |
538 | .report = crypto_blkcipher_report, | ||
514 | }; | 539 | }; |
515 | EXPORT_SYMBOL_GPL(crypto_blkcipher_type); | 540 | EXPORT_SYMBOL_GPL(crypto_blkcipher_type); |
516 | 541 | ||
diff --git a/include/linux/cryptouser.h b/include/linux/cryptouser.h index ee4688221975..a96a1a11ee66 100644 --- a/include/linux/cryptouser.h +++ b/include/linux/cryptouser.h | |||
@@ -38,6 +38,7 @@ enum crypto_attr_type_t { | |||
38 | CRYPTOCFGA_PRIORITY_VAL, /* __u32 */ | 38 | CRYPTOCFGA_PRIORITY_VAL, /* __u32 */ |
39 | CRYPTOCFGA_REPORT_LARVAL, /* struct crypto_report_larval */ | 39 | CRYPTOCFGA_REPORT_LARVAL, /* struct crypto_report_larval */ |
40 | CRYPTOCFGA_REPORT_HASH, /* struct crypto_report_hash */ | 40 | CRYPTOCFGA_REPORT_HASH, /* struct crypto_report_hash */ |
41 | CRYPTOCFGA_REPORT_BLKCIPHER, /* struct crypto_report_blkcipher */ | ||
41 | __CRYPTOCFGA_MAX | 42 | __CRYPTOCFGA_MAX |
42 | 43 | ||
43 | #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1) | 44 | #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1) |
@@ -62,3 +63,12 @@ struct crypto_report_hash { | |||
62 | unsigned int blocksize; | 63 | unsigned int blocksize; |
63 | unsigned int digestsize; | 64 | unsigned int digestsize; |
64 | }; | 65 | }; |
66 | |||
67 | struct crypto_report_blkcipher { | ||
68 | char type[CRYPTO_MAX_NAME]; | ||
69 | char geniv[CRYPTO_MAX_NAME]; | ||
70 | unsigned int blocksize; | ||
71 | unsigned int min_keysize; | ||
72 | unsigned int max_keysize; | ||
73 | unsigned int ivsize; | ||
74 | }; | ||