* [PATCH] crypto: ux500/hash: Implement .export and .import
@ 2022-07-19 14:02 Linus Walleij
2022-07-19 23:25 ` Linus Walleij
0 siblings, 1 reply; 2+ messages in thread
From: Linus Walleij @ 2022-07-19 14:02 UTC (permalink / raw)
To: linux-crypto, Herbert Xu, David S . Miller; +Cc: Linus Walleij
The .export and .import callbacks are just implemented as stubs
which makes the tests fail:
alg: ahash: hmac-sha256-ux500 export() failed with err -38 on
test vector 0, cfg="import/export"
------------[ cut here ]------------
WARNING: CPU: 1 PID: 92 at crypto/testmgr.c:5777
alg_test.part.0+0x160/0x3ec
alg: self-tests for hmac-sha256-ux500 (hmac(sha256)) failed (rc=-38)
The driver already has code for saving and restoring the hardware
state. Pass the tests by simply implementing the callbacks
properly.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/crypto/ux500/hash/hash_core.c | 48 ++++++++++++++++++++-------
1 file changed, 36 insertions(+), 12 deletions(-)
diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
index 265ef3e96fdd..150d3fc8ed85 100644
--- a/drivers/crypto/ux500/hash/hash_core.c
+++ b/drivers/crypto/ux500/hash/hash_core.c
@@ -1413,14 +1413,38 @@ static int ahash_sha256_digest(struct ahash_request *req)
return ret1 ? ret1 : ret2;
}
-static int ahash_noimport(struct ahash_request *req, const void *in)
+static int ahash_import(struct ahash_request *req, const void *in)
{
- return -ENOSYS;
+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
+ struct hash_ctx *ctx = crypto_ahash_ctx(tfm);
+ struct hash_device_data *device_data;
+ int ret;
+
+ ret = hash_get_device_data(ctx, &device_data);
+ if (ret)
+ return ret;
+
+ /* Import state */
+ hash_resume_state(device_data, &device_data->state);
+
+ return 0;
}
-static int ahash_noexport(struct ahash_request *req, void *out)
+static int ahash_export(struct ahash_request *req, void *out)
{
- return -ENOSYS;
+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
+ struct hash_ctx *ctx = crypto_ahash_ctx(tfm);
+ struct hash_device_data *device_data;
+ int ret;
+
+ ret = hash_get_device_data(ctx, &device_data);
+ if (ret)
+ return ret;
+
+ /* Export state */
+ hash_save_state(device_data, &device_data->state);
+
+ return 0;
}
static int hmac_sha1_init(struct ahash_request *req)
@@ -1527,8 +1551,8 @@ static struct hash_algo_template hash_algs[] = {
.update = ahash_update,
.final = ahash_final,
.digest = ahash_sha1_digest,
- .export = ahash_noexport,
- .import = ahash_noimport,
+ .export = ahash_export,
+ .import = ahash_import,
.halg.digestsize = SHA1_DIGEST_SIZE,
.halg.statesize = sizeof(struct hash_ctx),
.halg.base = {
@@ -1550,8 +1574,8 @@ static struct hash_algo_template hash_algs[] = {
.update = ahash_update,
.final = ahash_final,
.digest = ahash_sha256_digest,
- .export = ahash_noexport,
- .import = ahash_noimport,
+ .export = ahash_export,
+ .import = ahash_import,
.halg.digestsize = SHA256_DIGEST_SIZE,
.halg.statesize = sizeof(struct hash_ctx),
.halg.base = {
@@ -1574,8 +1598,8 @@ static struct hash_algo_template hash_algs[] = {
.final = ahash_final,
.digest = hmac_sha1_digest,
.setkey = hmac_sha1_setkey,
- .export = ahash_noexport,
- .import = ahash_noimport,
+ .export = ahash_export,
+ .import = ahash_import,
.halg.digestsize = SHA1_DIGEST_SIZE,
.halg.statesize = sizeof(struct hash_ctx),
.halg.base = {
@@ -1598,8 +1622,8 @@ static struct hash_algo_template hash_algs[] = {
.final = ahash_final,
.digest = hmac_sha256_digest,
.setkey = hmac_sha256_setkey,
- .export = ahash_noexport,
- .import = ahash_noimport,
+ .export = ahash_export,
+ .import = ahash_import,
.halg.digestsize = SHA256_DIGEST_SIZE,
.halg.statesize = sizeof(struct hash_ctx),
.halg.base = {
--
2.36.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] crypto: ux500/hash: Implement .export and .import
2022-07-19 14:02 [PATCH] crypto: ux500/hash: Implement .export and .import Linus Walleij
@ 2022-07-19 23:25 ` Linus Walleij
0 siblings, 0 replies; 2+ messages in thread
From: Linus Walleij @ 2022-07-19 23:25 UTC (permalink / raw)
To: linux-crypto, Herbert Xu, David S . Miller
On Tue, Jul 19, 2022 at 4:04 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> The .export and .import callbacks are just implemented as stubs
> which makes the tests fail:
>
> alg: ahash: hmac-sha256-ux500 export() failed with err -38 on
> test vector 0, cfg="import/export"
> ------------[ cut here ]------------
> WARNING: CPU: 1 PID: 92 at crypto/testmgr.c:5777
> alg_test.part.0+0x160/0x3ec
> alg: self-tests for hmac-sha256-ux500 (hmac(sha256)) failed (rc=-38)
>
> The driver already has code for saving and restoring the hardware
> state. Pass the tests by simply implementing the callbacks
> properly.
>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Forget this patch, I found some corner cases that make it fail.
I'll come up with something more elaborate.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-07-19 23:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-19 14:02 [PATCH] crypto: ux500/hash: Implement .export and .import Linus Walleij
2022-07-19 23:25 ` Linus Walleij
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.