Message ID | 1568187671-8540-2-git-send-email-pvanleeuwen@verimatrix.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Herbert Xu |
Headers | show |
Series | crypto: inside-secure - Add support for (HMAC) SM3 | expand |
Hi Pascal, On Wed, Sep 11, 2019 at 09:41:09AM +0200, Pascal van Leeuwen wrote: > static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv) > diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h > index 282d59e..fc2aba2 100644 > --- a/drivers/crypto/inside-secure/safexcel.h > +++ b/drivers/crypto/inside-secure/safexcel.h > @@ -374,6 +374,7 @@ struct safexcel_context_record { > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC192 (0x2 << 23) > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC256 (0x3 << 23) > #define CONTEXT_CONTROL_CRYPTO_ALG_POLY1305 (0xf << 23) > +#define CONTEXT_CONTROL_CRYPTO_ALG_SM3 (0x7 << 23) Please order the definitions (0x7 before 0xf). Otherwise the patch looks good, and with that you can add: Acked-by: Antoine Tenart <antoine.tenart@bootlin.com> Thanks! Antoine
> -----Original Message----- > From: Antoine Tenart <antoine.tenart@bootlin.com> > Sent: Wednesday, September 11, 2019 5:41 PM > To: Pascal van Leeuwen <pascalvanl@gmail.com> > Cc: linux-crypto@vger.kernel.org; antoine.tenart@bootlin.com; > herbert@gondor.apana.org.au; davem@davemloft.net; Pascal Van Leeuwen > <pvanleeuwen@verimatrix.com> > Subject: Re: [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash > > Hi Pascal, > > On Wed, Sep 11, 2019 at 09:41:09AM +0200, Pascal van Leeuwen wrote: > > static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv) > > diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside- > secure/safexcel.h > > index 282d59e..fc2aba2 100644 > > --- a/drivers/crypto/inside-secure/safexcel.h > > +++ b/drivers/crypto/inside-secure/safexcel.h > > @@ -374,6 +374,7 @@ struct safexcel_context_record { > > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC192 (0x2 << 23) > > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC256 (0x3 << 23) > > #define CONTEXT_CONTROL_CRYPTO_ALG_POLY1305 (0xf << 23) > > +#define CONTEXT_CONTROL_CRYPTO_ALG_SM3 (0x7 << 23) > > Please order the definitions (0x7 before 0xf). > While I generally agree with you that having them in order is nicer, the other already existing algorithms weren't in order either (i.e. SHA224 is 4 but comes before SHA256 which is 3, same for SHA384 and SHA512), hence I just appended at the end of the list in the order I actually added them. Do you want me to put them *all* in order? Because otherwise it doesn't make sense to make an exception for SM3. > Otherwise the patch looks good, and with that you can add: > > Acked-by: Antoine Tenart <antoine.tenart@bootlin.com> > > Thanks! > Antoine > > -- > Antoine Ténart, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com Thanks, Pascal van Leeuwen Silicon IP Architect, Multi-Protocol Engines @ Verimatrix www.insidesecure.com
On Wed, Sep 11, 2019 at 03:47:21PM +0000, Pascal Van Leeuwen wrote: > > On Wed, Sep 11, 2019 at 09:41:09AM +0200, Pascal van Leeuwen wrote: > > > static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv) > > > diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside- > > secure/safexcel.h > > > index 282d59e..fc2aba2 100644 > > > --- a/drivers/crypto/inside-secure/safexcel.h > > > +++ b/drivers/crypto/inside-secure/safexcel.h > > > @@ -374,6 +374,7 @@ struct safexcel_context_record { > > > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC192 (0x2 << 23) > > > #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC256 (0x3 << 23) > > > #define CONTEXT_CONTROL_CRYPTO_ALG_POLY1305 (0xf << 23) > > > +#define CONTEXT_CONTROL_CRYPTO_ALG_SM3 (0x7 << 23) > > > > Please order the definitions (0x7 before 0xf). > > > While I generally agree with you that having them in order is > nicer, the other already existing algorithms weren't in order > either (i.e. SHA224 is 4 but comes before SHA256 which is 3, > same for SHA384 and SHA512), hence I just appended at the > end of the list in the order I actually added them. > > Do you want me to put them *all* in order? Because otherwise > it doesn't make sense to make an exception for SM3. Yes, that's a good point. I don't have a preference in this specific case, so I'd say the better is to keep what was done before. Thanks! Antoine
diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c index 5886bcd..826d1fb 100644 --- a/drivers/crypto/inside-secure/safexcel.c +++ b/drivers/crypto/inside-secure/safexcel.c @@ -1176,6 +1176,7 @@ static int safexcel_request_ring_irq(void *pdev, int irqid, &safexcel_alg_chacha20, &safexcel_alg_chachapoly, &safexcel_alg_chachapoly_esp, + &safexcel_alg_sm3, }; static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv) diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h index 282d59e..fc2aba2 100644 --- a/drivers/crypto/inside-secure/safexcel.h +++ b/drivers/crypto/inside-secure/safexcel.h @@ -374,6 +374,7 @@ struct safexcel_context_record { #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC192 (0x2 << 23) #define CONTEXT_CONTROL_CRYPTO_ALG_XCBC256 (0x3 << 23) #define CONTEXT_CONTROL_CRYPTO_ALG_POLY1305 (0xf << 23) +#define CONTEXT_CONTROL_CRYPTO_ALG_SM3 (0x7 << 23) #define CONTEXT_CONTROL_INV_FR (0x5 << 24) #define CONTEXT_CONTROL_INV_TR (0x6 << 24) @@ -869,5 +870,6 @@ int safexcel_hmac_setkey(const char *alg, const u8 *key, unsigned int keylen, extern struct safexcel_alg_template safexcel_alg_chacha20; extern struct safexcel_alg_template safexcel_alg_chachapoly; extern struct safexcel_alg_template safexcel_alg_chachapoly_esp; +extern struct safexcel_alg_template safexcel_alg_sm3; #endif diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c index 0224779..a4107bb 100644 --- a/drivers/crypto/inside-secure/safexcel_hash.c +++ b/drivers/crypto/inside-secure/safexcel_hash.c @@ -10,6 +10,7 @@ #include <crypto/md5.h> #include <crypto/sha.h> #include <crypto/skcipher.h> +#include <crypto/sm3.h> #include <linux/device.h> #include <linux/dma-mapping.h> #include <linux/dmapool.h> @@ -776,6 +777,9 @@ static int safexcel_ahash_final(struct ahash_request *areq) else if (ctx->alg == CONTEXT_CONTROL_CRYPTO_ALG_SHA512) memcpy(areq->result, sha512_zero_message_hash, SHA512_DIGEST_SIZE); + else if (ctx->alg == CONTEXT_CONTROL_CRYPTO_ALG_SM3) + memcpy(areq->result, sm3_zero_message_hash, + SM3_DIGEST_SIZE); return 0; } else if (unlikely(req->digest == CONTEXT_CONTROL_DIGEST_XCM && @@ -2221,3 +2225,58 @@ struct safexcel_alg_template safexcel_alg_cmac = { }, }, }; + +static int safexcel_sm3_init(struct ahash_request *areq) +{ + struct safexcel_ahash_ctx *ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(areq)); + struct safexcel_ahash_req *req = ahash_request_ctx(areq); + + memset(req, 0, sizeof(*req)); + + ctx->alg = CONTEXT_CONTROL_CRYPTO_ALG_SM3; + req->digest = CONTEXT_CONTROL_DIGEST_PRECOMPUTED; + req->state_sz = SM3_DIGEST_SIZE; + req->block_sz = SM3_BLOCK_SIZE; + + return 0; +} + +static int safexcel_sm3_digest(struct ahash_request *areq) +{ + int ret = safexcel_sm3_init(areq); + + if (ret) + return ret; + + return safexcel_ahash_finup(areq); +} + +struct safexcel_alg_template safexcel_alg_sm3 = { + .type = SAFEXCEL_ALG_TYPE_AHASH, + .algo_mask = SAFEXCEL_ALG_SM3, + .alg.ahash = { + .init = safexcel_sm3_init, + .update = safexcel_ahash_update, + .final = safexcel_ahash_final, + .finup = safexcel_ahash_finup, + .digest = safexcel_sm3_digest, + .export = safexcel_ahash_export, + .import = safexcel_ahash_import, + .halg = { + .digestsize = SM3_DIGEST_SIZE, + .statesize = sizeof(struct safexcel_ahash_export_state), + .base = { + .cra_name = "sm3", + .cra_driver_name = "safexcel-sm3", + .cra_priority = SAFEXCEL_CRA_PRIORITY, + .cra_flags = CRYPTO_ALG_ASYNC | + CRYPTO_ALG_KERN_DRIVER_ONLY, + .cra_blocksize = SM3_BLOCK_SIZE, + .cra_ctxsize = sizeof(struct safexcel_ahash_ctx), + .cra_init = safexcel_ahash_cra_init, + .cra_exit = safexcel_ahash_cra_exit, + .cra_module = THIS_MODULE, + }, + }, + }, +};
Added support for the SM3 ahash algorithm Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com> --- drivers/crypto/inside-secure/safexcel.c | 1 + drivers/crypto/inside-secure/safexcel.h | 2 + drivers/crypto/inside-secure/safexcel_hash.c | 59 ++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+)