Added CRYPTO_ALG_KERN_DRIVER_ONLY flag.
Subsystems (4)
PATCH 1/1 Added CRYPTO_ALG_KERN_DRIVER_ONLY flag.
The added CRYPTO_ALG_KERN_DRIVER_ONLY flag indicates whether a cipher is only available via a kernel driver. If the cipher implementation might be available by using an instruction set or by porting the kernel code, then it must not be set.
--- drivers/crypto/geode-aes.c | 8 ++++-- drivers/crypto/hifn_795x.c | 3 +- drivers/crypto/ixp4xx_crypto.c | 2 + drivers/crypto/mv_cesa.c | 12 ++++++--- drivers/crypto/n2_core.c | 7 ++++- drivers/crypto/omap-aes.c | 8 ++++- drivers/crypto/omap-sham.c | 4 +++ drivers/crypto/picoxcell_crypto.c | 46 +++++++++++++++++++++++++++-------- drivers/crypto/s5p-sss.c | 6 +++- drivers/crypto/talitos.c | 48 ++++++++++++++++++++++++++---------- include/linux/crypto.h | 5 ++++ 11 files changed, 110 insertions(+), 39 deletions(-)
drivers/crypto/geode-aes.c +5 -3
@@ -392,8 +392,9 @@ static struct crypto_alg geode_cbc_alg = { .cra_name = "cbc(aes)", .cra_driver_name = "cbc-aes-geode", .cra_priority = 400, - .cra_flags =CRYPTO_ALG_TYPE_BLKCIPHER | - CRYPTO_ALG_NEED_FALLBACK, + .cra_flags =CRYPTO_ALG_TYPE_BLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_NEED_FALLBACK, .cra_init = fallback_init_blk, .cra_exit = fallback_exit_blk, .cra_blocksize = AES_MIN_BLOCK_SIZE,
@@ -479,7 +480,8 @@ static struct crypto_alg geode_ecb_alg = { .cra_driver_name = "ecb-aes-geode", .cra_priority = 400, .cra_flags =CRYPTO_ALG_TYPE_BLKCIPHER | - CRYPTO_ALG_NEED_FALLBACK, +CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_NEED_FALLBACK, .cra_init = fallback_init_blk, .cra_exit = fallback_exit_blk, .cra_blocksize = AES_MIN_BLOCK_SIZE,
drivers/crypto/hifn_795x.c +2 -1
@@ -2494,7 +2494,8 @@ static int hifn_alg_alloc(struct hifn_device *dev, struct hifn_alg_template *t) t->drv_name, dev->name); alg->alg.cra_priority =300 ; - alg->alg.cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER |CRYPTO_ALG_ASYNC ; + alg->alg.cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC ; alg->alg.cra_blocksize = t->bsize; alg->alg.cra_ctxsize =sizeof (struct hifn_context ); alg->alg.cra_alignmask =0 ;
drivers/crypto/ixp4xx_crypto.c +2 -0
@@ -1449,6 +1449,7 @@ static int __init ixp_module_init(void)/* block ciphers */ cra->cra_type = &crypto_ablkcipher_type; cra->cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC ;if (!cra->cra_ablkcipher.setkey) cra->cra_ablkcipher.setkey = ablk_setkey;
@@ -1461,6 +1462,7 @@ static int __init ixp_module_init(void)/* authenc */ cra->cra_type = &crypto_aead_type; cra->cra_flags =CRYPTO_ALG_TYPE_AEAD | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC ; cra->cra_aead.setkey = aead_setkey; cra->cra_aead.setauthsize = aead_setauthsize;
drivers/crypto/mv_cesa.c +8 -4
@@ -897,7 +897,8 @@ struct crypto_alg mv_aes_alg_ecb = { .cra_name = "ecb(aes)", .cra_driver_name = "mv-ecb-aes", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | + CRYPTO_ALG_KERN_DRIVER_ONLY | CRYPTO_ALG_ASYNC, .cra_blocksize = 16, .cra_ctxsize = sizeof(struct mv_ctx), .cra_alignmask = 0,
@@ -919,7 +920,8 @@ struct crypto_alg mv_aes_alg_cbc = { .cra_name = "cbc(aes)", .cra_driver_name = "mv-cbc-aes", .cra_priority = 300, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | + CRYPTO_ALG_KERN_DRIVER_ONLY | CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct mv_ctx), .cra_alignmask = 0,
@@ -951,7 +953,8 @@ struct ahash_alg mv_sha1_alg = { .cra_driver_name = "mv-sha1", .cra_priority = 300, .cra_flags = - CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, +CRYPTO_ALG_ASYNC |CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE, .cra_ctxsize = sizeof(struct mv_tfm_hash_ctx), .cra_init = mv_cra_hash_sha1_init,
@@ -975,7 +978,8 @@ struct ahash_alg mv_hmac_sha1_alg = { .cra_driver_name = "mv-hmac-sha1", .cra_priority = 300, .cra_flags = - CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, +CRYPTO_ALG_ASYNC |CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE, .cra_ctxsize = sizeof(struct mv_tfm_hash_ctx), .cra_init = mv_cra_hash_hmac_sha1_init,
drivers/crypto/n2_core.c +5 -2
@@ -1402,7 +1402,8 @@ static int __devinit __n2_register_one_cipher(const struct n2_cipher_tmpl *tmpl)snprintf (alg->cra_name,CRYPTO_MAX_ALG_NAME ,"%s" , tmpl->name);snprintf (alg->cra_driver_name,CRYPTO_MAX_ALG_NAME ,"%s-n2" , tmpl->drv_name); alg->cra_priority =N2_CRA_PRIORITY ; - alg->cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER |CRYPTO_ALG_ASYNC ; + alg->cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC ; alg->cra_blocksize = tmpl->block_size; p->enc_type = tmpl->enc_type; alg->cra_ctxsize =sizeof (struct n2_cipher_context );
@@ -1493,7 +1494,9 @@ static int __devinit __n2_register_one_ahash(const struct n2_hash_tmpl *tmpl)snprintf (base->cra_name,CRYPTO_MAX_ALG_NAME ,"%s" , tmpl->name);snprintf (base->cra_driver_name,CRYPTO_MAX_ALG_NAME ,"%s-n2" , tmpl->name); base->cra_priority =N2_CRA_PRIORITY ; - base->cra_flags =CRYPTO_ALG_TYPE_AHASH |CRYPTO_ALG_NEED_FALLBACK ; + base->cra_flags =CRYPTO_ALG_TYPE_AHASH | +CRYPTO_ALG_KERN_DRIVER_ONLY | +CRYPTO_ALG_NEED_FALLBACK ; base->cra_blocksize = tmpl->block_size; base->cra_ctxsize =sizeof (struct n2_hash_ctx ); base->cra_module =THIS_MODULE ;
drivers/crypto/omap-aes.c +6 -2
@@ -756,7 +756,9 @@ static struct crypto_alg algs[] = { .cra_name = "ecb(aes)", .cra_driver_name = "ecb-aes-omap", .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct omap_aes_ctx), .cra_alignmask = 0,
@@ -776,7 +778,9 @@ static struct crypto_alg algs[] = { .cra_name = "cbc(aes)", .cra_driver_name = "cbc-aes-omap", .cra_priority = 100, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, + .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | +CRYPTO_ALG_KERN_DRIVER_ONLY | + CRYPTO_ALG_ASYNC, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct omap_aes_ctx), .cra_alignmask = 0,
drivers/crypto/omap-sham.c +4 -0
@@ -953,6 +953,7 @@ static struct ahash_alg algs[] = { .cra_driver_name = "omap-sha1", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_AHASH | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE,
@@ -975,6 +976,7 @@ static struct ahash_alg algs[] = { .cra_driver_name = "omap-md5", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_AHASH | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE,
@@ -998,6 +1000,7 @@ static struct ahash_alg algs[] = { .cra_driver_name = "omap-hmac-sha1", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_AHASH | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE,
@@ -1022,6 +1025,7 @@ static struct ahash_alg algs[] = { .cra_driver_name = "omap-hmac-md5", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_AHASH | +CRYPTO_ALG_KERN_DRIVER_ONLY |CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = SHA1_BLOCK_SIZE,
drivers/crypto/picoxcell_crypto.c +35 -11
124 lines not on this page · raw message
drivers/crypto/s5p-sss.c +4 -2
@@ -518,7 +518,8 @@ static struct crypto_alg algs[] = { .cra_driver_name = "ecb-aes-s5p", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | - CRYPTO_ALG_ASYNC, +CRYPTO_ALG_ASYNC | + CRYPTO_ALG_KERN_DRIVER_ONLY, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct s5p_aes_ctx), .cra_alignmask = 0x0f,
@@ -538,7 +539,8 @@ static struct crypto_alg algs[] = { .cra_driver_name = "cbc-aes-s5p", .cra_priority = 100, .cra_flags =CRYPTO_ALG_TYPE_ABLKCIPHER | - CRYPTO_ALG_ASYNC, +CRYPTO_ALG_ASYNC | + CRYPTO_ALG_KERN_DRIVER_ONLY, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct s5p_aes_ctx), .cra_alignmask = 0x0f,
drivers/crypto/talitos.c +34 -14
132 lines not on this page · raw message
include/linux/crypto.h +5 -0
@@ -76,6 +76,11 @@*/ #define CRYPTO_ALG_INSTANCE 0x00000800 +/* Set this bit if the algorithm provided is hardware accelerated but +* not available to userspace via instruction set or so. +*/ +#define CRYPTO_ALG_KERN_DRIVER_ONLY 0x00001000 +/* * Transform masks and values (for crt_flags). */
Signature · 1 line
1.7.7.3
Quoted 6 lines · On Sun, 11 Dec 2011 13:26:26 +0100 Nikos Mavrogiannopoulos <[email protected]>…
The added
CRYPTO_ALG_KERN_DRIVER_ONLYflag indicates whether a cipher is only available via a kernel driver. If the cipher implementation might be available by using an instruction set or by porting the kernel code, then it must not be set.Signed-off-by Nikos Mavrogiannopoulos <[email protected]>
Quoted 13 lines
--- drivers/crypto/geode-aes.c | 8 ++++-- drivers/crypto/hifn_795x.c | 3 +- drivers/crypto/ixp4xx_crypto.c | 2 + drivers/crypto/mv_cesa.c | 12 ++++++--- drivers/crypto/n2_core.c | 7 ++++- drivers/crypto/omap-aes.c | 8 ++++- drivers/crypto/omap-sham.c | 4 +++ drivers/crypto/picoxcell_crypto.c | 46 +++++++++++++++++++++++++++-------- drivers/crypto/s5p-sss.c | 6 +++- drivers/crypto/talitos.c | 48 ++++++++++++++++++++++++++---------- include/linux/crypto.h | 5 ++++ 11 files changed, 110 insertions(+), 39 deletions(-)
This appears to be based on an older version of the current master of Herbert's cryptodev tree on github [1] - it's missing the hmac algorithms introduced in commit 79b3a41 "crypto: talitos - add hmac algorithms", and a caam entry is missing (it's an offload engine, just like talitos). Something like:
drivers/crypto/caam/caamalg.c +2 -1
@@ -2205,7 +2205,8 @@ static struct caam_crypto_alg *caam_alg_alloc(struct device *ctrldev, alg->cra_blocksize = template->blocksize; alg->cra_alignmask =0 ; alg->cra_ctxsize =sizeof (struct caam_ctx ); - alg->cra_flags =CRYPTO_ALG_ASYNC | template->type; + alg->cra_flags =CRYPTO_ALG_ASYNC |CRYPTO_ALG_KERN_DRIVER_ONLY | + template->type;switch (template->type) {case CRYPTO_ALG_TYPE_ABLKCIPHER : alg->cra_type = &crypto_ablkcipher_type;
drivers/crypto/talitos.c +1 -0
@@ -2648,6 +2648,7 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev, alg->cra_priority =TALITOS_CRA_PRIORITY ; alg->cra_alignmask =0 ; alg->cra_ctxsize =sizeof (struct talitos_ctx ); + alg->cra_flags |=CRYPTO_ALG_KERN_DRIVER_ONLY ; t_alg->dev = dev;
should be fine for both talitos and caam drivers.
Thanks,
Kim
[1] git://github.com/herbertx/cryptodev.git
Quoted 5 lines · Kim Phillips
This appears to be based on an older version of the current master of Herbert's cryptodev tree on github [1] - it's missing the hmac algorithms introduced in commit 79b3a41 "crypto: talitos - add hmac algorithms", and a caam entry is missing (it's an offload engine, just like talitos). Something like:
Thanks, I've resubmitted with your patch included.
regards,
Nikos