out[i] = __swab64(in[ndigits - 1 - i]);
}
-bool compute_ecdh_secret(struct crypto_kpp *tfm, const u8 public_key[64],
- const u8 private_key[32], u8 secret[32])
+int compute_ecdh_secret(struct crypto_kpp *tfm, const u8 public_key[64],
+ const u8 private_key[32], u8 secret[32])
{
struct kpp_request *req;
struct ecdh p;
struct scatterlist src, dst;
u8 *tmp, *buf;
unsigned int buf_len;
- int err = -ENOMEM;
+ int err;
tmp = kmalloc(64, GFP_KERNEL);
if (!tmp)
- return false;
+ return -ENOMEM;
req = kpp_request_alloc(tfm, GFP_KERNEL);
- if (!req)
+ if (!req) {
+ err = -ENOMEM;
goto free_tmp;
+ }
init_completion(&result.completion);
p.curve_id = ECC_CURVE_NIST_P256;
buf_len = crypto_ecdh_key_len(&p);
buf = kmalloc(buf_len, GFP_KERNEL);
- if (!buf)
+ if (!buf) {
+ err = -ENOMEM;
goto free_req;
+ }
crypto_ecdh_encode_key(buf, buf_len, &p);
kpp_request_free(req);
free_tmp:
kfree(tmp);
- return (err == 0);
+ return err;
}
-bool generate_ecdh_keys(struct crypto_kpp *tfm, u8 public_key[64],
- u8 private_key[32])
+int generate_ecdh_keys(struct crypto_kpp *tfm, u8 public_key[64],
+ u8 private_key[32])
{
struct kpp_request *req;
struct ecdh p;
struct scatterlist dst;
u8 *tmp, *buf;
unsigned int buf_len;
- int err = -ENOMEM;
+ int err;
const unsigned short max_tries = 16;
unsigned short tries = 0;
tmp = kmalloc(64, GFP_KERNEL);
if (!tmp)
- return false;
+ return -ENOMEM;
req = kpp_request_alloc(tfm, GFP_KERNEL);
- if (!req)
+ if (!req) {
+ err = -ENOMEM;
goto free_tmp;
+ }
init_completion(&result.completion);
kpp_request_free(req);
free_tmp:
kfree(tmp);
- return (err == 0);
+ return err;
}
#include <crypto/kpp.h>
#include <linux/types.h>
-bool compute_ecdh_secret(struct crypto_kpp *tfm, const u8 pub_a[64],
- const u8 priv_b[32], u8 secret[32]);
-bool generate_ecdh_keys(struct crypto_kpp *tfm, u8 public_key[64],
- u8 private_key[32]);
+int compute_ecdh_secret(struct crypto_kpp *tfm, const u8 pub_a[64],
+ const u8 priv_b[32], u8 secret[32]);
+int generate_ecdh_keys(struct crypto_kpp *tfm, u8 public_key[64],
+ u8 private_key[32]);
get_random_bytes(smp->local_sk, 32);
/* Generate local key pair for Secure Connections */
- if (!generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk,
- smp->local_sk))
- return -EIO;
+ err = generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk,
+ smp->local_sk);
+ if (err)
+ return err;
/* This is unlikely, but we need to check that
* we didn't accidentially generate a debug key.
get_random_bytes(smp->local_sk, 32);
/* Generate local key pair for Secure Connections */
- if (!generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk,
- smp->local_sk))
+ if (generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk,
+ smp->local_sk))
return SMP_UNSPECIFIED;
/* This is unlikely, but we need to check that
static int __init test_debug_key(struct crypto_kpp *tfm_ecdh)
{
u8 pk[64], sk[32];
+ int err;
swap_digits((u64 *)debug_sk, (u64 *)sk, 4);
- if (!generate_ecdh_keys(tfm_ecdh, pk, sk))
- return -EINVAL;
+ err = generate_ecdh_keys(tfm_ecdh, pk, sk);
+ if (err)
+ return err;
if (crypto_memneq(sk, debug_sk, 32))
return -EINVAL;