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. 2614bb7676SMeng Yu * @g: Generator point of the curve. 2714bb7676SMeng Yu * @p: Prime number, if Barrett's reduction is used for this curve 2814bb7676SMeng Yu * pre-calculated value 'mu' is appended to the @p after ndigits. 2914bb7676SMeng Yu * Use of Barrett's reduction is heuristically determined in 3014bb7676SMeng Yu * vli_mmod_fast(). 3114bb7676SMeng Yu * @n: Order of the curve group. 3214bb7676SMeng Yu * @a: Curve parameter a. 3314bb7676SMeng Yu * @b: Curve parameter b. 3414bb7676SMeng Yu */ 3514bb7676SMeng Yu struct ecc_curve { 3614bb7676SMeng Yu char *name; 3714bb7676SMeng Yu struct ecc_point g; 3814bb7676SMeng Yu u64 *p; 3914bb7676SMeng Yu u64 *n; 4014bb7676SMeng Yu u64 *a; 4114bb7676SMeng Yu u64 *b; 4214bb7676SMeng Yu }; 4314bb7676SMeng Yu 4414bb7676SMeng Yu /** 4514bb7676SMeng Yu * ecc_get_curve() - get elliptic curve; 4614bb7676SMeng Yu * @curve_id: Curves IDs: 4714bb7676SMeng Yu * defined in 'include/crypto/ecdh.h'; 4814bb7676SMeng Yu * 4914bb7676SMeng Yu * Returns curve if get curve succssful, NULL otherwise 5014bb7676SMeng Yu */ 5114bb7676SMeng Yu const struct ecc_curve *ecc_get_curve(unsigned int curve_id); 5214bb7676SMeng Yu 53*8fb9340eSMeng Yu /** 54*8fb9340eSMeng Yu * ecc_get_curve25519() - get curve25519 curve; 55*8fb9340eSMeng Yu * 56*8fb9340eSMeng Yu * Returns curve25519 57*8fb9340eSMeng Yu */ 58*8fb9340eSMeng Yu const struct ecc_curve *ecc_get_curve25519(void); 59*8fb9340eSMeng Yu 6014bb7676SMeng Yu #endif 61