16#ifndef __HEADER_SM9_CURVE_H__
17#define __HEADER_SM9_CURVE_H__
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SM9
31#define CRYPT_SM3_DIGESTSIZE 32
32#define CRYPT_SM3_BLOCKSIZE 64
33#define SM9_Hash_Size 32
40 uint32_t h[CRYPT_SM3_DIGESTSIZE /
sizeof(uint32_t)];
42 uint8_t block[CRYPT_SM3_BLOCKSIZE];
52 SM9_CRYPT_SM3_Ctx sm3State;
60typedef struct _SM9_FP2 {
61 uint32_t Coef_0[BNWordLen];
62 uint32_t Coef_1[BNWordLen];
66typedef struct _SM9_FP4 {
72typedef struct _SM9_FP12 {
79typedef struct _SM9_FP_ECP_A {
80 uint32_t X[BNWordLen];
81 uint32_t Y[BNWordLen];
85typedef struct _SM9_FP_ECP_J {
86 uint32_t X[BNWordLen];
87 uint32_t Y[BNWordLen];
88 uint32_t Z[BNWordLen];
91typedef struct _SM9_FP2_ECP_A {
96typedef struct _SM9_FP2_ECP_J {
102typedef struct _SM9_SYS_PARA {
105 uint32_t EC_T[BNWordLen];
106 uint32_t EC_6T2[BNWordLen];
107 uint32_t EC_Trace[BNWordLen];
109 uint32_t EC_Q[BNWordLen];
111 uint32_t Q_R1[BNWordLen];
112 uint32_t Q_R2[BNWordLen];
114 uint32_t EC_N[BNWordLen];
116 uint32_t N_R1[BNWordLen];
117 uint32_t N_R2[BNWordLen];
119 uint32_t EC_Fp_A_Mont[BNWordLen];
120 uint32_t EC_Fp_B_Mont[BNWordLen];
121 SM9_ECP_A EC_Fp_G_Mont;
123 SM9_Fp2 EC_Fp2_A_Mont;
124 SM9_Fp2 EC_Fp2_B_Mont;
125 SM9_ECP2_A EC_Fp2_G_Mont;
127 uint32_t EC_Vq_Mont[BNWordLen];
128 uint32_t EC_Wq_Mont[BNWordLen];
129 uint32_t EC_W2q_Mont[BNWordLen];
130 uint32_t EC_Root_Mont[BNWordLen];
132 uint32_t EC_One[BNWordLen];
133 uint32_t EC_4_Inv_Mont[BNWordLen];
136typedef struct _sm9_alg_context_st {
137 uint32_t buf[300][BNWordLen];
138 SM9_Hash_Ctx mac_ctx;
141 uint8_t k1[2 * BNByteLen];
144 SM9_Hash_Ctx xor_ctx;
145 SM9_Hash_Ctx tmp_ctx;
150extern SM9_Sys_Para sm9_sys_para;
152extern uint8_t g_SM9_G1[64];
153extern uint8_t g_SM9_G2[128];