19#include "hitls_build.h"
20#if defined(HITLS_CRYPTO_CURVE_SM2) && defined(HITLS_SIXTY_FOUR_BITS)
30#define SM2_BITSOFBYTES 8
31#define SM2_BYTES_NUM 32
32#define SM2_LIMBS (SM2_BYTES_NUM / sizeof(BN_UINT))
34typedef struct SM2_point {
40typedef struct SM2_pointaffine {
46void ECP_Sm2BnRshift1(BN_UINT *a);
49void ECP_Sm2DivBy2(BN_UINT *r,
const BN_UINT *a);
51void ECP_Sm2AddModP(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
53void ECP_Sm2AddModOrd(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
55void ECP_Sm2SubModP(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
57void ECP_Sm2SubModOrd(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
59void ECP_Sm2MulBy3(BN_UINT *r,
const BN_UINT *a);
61void ECP_Sm2Mul(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
63void ECP_Sm2Sqr(BN_UINT *r,
const BN_UINT *a);
65void ECP_Sm2Neg(BN_UINT *r,
const BN_UINT *b);
67const BN_UINT *ECP_Sm2Precomputed(
void);
70void ECP_Sm2Div2(BN_UINT *r, BN_UINT *a);
72void ECP_Sm2Div4(BN_UINT *r, BN_UINT *a);
74void ECP_Sm2BnSub(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
76void ECP_Sm2BnAdd(BN_UINT *r,
const BN_UINT *a,
const BN_UINT *b);
81void ECP_Sm2Div2ModP(BN_UINT *r,
const BN_UINT *a);
83void ECP_Sm2Div2ModOrd(BN_UINT *r,
const BN_UINT *a);
85void ECP_Sm2Div4ModP(BN_UINT *r, BN_UINT *a);
87void ECP_Sm2Div4ModOrd(BN_UINT *r,
const BN_UINT *a);
90void ECP_Sm2ToMont(BN_UINT *r,
const BN_UINT *a);
92void ECP_Sm2FromMont(BN_UINT *r,
const BN_UINT *a);
95void ECP_Sm2PointDoubleMont(SM2_point *r,
const SM2_point *a);
97void ECP_Sm2PointAddAffineMont(SM2_point *r,
const SM2_point *a,
const SM2_AffinePoint *b);
99void ECP_Sm2PointAddMont(SM2_point *r,
const SM2_point *a,
const SM2_point *b);