114bb7676SMeng Yu /* SPDX-License-Identifier: GPL-2.0 */ 214bb7676SMeng Yu /* Copyright (c) 2021 HiSilicon */ 314bb7676SMeng Yu 414bb7676SMeng Yu #ifndef _CRYTO_ECC_CURVE_H 514bb7676SMeng Yu #define _CRYTO_ECC_CURVE_H 614bb7676SMeng Yu 714bb7676SMeng Yu #include <linux/types.h> 814bb7676SMeng Yu 914bb7676SMeng Yu /** 1014bb7676SMeng Yu * struct ecc_point - elliptic curve point in affine coordinates 1114bb7676SMeng Yu * 1214bb7676SMeng Yu * @x: X coordinate in vli form. 1314bb7676SMeng Yu * @y: Y coordinate in vli form. 1414bb7676SMeng Yu * @ndigits: Length of vlis in u64 qwords. 1514bb7676SMeng Yu */ 1614bb7676SMeng Yu struct ecc_point { 1714bb7676SMeng Yu u64 *x; 1814bb7676SMeng Yu u64 *y; 1914bb7676SMeng Yu u8 ndigits; 2014bb7676SMeng Yu }; 2114bb7676SMeng Yu 2214bb7676SMeng Yu /** 2314bb7676SMeng Yu * struct ecc_curve - definition of elliptic curve 2414bb7676SMeng Yu * 2514bb7676SMeng Yu * @name: Short name of the curve. 26*c0d6bd1fSStefan Berger * @nbits: The number of bits of a curve. 2714bb7676SMeng Yu * @g: Generator point of the curve. 2814bb7676SMeng Yu * @p: Prime number, if Barrett's reduction is used for this curve 2914bb7676SMeng Yu * pre-calculated value 'mu' is appended to the @p after ndigits. 3014bb7676SMeng Yu * Use of Barrett's reduction is heuristically determined in 3114bb7676SMeng Yu * vli_mmod_fast(). 3214bb7676SMeng Yu * @n: Order of the curve group. 3314bb7676SMeng Yu * @a: Curve parameter a. 3414bb7676SMeng Yu * @b: Curve parameter b. 3514bb7676SMeng Yu */ 3614bb7676SMeng Yu struct ecc_curve { 3714bb7676SMeng Yu char *name; 38*c0d6bd1fSStefan Berger u32 nbits; 3914bb7676SMeng Yu struct ecc_point g; 4014bb7676SMeng Yu u64 *p; 4114bb7676SMeng Yu u64 *n; 4214bb7676SMeng Yu u64 *a; 4314bb7676SMeng Yu u64 *b; 4414bb7676SMeng Yu }; 4514bb7676SMeng Yu 4614bb7676SMeng Yu /** 4714bb7676SMeng Yu * ecc_get_curve() - get elliptic curve; 4814bb7676SMeng Yu * @curve_id: Curves IDs: 4914bb7676SMeng Yu * defined in 'include/crypto/ecdh.h'; 5014bb7676SMeng Yu * 5114bb7676SMeng Yu * Returns curve if get curve succssful, NULL otherwise 5214bb7676SMeng Yu */ 5314bb7676SMeng Yu const struct ecc_curve *ecc_get_curve(unsigned int curve_id); 5414bb7676SMeng Yu 558fb9340eSMeng Yu /** 568fb9340eSMeng Yu * ecc_get_curve25519() - get curve25519 curve; 578fb9340eSMeng Yu * 588fb9340eSMeng Yu * Returns curve25519 598fb9340eSMeng Yu */ 608fb9340eSMeng Yu const struct ecc_curve *ecc_get_curve25519(void); 618fb9340eSMeng Yu 6214bb7676SMeng Yu #endif 63