summaryrefslogtreecommitdiffstats
path: root/ncr-pk.c
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-08-18 03:28:31 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-08-24 22:58:02 +0200
commitd6e4385206d32171d63abe33ee11a349dc9d6e3a (patch)
tree279ce2bdb969803cc815c5d11470003497d3f220 /ncr-pk.c
parentb327f41fefe390d6db4832fe44f3cf37d86514c0 (diff)
downloadcryptodev-linux-d6e4385206d32171d63abe33ee11a349dc9d6e3a.tar.gz
cryptodev-linux-d6e4385206d32171d63abe33ee11a349dc9d6e3a.tar.xz
cryptodev-linux-d6e4385206d32171d63abe33ee11a349dc9d6e3a.zip
Convert *_KEY_DERIVE
Diffstat (limited to 'ncr-pk.c')
-rw-r--r--ncr-pk.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/ncr-pk.c b/ncr-pk.c
index f898918..921b193 100644
--- a/ncr-pk.c
+++ b/ncr-pk.c
@@ -681,38 +681,34 @@ fail:
}
int ncr_pk_derive(struct key_item_st* newkey, struct key_item_st* oldkey,
- struct ncr_key_derivation_params_st * params)
+ struct nlattr *tb[])
{
+const struct nlattr *nla;
int ret;
-void* tmp = NULL;
-size_t size;
- switch(params->derive) {
+ nla = tb[NCR_ATTR_DERIVATION_ALGORITHM];
+ if (nla == NULL) {
+ err();
+ return -EINVAL;
+ }
+ switch(nla_get_u32(nla)) {
case NCR_DERIVE_DH:
if (oldkey->type != NCR_KEY_TYPE_PRIVATE &&
oldkey->algorithm->algo != NCR_ALG_DH) {
err();
return -EINVAL;
}
-
- size = params->params.params.dh.pub_size;
- tmp = kmalloc(size, GFP_KERNEL);
- if (tmp == NULL) {
+
+ nla = tb[NCR_ATTR_DH_PUBLIC];
+ if (nla == NULL) {
err();
- return -ENOMEM;
- }
-
- if (unlikely(copy_from_user(tmp, params->params.params.dh.pub,
- size))) {
- err();
- ret = -EFAULT;
- goto fail;
+ return -EINVAL;
}
-
- ret = dh_derive_gxy(newkey, &oldkey->key.pk.dh, tmp, size);
+ ret = dh_derive_gxy(newkey, &oldkey->key.pk.dh,
+ nla_data(nla), nla_len(nla));
if (ret < 0) {
err();
- goto fail;
+ return ret;
}
break;
@@ -721,10 +717,7 @@ size_t size;
return -EINVAL;
}
- ret = 0;
-fail:
- kfree(tmp);
- return ret;
+ return 0;
}
int ncr_pk_get_rsa_size( rsa_key* key)