19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_ECC
29#define ECC_MAX_BIT_LEN 521
31#define PRE_COMPUTE_WINDOW 5
32#define PRE_COMPUTE_MAX_TABLELEN (1 << 5)
34#define WINDOW_TABLE_SIZE (PRE_COMPUTE_MAX_TABLELEN >> 1)
39#define NUMTOOFFSET(num) (((num) < 0) ? (WINDOW_TABLE_SIZE / 2 - 1 - (((num) - 1) / 2)) : (((num) - 1) / 2))
46 int32_t (*pointMulAdd)(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k1,
const BN_BigNum *k2,
const ECC_Point *pt);
48 int32_t (*pointMul)(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k,
const ECC_Point *pt);
50 int32_t (*pointMulFast)(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k,
const ECC_Point *pt);
52 int32_t (*pointAddAffine)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
54 int32_t (*pointAdd)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
56 int32_t (*pointDouble)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
58 int32_t (*pointMultDouble)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a, uint32_t m);
60 int32_t (*modInv)(BN_BigNum *r,
const BN_BigNum *a,
const BN_BigNum *p, BN_Optimizer *opt);
62 int32_t (*point2AffineWithInv)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const BN_BigNum *inv);
64 int32_t (*point2Affine)(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
66 int32_t (*bnModNistEccMul)(BN_BigNum *r,
const BN_BigNum *a,
const BN_BigNum *b,
67 void *mod, BN_Optimizer *opt);
69 int32_t (*bnModNistEccSqr)(BN_BigNum *r,
const BN_BigNum *a,
void *mod, BN_Optimizer *opt);
71 int32_t (*modOrdInv)(
const ECC_Para *para, BN_BigNum *r,
const BN_BigNum *a);
73 int32_t (*bnMontEnc)(BN_BigNum *r, BN_Mont *mont, BN_Optimizer *opt,
bool consttime);
75 void (*bnMontDec)(BN_BigNum *r, BN_Mont *mont);
101 ECC_Point *tableG[16];
102 const ECC_Method *method;
118int32_t ECP_PointAtInfinity(
const ECC_Para *para,
const ECC_Point *pt);
131int32_t ECP_PointOnCurve(
const ECC_Para *para,
const ECC_Point *pt);
145int32_t ECP_Point2Affine(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *pt);
160int32_t ECP_PointInvertAtAffine(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
177int32_t ECP_Point2AffineWithInv(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *pt,
const BN_BigNum *inv);
192int32_t ECP_PointMulAdd(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k1,
const BN_BigNum *k2,
const ECC_Point *pt);
205int32_t ECP_PointCopy(
const ECC_Para *para, ECC_Point *a,
const ECC_Point *b);
220int32_t ECP_PointMul(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k,
const ECC_Point *pt);
236int32_t ECP_PointMulFast(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k,
const ECC_Point *pt);
247BN_BigNum *ECP_HalfPGet(
const BN_BigNum *p);
271int32_t ECP_NistPointDouble(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
285int32_t ECP_NistPointMultDouble(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a, uint32_t m);
299int32_t ECP_NistPointAddAffine(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
313int32_t ECP_NistPointAdd(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
327int32_t ECP_GetEncodeDataLen(
const ECC_Para *para, ECC_Point *pt,
CRYPT_PKEY_PointFormat format, uint32_t *dataLen);
339int32_t ECP_ModOrderInv(
const ECC_Para *para, BN_BigNum *r,
const BN_BigNum *a);
341#ifdef HITLS_CRYPTO_CURVE_MONT
347int32_t ECP_NistPointDoubleMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
353int32_t ECP_NistPointMultDoubleMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a, uint32_t m);
359int32_t ECP_NistPointAddAffineMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
365int32_t ECP_NistPointAddMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
371int32_t ECP_Point2AffineMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *pt);
377int32_t ECP_PrimePointDoubleMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a);
383int32_t ECP_PrimePointMultDoubleMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a, uint32_t m);
389int32_t ECP_PrimePointAddAffineMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
395int32_t ECP_PrimePointAddMont(
const ECC_Para *para, ECC_Point *r,
const ECC_Point *a,
const ECC_Point *b);
401int32_t ECP_PointMulMont(ECC_Para *para, ECC_Point *r,
const BN_BigNum *k,
const ECC_Point *pt);
CRYPT_PKEY_ParaId
定义 crypt_algid.h:208
CRYPT_PKEY_PointFormat
定义 crypt_algid.h:370