|
@@ -417,6 +417,13 @@ int __must_check crypto_public_key_decrypt_pkcs1(
|
|
|
struct crypto_public_key *key, const u8 *crypt, size_t crypt_len,
|
|
|
u8 *plain, size_t *plain_len);
|
|
|
|
|
|
+int crypto_dh_init(u8 generator, const u8 *prime, size_t prime_len, u8 *privkey,
|
|
|
+ u8 *pubkey);
|
|
|
+int crypto_dh_derive_secret(u8 generator, const u8 *prime, size_t prime_len,
|
|
|
+ const u8 *privkey, size_t privkey_len,
|
|
|
+ const u8 *pubkey, size_t pubkey_len,
|
|
|
+ u8 *secret, size_t *len);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_global_init - Initialize crypto wrapper
|
|
|
*
|
|
@@ -528,6 +535,14 @@ void crypto_bignum_deinit(struct crypto_bignum *n, int clear);
|
|
|
int crypto_bignum_to_bin(const struct crypto_bignum *a,
|
|
|
u8 *buf, size_t buflen, size_t padlen);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_bignum_rand - Create a random number in range of modulus
|
|
|
+ * @r: Bignum; set to a random value
|
|
|
+ * @m: Bignum; modulus
|
|
|
+ * Returns: 0 on success, -1 on failure
|
|
|
+ */
|
|
|
+int crypto_bignum_rand(struct crypto_bignum *r, const struct crypto_bignum *m);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_bignum_add - c = a + b
|
|
|
* @a: Bignum
|
|
@@ -609,6 +624,16 @@ int crypto_bignum_mulmod(const struct crypto_bignum *a,
|
|
|
const struct crypto_bignum *c,
|
|
|
struct crypto_bignum *d);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_bignum_rshift - r = a >> n
|
|
|
+ * @a: Bignum
|
|
|
+ * @n: Number of bits
|
|
|
+ * @r: Bignum; used to store the result of a >> n
|
|
|
+ * Returns: 0 on success, -1 on failure
|
|
|
+ */
|
|
|
+int crypto_bignum_rshift(const struct crypto_bignum *a, int n,
|
|
|
+ struct crypto_bignum *r);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_bignum_cmp - Compare two bignums
|
|
|
* @a: Bignum
|
|
@@ -639,6 +664,13 @@ int crypto_bignum_is_zero(const struct crypto_bignum *a);
|
|
|
*/
|
|
|
int crypto_bignum_is_one(const struct crypto_bignum *a);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_bignum_is_odd - Is the given bignum odd
|
|
|
+ * @a: Bignum
|
|
|
+ * Returns: 1 if @a is odd or 0 if not
|
|
|
+ */
|
|
|
+int crypto_bignum_is_odd(const struct crypto_bignum *a);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_bignum_legendre - Compute the Legendre symbol (a/p)
|
|
|
* @a: Bignum
|
|
@@ -670,6 +702,14 @@ struct crypto_ec * crypto_ec_init(int group);
|
|
|
*/
|
|
|
void crypto_ec_deinit(struct crypto_ec *e);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_ec_cofactor - Set the cofactor into the big number
|
|
|
+ * @e: EC context from crypto_ec_init()
|
|
|
+ * @cofactor: Cofactor of curve.
|
|
|
+ * Returns: 0 on success, -1 on failure
|
|
|
+ */
|
|
|
+int crypto_ec_cofactor(struct crypto_ec *e, struct crypto_bignum *cofactor);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_ec_prime_len - Get length of the prime in octets
|
|
|
* @e: EC context from crypto_ec_init()
|
|
@@ -684,6 +724,13 @@ size_t crypto_ec_prime_len(struct crypto_ec *e);
|
|
|
*/
|
|
|
size_t crypto_ec_prime_len_bits(struct crypto_ec *e);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_ec_order_len - Get length of the order in octets
|
|
|
+ * @e: EC context from crypto_ec_init()
|
|
|
+ * Returns: Length of the order defining the group
|
|
|
+ */
|
|
|
+size_t crypto_ec_order_len(struct crypto_ec *e);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_ec_get_prime - Get prime defining an EC group
|
|
|
* @e: EC context from crypto_ec_init()
|
|
@@ -720,6 +767,16 @@ struct crypto_ec_point * crypto_ec_point_init(struct crypto_ec *e);
|
|
|
*/
|
|
|
void crypto_ec_point_deinit(struct crypto_ec_point *p, int clear);
|
|
|
|
|
|
+/**
|
|
|
+ * crypto_ec_point_x - Copies the x-ordinate point into big number
|
|
|
+ * @e: EC context from crypto_ec_init()
|
|
|
+ * @p: EC point data
|
|
|
+ * @x: Big number to set to the copy of x-ordinate
|
|
|
+ * Returns: 0 on success, -1 on failure
|
|
|
+ */
|
|
|
+int crypto_ec_point_x(struct crypto_ec *e, const struct crypto_ec_point *p,
|
|
|
+ struct crypto_bignum *x);
|
|
|
+
|
|
|
/**
|
|
|
* crypto_ec_point_to_bin - Write EC point value as binary data
|
|
|
* @e: EC context from crypto_ec_init()
|