| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* Copyright (c) 2021 HiSilicon */ | |
| #ifndef _CRYTO_ECC_CURVE_H | |
| #define _CRYTO_ECC_CURVE_H | |
| #include <linux/types.h> | |
| /** | |
| * struct ecc_point - elliptic curve point in affine coordinates | |
| * | |
| * @x: X coordinate in vli form. | |
| * @y: Y coordinate in vli form. | |
| * @ndigits: Length of vlis in u64 qwords. | |
| */ | |
| struct ecc_point { | |
| u64 *x; | |
| u64 *y; | |
| u8 ndigits; | |
| }; | |
| /** | |
| * struct ecc_curve - definition of elliptic curve | |
| * | |
| * @name: Short name of the curve. | |
| * @nbits: The number of bits of a curve. | |
| * @g: Generator point of the curve. | |
| * @p: Prime number, if Barrett's reduction is used for this curve | |
| * pre-calculated value 'mu' is appended to the @p after ndigits. | |
| * Use of Barrett's reduction is heuristically determined in | |
| * vli_mmod_fast(). | |
| * @n: Order of the curve group. | |
| * @a: Curve parameter a. | |
| * @b: Curve parameter b. | |
| */ | |
| struct ecc_curve { | |
| char *name; | |
| u32 nbits; | |
| struct ecc_point g; | |
| u64 *p; | |
| u64 *n; | |
| u64 *a; | |
| u64 *b; | |
| }; | |
| /** | |
| * ecc_get_curve() - get elliptic curve; | |
| * @curve_id: Curves IDs: | |
| * defined in 'include/crypto/ecdh.h'; | |
| * | |
| * Returns curve if get curve succssful, NULL otherwise | |
| */ | |
| const struct ecc_curve *ecc_get_curve(unsigned int curve_id); | |
| /** | |
| * ecc_get_curve25519() - get curve25519 curve; | |
| * | |
| * Returns curve25519 | |
| */ | |
| const struct ecc_curve *ecc_get_curve25519(void); | |
| #endif |