* [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash
2019-09-11 7:41 [PATCH 0/3] crypto: inside-secure - Add support for (HMAC) SM3 Pascal van Leeuwen
@ 2019-09-11 7:41 ` Pascal van Leeuwen
2019-09-11 15:40 ` Antoine Tenart
2019-09-11 7:41 ` [PATCH 2/3] crypto: inside-secure - Added support for HMAC-SM3 ahash Pascal van Leeuwen
2019-09-11 7:41 ` [PATCH 3/3] crypto: testmgr - Added testvectors for the hmac(sm3) ahash Pascal van Leeuwen
2 siblings, 1 reply; 8+ messages in thread
From: Pascal van Leeuwen @ 2019-09-11 7:41 UTC (permalink / raw)
To: linux-crypto; +Cc: antoine.tenart, herbert, davem, Pascal van Leeuwen
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(+)
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,
+ },
+ },
+ },
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash
2019-09-11 7:41 ` [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash Pascal van Leeuwen
@ 2019-09-11 15:40 ` Antoine Tenart
2019-09-11 15:47 ` Pascal Van Leeuwen
0 siblings, 1 reply; 8+ messages in thread
From: Antoine Tenart @ 2019-09-11 15:40 UTC (permalink / raw)
To: Pascal van Leeuwen
Cc: linux-crypto, antoine.tenart, herbert, davem, Pascal van Leeuwen
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
--
Antoine Ténart, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash
2019-09-11 15:40 ` Antoine Tenart
@ 2019-09-11 15:47 ` Pascal Van Leeuwen
2019-09-11 15:52 ` Antoine Tenart
0 siblings, 1 reply; 8+ messages in thread
From: Pascal Van Leeuwen @ 2019-09-11 15:47 UTC (permalink / raw)
To: Antoine Tenart, Pascal van Leeuwen; +Cc: linux-crypto, herbert, davem
> -----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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash
2019-09-11 15:47 ` Pascal Van Leeuwen
@ 2019-09-11 15:52 ` Antoine Tenart
0 siblings, 0 replies; 8+ messages in thread
From: Antoine Tenart @ 2019-09-11 15:52 UTC (permalink / raw)
To: Pascal Van Leeuwen
Cc: Antoine Tenart, Pascal van Leeuwen, linux-crypto, herbert, davem
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
--
Antoine Ténart, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] crypto: inside-secure - Added support for HMAC-SM3 ahash
2019-09-11 7:41 [PATCH 0/3] crypto: inside-secure - Add support for (HMAC) SM3 Pascal van Leeuwen
2019-09-11 7:41 ` [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash Pascal van Leeuwen
@ 2019-09-11 7:41 ` Pascal van Leeuwen
2019-09-11 15:41 ` Antoine Tenart
2019-09-11 7:41 ` [PATCH 3/3] crypto: testmgr - Added testvectors for the hmac(sm3) ahash Pascal van Leeuwen
2 siblings, 1 reply; 8+ messages in thread
From: Pascal van Leeuwen @ 2019-09-11 7:41 UTC (permalink / raw)
To: linux-crypto; +Cc: antoine.tenart, herbert, davem, Pascal van Leeuwen
Added support for the hmac(sm3) ahash authentication algorithm
Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com>
---
drivers/crypto/inside-secure/safexcel.c | 1 +
drivers/crypto/inside-secure/safexcel.h | 1 +
drivers/crypto/inside-secure/safexcel_hash.c | 70 ++++++++++++++++++++++++++++
3 files changed, 72 insertions(+)
diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
index 826d1fb..7d907d5 100644
--- a/drivers/crypto/inside-secure/safexcel.c
+++ b/drivers/crypto/inside-secure/safexcel.c
@@ -1177,6 +1177,7 @@ static int safexcel_request_ring_irq(void *pdev, int irqid,
&safexcel_alg_chachapoly,
&safexcel_alg_chachapoly_esp,
&safexcel_alg_sm3,
+ &safexcel_alg_hmac_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 fc2aba2..7ee09fe 100644
--- a/drivers/crypto/inside-secure/safexcel.h
+++ b/drivers/crypto/inside-secure/safexcel.h
@@ -871,5 +871,6 @@ int safexcel_hmac_setkey(const char *alg, const u8 *key, unsigned int keylen,
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;
+extern struct safexcel_alg_template safexcel_alg_hmac_sm3;
#endif
diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
index a4107bb..fdf4bcc 100644
--- a/drivers/crypto/inside-secure/safexcel_hash.c
+++ b/drivers/crypto/inside-secure/safexcel_hash.c
@@ -2280,3 +2280,73 @@ struct safexcel_alg_template safexcel_alg_sm3 = {
},
},
};
+
+static int safexcel_hmac_sm3_setkey(struct crypto_ahash *tfm, const u8 *key,
+ unsigned int keylen)
+{
+ return safexcel_hmac_alg_setkey(tfm, key, keylen, "safexcel-sm3",
+ SM3_DIGEST_SIZE);
+}
+
+static int safexcel_hmac_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));
+
+ /* Start from ipad precompute */
+ memcpy(req->state, ctx->ipad, SM3_DIGEST_SIZE);
+ /* Already processed the key^ipad part now! */
+ req->len = SM3_BLOCK_SIZE;
+ req->processed = SM3_BLOCK_SIZE;
+
+ 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;
+ req->hmac = true;
+
+ return 0;
+}
+
+static int safexcel_hmac_sm3_digest(struct ahash_request *areq)
+{
+ int ret = safexcel_hmac_sm3_init(areq);
+
+ if (ret)
+ return ret;
+
+ return safexcel_ahash_finup(areq);
+}
+
+struct safexcel_alg_template safexcel_alg_hmac_sm3 = {
+ .type = SAFEXCEL_ALG_TYPE_AHASH,
+ .algo_mask = SAFEXCEL_ALG_SM3,
+ .alg.ahash = {
+ .init = safexcel_hmac_sm3_init,
+ .update = safexcel_ahash_update,
+ .final = safexcel_ahash_final,
+ .finup = safexcel_ahash_finup,
+ .digest = safexcel_hmac_sm3_digest,
+ .setkey = safexcel_hmac_sm3_setkey,
+ .export = safexcel_ahash_export,
+ .import = safexcel_ahash_import,
+ .halg = {
+ .digestsize = SM3_DIGEST_SIZE,
+ .statesize = sizeof(struct safexcel_ahash_export_state),
+ .base = {
+ .cra_name = "hmac(sm3)",
+ .cra_driver_name = "safexcel-hmac-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,
+ },
+ },
+ },
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] crypto: inside-secure - Added support for HMAC-SM3 ahash
2019-09-11 7:41 ` [PATCH 2/3] crypto: inside-secure - Added support for HMAC-SM3 ahash Pascal van Leeuwen
@ 2019-09-11 15:41 ` Antoine Tenart
0 siblings, 0 replies; 8+ messages in thread
From: Antoine Tenart @ 2019-09-11 15:41 UTC (permalink / raw)
To: Pascal van Leeuwen
Cc: linux-crypto, antoine.tenart, herbert, davem, Pascal van Leeuwen
On Wed, Sep 11, 2019 at 09:41:10AM +0200, Pascal van Leeuwen wrote:
> Added support for the hmac(sm3) ahash authentication algorithm
>
> Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com>
Acked-by: Antoine Tenart <antoine.tenart@bootlin.com>
Thanks!
Antoine
> ---
> drivers/crypto/inside-secure/safexcel.c | 1 +
> drivers/crypto/inside-secure/safexcel.h | 1 +
> drivers/crypto/inside-secure/safexcel_hash.c | 70 ++++++++++++++++++++++++++++
> 3 files changed, 72 insertions(+)
>
> diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
> index 826d1fb..7d907d5 100644
> --- a/drivers/crypto/inside-secure/safexcel.c
> +++ b/drivers/crypto/inside-secure/safexcel.c
> @@ -1177,6 +1177,7 @@ static int safexcel_request_ring_irq(void *pdev, int irqid,
> &safexcel_alg_chachapoly,
> &safexcel_alg_chachapoly_esp,
> &safexcel_alg_sm3,
> + &safexcel_alg_hmac_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 fc2aba2..7ee09fe 100644
> --- a/drivers/crypto/inside-secure/safexcel.h
> +++ b/drivers/crypto/inside-secure/safexcel.h
> @@ -871,5 +871,6 @@ int safexcel_hmac_setkey(const char *alg, const u8 *key, unsigned int keylen,
> 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;
> +extern struct safexcel_alg_template safexcel_alg_hmac_sm3;
>
> #endif
> diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
> index a4107bb..fdf4bcc 100644
> --- a/drivers/crypto/inside-secure/safexcel_hash.c
> +++ b/drivers/crypto/inside-secure/safexcel_hash.c
> @@ -2280,3 +2280,73 @@ struct safexcel_alg_template safexcel_alg_sm3 = {
> },
> },
> };
> +
> +static int safexcel_hmac_sm3_setkey(struct crypto_ahash *tfm, const u8 *key,
> + unsigned int keylen)
> +{
> + return safexcel_hmac_alg_setkey(tfm, key, keylen, "safexcel-sm3",
> + SM3_DIGEST_SIZE);
> +}
> +
> +static int safexcel_hmac_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));
> +
> + /* Start from ipad precompute */
> + memcpy(req->state, ctx->ipad, SM3_DIGEST_SIZE);
> + /* Already processed the key^ipad part now! */
> + req->len = SM3_BLOCK_SIZE;
> + req->processed = SM3_BLOCK_SIZE;
> +
> + 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;
> + req->hmac = true;
> +
> + return 0;
> +}
> +
> +static int safexcel_hmac_sm3_digest(struct ahash_request *areq)
> +{
> + int ret = safexcel_hmac_sm3_init(areq);
> +
> + if (ret)
> + return ret;
> +
> + return safexcel_ahash_finup(areq);
> +}
> +
> +struct safexcel_alg_template safexcel_alg_hmac_sm3 = {
> + .type = SAFEXCEL_ALG_TYPE_AHASH,
> + .algo_mask = SAFEXCEL_ALG_SM3,
> + .alg.ahash = {
> + .init = safexcel_hmac_sm3_init,
> + .update = safexcel_ahash_update,
> + .final = safexcel_ahash_final,
> + .finup = safexcel_ahash_finup,
> + .digest = safexcel_hmac_sm3_digest,
> + .setkey = safexcel_hmac_sm3_setkey,
> + .export = safexcel_ahash_export,
> + .import = safexcel_ahash_import,
> + .halg = {
> + .digestsize = SM3_DIGEST_SIZE,
> + .statesize = sizeof(struct safexcel_ahash_export_state),
> + .base = {
> + .cra_name = "hmac(sm3)",
> + .cra_driver_name = "safexcel-hmac-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,
> + },
> + },
> + },
> +};
> --
> 1.8.3.1
>
--
Antoine Ténart, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] crypto: testmgr - Added testvectors for the hmac(sm3) ahash
2019-09-11 7:41 [PATCH 0/3] crypto: inside-secure - Add support for (HMAC) SM3 Pascal van Leeuwen
2019-09-11 7:41 ` [PATCH 1/3] crypto: inside-secure - Added support for basic SM3 ahash Pascal van Leeuwen
2019-09-11 7:41 ` [PATCH 2/3] crypto: inside-secure - Added support for HMAC-SM3 ahash Pascal van Leeuwen
@ 2019-09-11 7:41 ` Pascal van Leeuwen
2 siblings, 0 replies; 8+ messages in thread
From: Pascal van Leeuwen @ 2019-09-11 7:41 UTC (permalink / raw)
To: linux-crypto; +Cc: antoine.tenart, herbert, davem, Pascal van Leeuwen
Added testvectors for the hmac(sm3) ahash authentication algorithm
Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com>
---
crypto/testmgr.c | 6 ++++++
crypto/testmgr.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+)
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 001e62f..3604c9d 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4921,6 +4921,12 @@ static int alg_test_null(const struct alg_test_desc *desc,
.hash = __VECS(hmac_sha512_tv_template)
}
}, {
+ .alg = "hmac(sm3)",
+ .test = alg_test_hash,
+ .suite = {
+ .hash = __VECS(hmac_sm3_tv_template)
+ }
+ }, {
.alg = "hmac(streebog256)",
.test = alg_test_hash,
.suite = {
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 25572c3..1f56293 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -2935,6 +2935,62 @@ struct len_range_sel {
}
};
+/* Example vectors below taken from
+ * GM/T 0042-2015 Appendix D.3
+ */
+static const struct hash_testvec hmac_sm3_tv_template[] = {
+ {
+ .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
+ "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+ "\x11\x12\x13\x14\x15\x16\x17\x18"
+ "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
+ .ksize = 32,
+ .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ .psize = 112,
+ .digest = "\xca\x05\xe1\x44\xed\x05\xd1\x85"
+ "\x78\x40\xd1\xf3\x18\xa4\xa8\x66"
+ "\x9e\x55\x9f\xc8\x39\x1f\x41\x44"
+ "\x85\xbf\xdf\x7b\xb4\x08\x96\x3a",
+ }, {
+ .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
+ "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+ "\x11\x12\x13\x14\x15\x16\x17\x18"
+ "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
+ "\x21\x22\x23\x24\x25",
+ .ksize = 37,
+ .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+ "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+ "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+ "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
+ .psize = 50,
+ .digest = "\x22\x0b\xf5\x79\xde\xd5\x55\x39"
+ "\x3f\x01\x59\xf6\x6c\x99\x87\x78"
+ "\x22\xa3\xec\xf6\x10\xd1\x55\x21"
+ "\x54\xb4\x1d\x44\xb9\x4d\xb3\xae",
+ }, {
+ .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
+ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
+ "\x0b\x0b\x0b\x0b\x0b\x0b",
+ .ksize = 32,
+ .plaintext = "Hi There",
+ .psize = 8,
+ .digest = "\xc0\xba\x18\xc6\x8b\x90\xc8\x8b"
+ "\xc0\x7d\xe7\x94\xbf\xc7\xd2\xc8"
+ "\xd1\x9e\xc3\x1e\xd8\x77\x3b\xc2"
+ "\xb3\x90\xc9\x60\x4e\x0b\xe1\x1e",
+ }, {
+ .key = "Jefe",
+ .ksize = 4,
+ .plaintext = "what do ya want for nothing?",
+ .psize = 28,
+ .digest = "\x2e\x87\xf1\xd1\x68\x62\xe6\xd9"
+ "\x64\xb5\x0a\x52\x00\xbf\x2b\x10"
+ "\xb7\x64\xfa\xa9\x68\x0a\x29\x6a"
+ "\x24\x05\xf2\x4b\xec\x39\xf8\x82",
+ },
+};
+
/*
* SHA1 test vectors from from FIPS PUB 180-1
* Long vector from CAVS 5.0
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread