As curve id of ECDH will be moved from its key into algorithm name,
we cannot use 'curve_id' in 'struct ecdh', so we should modify ECDH
driver in atmel, and make ECDH algorithm name be the same as crypto
(like 'ecdh-nist-pxxx');

Signed-off-by: Meng Yu <yumen...@huawei.com>
Reviewed-by: Zaibo Xu <xuza...@huawei.com>
---
 drivers/crypto/atmel-ecc.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c
index 9bd8e51..9ade6ad 100644
--- a/drivers/crypto/atmel-ecc.c
+++ b/drivers/crypto/atmel-ecc.c
@@ -104,7 +104,7 @@ static int atmel_ecdh_set_secret(struct crypto_kpp *tfm, 
const void *buf,
                return -EINVAL;
        }
 
-       ctx->n_sz = atmel_ecdh_supported_curve(params.curve_id);
+       ctx->n_sz = atmel_ecdh_supported_curve(ctx->curve_id);
        if (!ctx->n_sz || params.key_size) {
                /* fallback to ecdh software implementation */
                ctx->do_fallback = true;
@@ -125,7 +125,6 @@ static int atmel_ecdh_set_secret(struct crypto_kpp *tfm, 
const void *buf,
                goto free_cmd;
 
        ctx->do_fallback = false;
-       ctx->curve_id = params.curve_id;
 
        atmel_i2c_init_genkey_cmd(cmd, DATA_SLOT_2);
 
@@ -263,6 +262,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm)
        struct crypto_kpp *fallback;
        struct atmel_ecdh_ctx *ctx = kpp_tfm_ctx(tfm);
 
+       ctx->curve_id = ECC_CURVE_NIST_P256;
        ctx->client = atmel_ecc_i2c_client_alloc();
        if (IS_ERR(ctx->client)) {
                pr_err("tfm - i2c_client binding failed\n");
@@ -306,7 +306,7 @@ static unsigned int atmel_ecdh_max_size(struct crypto_kpp 
*tfm)
        return ATMEL_ECC_PUBKEY_SIZE;
 }
 
-static struct kpp_alg atmel_ecdh = {
+static struct kpp_alg atmel_ecdh_nist_p256 = {
        .set_secret = atmel_ecdh_set_secret,
        .generate_public_key = atmel_ecdh_generate_public_key,
        .compute_shared_secret = atmel_ecdh_compute_shared_secret,
@@ -315,7 +315,7 @@ static struct kpp_alg atmel_ecdh = {
        .max_size = atmel_ecdh_max_size,
        .base = {
                .cra_flags = CRYPTO_ALG_NEED_FALLBACK,
-               .cra_name = "ecdh",
+               .cra_name = "ecdh-nist-p256",
                .cra_driver_name = "atmel-ecdh",
                .cra_priority = ATMEL_ECC_PRIORITY,
                .cra_module = THIS_MODULE,
@@ -340,14 +340,14 @@ static int atmel_ecc_probe(struct i2c_client *client,
                      &driver_data.i2c_client_list);
        spin_unlock(&driver_data.i2c_list_lock);
 
-       ret = crypto_register_kpp(&atmel_ecdh);
+       ret = crypto_register_kpp(&atmel_ecdh_nist_p256);
        if (ret) {
                spin_lock(&driver_data.i2c_list_lock);
                list_del(&i2c_priv->i2c_client_list_node);
                spin_unlock(&driver_data.i2c_list_lock);
 
                dev_err(&client->dev, "%s alg registration failed\n",
-                       atmel_ecdh.base.cra_driver_name);
+                       atmel_ecdh_nist_p256.base.cra_driver_name);
        } else {
                dev_info(&client->dev, "atmel ecc algorithms registered in 
/proc/crypto\n");
        }
@@ -365,7 +365,7 @@ static int atmel_ecc_remove(struct i2c_client *client)
                return -EBUSY;
        }
 
-       crypto_unregister_kpp(&atmel_ecdh);
+       crypto_unregister_kpp(&atmel_ecdh_nist_p256);
 
        spin_lock(&driver_data.i2c_list_lock);
        list_del(&i2c_priv->i2c_client_list_node);
-- 
2.8.1

Reply via email to