Add suffix _t to array type names

This commit is contained in:
Zhi Guan
2024-04-13 18:57:29 +08:00
parent 9937b8dc6d
commit 3a46c4a499
4 changed files with 261 additions and 261 deletions

View File

@@ -83,101 +83,101 @@ void sm9_z256_fn_from_hash(sm9_z256_t h, const uint8_t Ha[40]);
int sm9_z256_fn_from_bytes(sm9_z256_t a, const uint8_t in[32]); int sm9_z256_fn_from_bytes(sm9_z256_t a, const uint8_t in[32]);
typedef sm9_z256_t sm9_z256_fp2[2]; typedef sm9_z256_t sm9_z256_fp2_t[2];
extern const sm9_z256_fp2 SM9_FP2_ZERO; extern const sm9_z256_fp2_t SM9_FP2_ZERO;
void sm9_z256_fp2_set_one(sm9_z256_fp2 r); void sm9_z256_fp2_set_one(sm9_z256_fp2_t r);
void sm9_z256_fp2_set_zero(sm9_z256_fp2 r); void sm9_z256_fp2_set_zero(sm9_z256_fp2_t r);
int sm9_z256_fp2_is_one(const sm9_z256_fp2 a); int sm9_z256_fp2_is_one(const sm9_z256_fp2_t a);
int sm9_z256_fp2_is_zero(const sm9_z256_fp2 a); int sm9_z256_fp2_is_zero(const sm9_z256_fp2_t a);
int sm9_z256_fp2_equ(const sm9_z256_fp2 a, const sm9_z256_fp2 b); int sm9_z256_fp2_equ(const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_copy(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_copy(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
int sm9_z256_fp2_rand(sm9_z256_fp2 r); int sm9_z256_fp2_rand(sm9_z256_fp2_t r);
void sm9_z256_fp2_to_bytes(const sm9_z256_fp2 a, uint8_t buf[64]); void sm9_z256_fp2_to_bytes(const sm9_z256_fp2_t a, uint8_t buf[64]);
int sm9_z256_fp2_from_bytes(sm9_z256_fp2 r, const uint8_t buf[64]); int sm9_z256_fp2_from_bytes(sm9_z256_fp2_t r, const uint8_t buf[64]);
int sm9_z256_fp2_from_hex(sm9_z256_fp2 r, const char hex[129]); int sm9_z256_fp2_from_hex(sm9_z256_fp2_t r, const char hex[129]);
void sm9_z256_fp2_to_hex(const sm9_z256_fp2 a, char hex[129]); void sm9_z256_fp2_to_hex(const sm9_z256_fp2_t a, char hex[129]);
void sm9_z256_fp2_add(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b); void sm9_z256_fp2_add(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_dbl(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_dbl(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_tri(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_tri(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_sub(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b); void sm9_z256_fp2_sub(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_neg(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_neg(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_a_mul_u(sm9_z256_fp2 r, sm9_z256_fp2 a); void sm9_z256_fp2_a_mul_u(sm9_z256_fp2_t r, sm9_z256_fp2_t a);
void sm9_z256_fp2_mul(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b); void sm9_z256_fp2_mul(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_mul_u(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b); void sm9_z256_fp2_mul_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_mul_fp(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_t k); void sm9_z256_fp2_mul_fp(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_t k);
void sm9_z256_fp2_sqr(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_sqr(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_sqr_u(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_sqr_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_inv(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_inv(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_div(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b); void sm9_z256_fp2_div(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
void sm9_z256_fp2_div2(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_div2(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
typedef sm9_z256_fp2 sm9_z256_fp4[2]; typedef sm9_z256_fp2_t sm9_z256_fp4_t[2];
extern const sm9_z256_fp4 SM9_FP4_ZERO; extern const sm9_z256_fp4_t SM9_FP4_ZERO;
extern const sm9_z256_fp4 SM9_FP4_ONE; extern const sm9_z256_fp4_t SM9_FP4_ONE;
extern const sm9_z256_fp4 SM9_FP4_U; extern const sm9_z256_fp4_t SM9_FP4_U;
extern const sm9_z256_fp4 SM9_FP4_V; extern const sm9_z256_fp4_t SM9_FP4_V;
int sm9_z256_fp4_is_zero(const sm9_z256_fp4 a); int sm9_z256_fp4_is_zero(const sm9_z256_fp4_t a);
int sm9_z256_fp4_equ(const sm9_z256_fp4 a, const sm9_z256_fp4 b); int sm9_z256_fp4_equ(const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
int sm9_z256_fp4_rand(sm9_z256_fp4 r); int sm9_z256_fp4_rand(sm9_z256_fp4_t r);
void sm9_z256_fp4_copy(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_copy(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_to_bytes(const sm9_z256_fp4 a, uint8_t buf[128]); void sm9_z256_fp4_to_bytes(const sm9_z256_fp4_t a, uint8_t buf[128]);
int sm9_z256_fp4_from_bytes(sm9_z256_fp4 r, const uint8_t buf[128]); int sm9_z256_fp4_from_bytes(sm9_z256_fp4_t r, const uint8_t buf[128]);
int sm9_z256_fp4_from_hex(sm9_z256_fp4 r, const char hex[65 * 4]); int sm9_z256_fp4_from_hex(sm9_z256_fp4_t r, const char hex[65 * 4]);
void sm9_z256_fp4_to_hex(const sm9_z256_fp4 a, char hex[259]); void sm9_z256_fp4_to_hex(const sm9_z256_fp4_t a, char hex[259]);
void sm9_z256_fp4_add(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b); void sm9_z256_fp4_add(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
void sm9_z256_fp4_dbl(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_dbl(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_sub(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b); void sm9_z256_fp4_sub(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
void sm9_z256_fp4_neg(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_neg(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_div2(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_div2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_a_mul_v(sm9_z256_fp4 r, sm9_z256_fp4 a); void sm9_z256_fp4_a_mul_v(sm9_z256_fp4_t r, sm9_z256_fp4_t a);
void sm9_z256_fp4_mul(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b); void sm9_z256_fp4_mul(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
void sm9_z256_fp4_mul_fp(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_t k); void sm9_z256_fp4_mul_fp(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_t k);
void sm9_z256_fp4_mul_fp2(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp2 b0); void sm9_z256_fp4_mul_fp2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp2_t b0);
void sm9_z256_fp4_mul_v(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b); void sm9_z256_fp4_mul_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
void sm9_z256_fp4_sqr(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_sqr(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_sqr_v(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_sqr_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_inv(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_inv(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
typedef sm9_z256_fp4 sm9_z256_fp12[3]; typedef sm9_z256_fp4_t sm9_z256_fp12_t[3];
void sm9_z256_fp12_copy(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_copy(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
int sm9_z256_fp12_rand(sm9_z256_fp12 r); int sm9_z256_fp12_rand(sm9_z256_fp12_t r);
void sm9_z256_fp12_set_zero(sm9_z256_fp12 r); void sm9_z256_fp12_set_zero(sm9_z256_fp12_t r);
void sm9_z256_fp12_set_one(sm9_z256_fp12 r); void sm9_z256_fp12_set_one(sm9_z256_fp12_t r);
int sm9_z256_fp12_from_hex(sm9_z256_fp12 r, const char hex[65 * 12 - 1]); int sm9_z256_fp12_from_hex(sm9_z256_fp12_t r, const char hex[65 * 12 - 1]);
void sm9_z256_fp12_to_hex(const sm9_z256_fp12 a, char hex[65 * 12 - 1]); void sm9_z256_fp12_to_hex(const sm9_z256_fp12_t a, char hex[65 * 12 - 1]);
void sm9_z256_fp12_to_bytes(const sm9_z256_fp12 a, uint8_t buf[32 * 12]); void sm9_z256_fp12_to_bytes(const sm9_z256_fp12_t a, uint8_t buf[32 * 12]);
void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12 a); void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12_t a);
void sm9_z256_fp12_set(sm9_z256_fp12 r, const sm9_z256_fp4 a0, const sm9_z256_fp4 a1, const sm9_z256_fp4 a2); void sm9_z256_fp12_set(sm9_z256_fp12_t r, const sm9_z256_fp4_t a0, const sm9_z256_fp4_t a1, const sm9_z256_fp4_t a2);
int sm9_z256_fp12_equ(const sm9_z256_fp12 a, const sm9_z256_fp12 b); int sm9_z256_fp12_equ(const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
void sm9_z256_fp12_add(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b); void sm9_z256_fp12_add(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
void sm9_z256_fp12_dbl(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_dbl(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
void sm9_z256_fp12_tri(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_tri(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
void sm9_z256_fp12_sub(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b); void sm9_z256_fp12_sub(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
void sm9_z256_fp12_neg(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_neg(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
void sm9_z256_fp12_mul(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b); void sm9_z256_fp12_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
void sm9_z256_fp12_sqr(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_sqr(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
void sm9_z256_fp12_inv(sm9_z256_fp12 r, const sm9_z256_fp12 a); void sm9_z256_fp12_inv(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
void sm9_z256_fp12_pow(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_t k); void sm9_z256_fp12_pow(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_t k);
void sm9_z256_fp2_conjugate(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_conjugate(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp2_frobenius(sm9_z256_fp2 r, const sm9_z256_fp2 a); void sm9_z256_fp2_frobenius(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
void sm9_z256_fp4_frobenius(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_frobenius(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_conjugate(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_conjugate(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_frobenius2(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_frobenius2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp4_frobenius3(sm9_z256_fp4 r, const sm9_z256_fp4 a); void sm9_z256_fp4_frobenius3(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
void sm9_z256_fp12_frobenius(sm9_z256_fp12 r, const sm9_z256_fp12 x); void sm9_z256_fp12_frobenius(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
void sm9_z256_fp12_frobenius2(sm9_z256_fp12 r, const sm9_z256_fp12 x); void sm9_z256_fp12_frobenius2(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
void sm9_z256_fp12_frobenius3(sm9_z256_fp12 r, const sm9_z256_fp12 x); void sm9_z256_fp12_frobenius3(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
void sm9_z256_fp12_frobenius6(sm9_z256_fp12 r, const sm9_z256_fp12 x); void sm9_z256_fp12_frobenius6(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
typedef struct { typedef struct {
@@ -205,9 +205,9 @@ int sm9_z256_point_from_uncompressed_octets(SM9_Z256_POINT *P, const uint8_t oc
typedef struct { typedef struct {
sm9_z256_fp2 X; sm9_z256_fp2_t X;
sm9_z256_fp2 Y; sm9_z256_fp2_t Y;
sm9_z256_fp2 Z; sm9_z256_fp2_t Z;
} SM9_Z256_TWIST_POINT; } SM9_Z256_TWIST_POINT;
int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129]); int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129]);
@@ -217,7 +217,7 @@ int sm9_z256_twist_point_print(FILE *fp, int fmt, int ind, const char *label, c
void sm9_z256_twist_point_from_hex(SM9_Z256_TWIST_POINT *R, const char hex[65 * 4]); void sm9_z256_twist_point_from_hex(SM9_Z256_TWIST_POINT *R, const char hex[65 * 4]);
int sm9_z256_twist_point_is_at_infinity(const SM9_Z256_TWIST_POINT *P); int sm9_z256_twist_point_is_at_infinity(const SM9_Z256_TWIST_POINT *P);
void sm9_z256_twist_point_set_infinity(SM9_Z256_TWIST_POINT *R); void sm9_z256_twist_point_set_infinity(SM9_Z256_TWIST_POINT *R);
void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2 x, sm9_z256_fp2 y); void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2_t x, sm9_z256_fp2_t y);
int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q); int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q);
int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P); int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P);
void sm9_z256_twist_point_neg(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); void sm9_z256_twist_point_neg(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
@@ -229,14 +229,14 @@ void sm9_z256_twist_point_mul(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k, const
void sm9_z256_twist_point_mul_generator(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k); void sm9_z256_twist_point_mul_generator(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k);
void sm9_z256_eval_g_tangent(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q); void sm9_z256_eval_g_tangent(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q);
void sm9_z256_eval_g_line(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q); void sm9_z256_eval_g_line(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q);
void sm9_z256_twist_point_pi1(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); void sm9_z256_twist_point_pi1(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
void sm9_z256_twist_point_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); void sm9_z256_twist_point_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
void sm9_z256_twist_point_neg_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); void sm9_z256_twist_point_neg_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
void sm9_z256_final_exponent_hard_part(sm9_z256_fp12 r, const sm9_z256_fp12 f); void sm9_z256_final_exponent_hard_part(sm9_z256_fp12_t r, const sm9_z256_fp12_t f);
void sm9_z256_final_exponent(sm9_z256_fp12 r, const sm9_z256_fp12 f); void sm9_z256_final_exponent(sm9_z256_fp12_t r, const sm9_z256_fp12_t f);
void sm9_z256_pairing(sm9_z256_fp12 r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P); void sm9_z256_pairing(sm9_z256_fp12_t r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P);
int sm9_z256_hash1(sm9_z256_t h1, const char *id, size_t idlen, uint8_t hid); int sm9_z256_hash1(sm9_z256_t h1, const char *id, size_t idlen, uint8_t hid);

View File

@@ -760,46 +760,46 @@ void sm9_z256_fp_to_hex(const sm9_z256_t r, char hex[64])
} }
const sm9_z256_fp2 SM9_Z256_FP2_ZERO = {{0,0,0,0},{0,0,0,0}}; const sm9_z256_fp2_t SM9_Z256_FP2_ZERO = {{0,0,0,0},{0,0,0,0}};
const sm9_z256_fp2 SM9_Z256_FP2_ONE = {{1,0,0,0},{0,0,0,0}}; const sm9_z256_fp2_t SM9_Z256_FP2_ONE = {{1,0,0,0},{0,0,0,0}};
const sm9_z256_fp2 SM9_Z256_FP2_U = {{0,0,0,0},{1,0,0,0}}; const sm9_z256_fp2_t SM9_Z256_FP2_U = {{0,0,0,0},{1,0,0,0}};
static const sm9_z256_fp2 SM9_Z256_FP2_MONT_5U = {{0,0,0,0},{0xb9f2c1e8c8c71995, 0x125df8f246a377fc, 0x25e650d049188d1c, 0x43fffffed866f63}}; static const sm9_z256_fp2_t SM9_Z256_FP2_MONT_5U = {{0,0,0,0},{0xb9f2c1e8c8c71995, 0x125df8f246a377fc, 0x25e650d049188d1c, 0x43fffffed866f63}};
void sm9_z256_fp2_set_zero(sm9_z256_fp2 r) void sm9_z256_fp2_set_zero(sm9_z256_fp2_t r)
{ {
sm9_z256_set_zero(r[0]); sm9_z256_set_zero(r[0]);
sm9_z256_set_zero(r[1]); sm9_z256_set_zero(r[1]);
} }
void sm9_z256_fp2_set_one(sm9_z256_fp2 r) void sm9_z256_fp2_set_one(sm9_z256_fp2_t r)
{ {
sm9_z256_copy(r[0], SM9_Z256_MODP_MONT_ONE); sm9_z256_copy(r[0], SM9_Z256_MODP_MONT_ONE);
sm9_z256_set_zero(r[1]); sm9_z256_set_zero(r[1]);
} }
int sm9_z256_fp2_is_one(const sm9_z256_fp2 a) int sm9_z256_fp2_is_one(const sm9_z256_fp2_t a)
{ {
return sm9_z256_equ(a[0], SM9_Z256_MODP_MONT_ONE) && sm9_z256_is_zero(a[1]); return sm9_z256_equ(a[0], SM9_Z256_MODP_MONT_ONE) && sm9_z256_is_zero(a[1]);
} }
int sm9_z256_fp2_is_zero(const sm9_z256_fp2 a) int sm9_z256_fp2_is_zero(const sm9_z256_fp2_t a)
{ {
return sm9_z256_is_zero(a[0]) && sm9_z256_is_zero(a[1]); return sm9_z256_is_zero(a[0]) && sm9_z256_is_zero(a[1]);
} }
int sm9_z256_fp2_equ(const sm9_z256_fp2 a, const sm9_z256_fp2 b) int sm9_z256_fp2_equ(const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
return sm9_z256_equ(a[0], b[0]) && sm9_z256_equ(a[1], b[1]); return sm9_z256_equ(a[0], b[0]) && sm9_z256_equ(a[1], b[1]);
} }
void sm9_z256_fp2_copy(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_copy(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_copy(r[0], a[0]); sm9_z256_copy(r[0], a[0]);
sm9_z256_copy(r[1], a[1]); sm9_z256_copy(r[1], a[1]);
} }
int sm9_z256_fp2_rand(sm9_z256_fp2 r) int sm9_z256_fp2_rand(sm9_z256_fp2_t r)
{ {
if (sm9_z256_fp_rand(r[0]) != 1 if (sm9_z256_fp_rand(r[0]) != 1
|| sm9_z256_fp_rand(r[1]) != 1) { || sm9_z256_fp_rand(r[1]) != 1) {
@@ -809,13 +809,13 @@ int sm9_z256_fp2_rand(sm9_z256_fp2 r)
return 1; return 1;
} }
void sm9_z256_fp2_to_bytes(const sm9_z256_fp2 a, uint8_t buf[64]) void sm9_z256_fp2_to_bytes(const sm9_z256_fp2_t a, uint8_t buf[64])
{ {
sm9_z256_fp_to_bytes(a[1], buf); sm9_z256_fp_to_bytes(a[1], buf);
sm9_z256_fp_to_bytes(a[0], buf + 32); sm9_z256_fp_to_bytes(a[0], buf + 32);
} }
int sm9_z256_fp2_from_bytes(sm9_z256_fp2 r, const uint8_t buf[64]) int sm9_z256_fp2_from_bytes(sm9_z256_fp2_t r, const uint8_t buf[64])
{ {
if (sm9_z256_fp_from_bytes(r[1], buf) != 1 if (sm9_z256_fp_from_bytes(r[1], buf) != 1
|| sm9_z256_fp_from_bytes(r[0], buf + 32) != 1) { || sm9_z256_fp_from_bytes(r[0], buf + 32) != 1) {
@@ -825,7 +825,7 @@ int sm9_z256_fp2_from_bytes(sm9_z256_fp2 r, const uint8_t buf[64])
return 1; return 1;
} }
int sm9_z256_fp2_from_hex(sm9_z256_fp2 r, const char hex[129]) int sm9_z256_fp2_from_hex(sm9_z256_fp2_t r, const char hex[129])
{ {
if (sm9_z256_fp_from_hex(r[1], hex) != 1 if (sm9_z256_fp_from_hex(r[1], hex) != 1
|| sm9_z256_fp_from_hex(r[0], hex + 65) != 1) { || sm9_z256_fp_from_hex(r[0], hex + 65) != 1) {
@@ -841,44 +841,44 @@ int sm9_z256_fp2_from_hex(sm9_z256_fp2 r, const char hex[129])
return 1; return 1;
} }
void sm9_z256_fp2_to_hex(const sm9_z256_fp2 a, char hex[129]) void sm9_z256_fp2_to_hex(const sm9_z256_fp2_t a, char hex[129])
{ {
sm9_z256_fp_to_hex(a[1], hex); sm9_z256_fp_to_hex(a[1], hex);
hex[64] = SM9_Z256_HEX_SEP; hex[64] = SM9_Z256_HEX_SEP;
sm9_z256_fp_to_hex(a[0], hex + 65); sm9_z256_fp_to_hex(a[0], hex + 65);
} }
void sm9_z256_fp2_add(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b) void sm9_z256_fp2_add(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
sm9_z256_fp_add(r[0], a[0], b[0]); sm9_z256_fp_add(r[0], a[0], b[0]);
sm9_z256_fp_add(r[1], a[1], b[1]); sm9_z256_fp_add(r[1], a[1], b[1]);
} }
void sm9_z256_fp2_dbl(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_dbl(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_fp_dbl(r[0], a[0]); sm9_z256_fp_dbl(r[0], a[0]);
sm9_z256_fp_dbl(r[1], a[1]); sm9_z256_fp_dbl(r[1], a[1]);
} }
void sm9_z256_fp2_tri(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_tri(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_fp_tri(r[0], a[0]); sm9_z256_fp_tri(r[0], a[0]);
sm9_z256_fp_tri(r[1], a[1]); sm9_z256_fp_tri(r[1], a[1]);
} }
void sm9_z256_fp2_sub(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b) void sm9_z256_fp2_sub(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
sm9_z256_fp_sub(r[0], a[0], b[0]); sm9_z256_fp_sub(r[0], a[0], b[0]);
sm9_z256_fp_sub(r[1], a[1], b[1]); sm9_z256_fp_sub(r[1], a[1], b[1]);
} }
void sm9_z256_fp2_neg(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_neg(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_fp_neg(r[0], a[0]); sm9_z256_fp_neg(r[0], a[0]);
sm9_z256_fp_neg(r[1], a[1]); sm9_z256_fp_neg(r[1], a[1]);
} }
void sm9_z256_fp2_a_mul_u(sm9_z256_fp2 r, sm9_z256_fp2 a) void sm9_z256_fp2_a_mul_u(sm9_z256_fp2_t r, sm9_z256_fp2_t a)
{ {
sm9_z256_t r0; sm9_z256_t r0;
@@ -890,7 +890,7 @@ void sm9_z256_fp2_a_mul_u(sm9_z256_fp2 r, sm9_z256_fp2 a)
} }
void sm9_z256_fp2_mul(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b) void sm9_z256_fp2_mul(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
sm9_z256_t t0; sm9_z256_t t0;
sm9_z256_t t1; sm9_z256_t t1;
@@ -919,7 +919,7 @@ void sm9_z256_fp2_mul(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b
sm9_z256_copy(r[1], t2); sm9_z256_copy(r[1], t2);
} }
void sm9_z256_fp2_mul_u(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b) void sm9_z256_fp2_mul_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
sm9_z256_t t0; sm9_z256_t t0;
sm9_z256_t t1; sm9_z256_t t1;
@@ -950,13 +950,13 @@ void sm9_z256_fp2_mul_u(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2
sm9_z256_copy(r[1], t0); sm9_z256_copy(r[1], t0);
} }
void sm9_z256_fp2_mul_fp(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_t k) void sm9_z256_fp2_mul_fp(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_t k)
{ {
sm9_z256_fp_mont_mul(r[0], a[0], k); sm9_z256_fp_mont_mul(r[0], a[0], k);
sm9_z256_fp_mont_mul(r[1], a[1], k); sm9_z256_fp_mont_mul(r[1], a[1], k);
} }
void sm9_z256_fp2_sqr(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_sqr(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_t r0, r1, c0, c1; sm9_z256_t r0, r1, c0, c1;
@@ -975,7 +975,7 @@ void sm9_z256_fp2_sqr(sm9_z256_fp2 r, const sm9_z256_fp2 a)
sm9_z256_copy(r[1], r1); sm9_z256_copy(r[1], r1);
} }
void sm9_z256_fp2_sqr_u(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_sqr_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_t t0; sm9_z256_t t0;
sm9_z256_t t1; sm9_z256_t t1;
@@ -1004,7 +1004,7 @@ void sm9_z256_fp2_sqr_u(sm9_z256_fp2 r, const sm9_z256_fp2 a)
sm9_z256_copy(r[1], t2); sm9_z256_copy(r[1], t2);
} }
void sm9_z256_fp2_inv(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_inv(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
if (sm9_z256_is_zero(a[0])) { if (sm9_z256_is_zero(a[0])) {
// r0 = 0 // r0 = 0
@@ -1039,42 +1039,42 @@ void sm9_z256_fp2_inv(sm9_z256_fp2 r, const sm9_z256_fp2 a)
} }
} }
void sm9_z256_fp2_div(sm9_z256_fp2 r, const sm9_z256_fp2 a, const sm9_z256_fp2 b) void sm9_z256_fp2_div(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b)
{ {
sm9_z256_fp2 t; sm9_z256_fp2_t t;
sm9_z256_fp2_inv(t, b); sm9_z256_fp2_inv(t, b);
sm9_z256_fp2_mul(r, a, t); sm9_z256_fp2_mul(r, a, t);
} }
void sm9_z256_fp2_div2(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_div2(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_fp_div2(r[0], a[0]); sm9_z256_fp_div2(r[0], a[0]);
sm9_z256_fp_div2(r[1], a[1]); sm9_z256_fp_div2(r[1], a[1]);
} }
const sm9_z256_fp4 SM9_Z256_FP4_ZERO = { const sm9_z256_fp4_t SM9_Z256_FP4_ZERO = {
{{0,0,0,0},{0,0,0,0}}, {{0,0,0,0},{0,0,0,0}},
{{0,0,0,0},{0,0,0,0}} {{0,0,0,0},{0,0,0,0}}
}; };
const sm9_z256_fp4 SM9_Z256_FP4_MONT_ONE = { const sm9_z256_fp4_t SM9_Z256_FP4_MONT_ONE = {
{{0x1a9064d81caeba83, 0xde0d6cb4e5851124, 0x29fc54b00a7138ba, 0x49bffffffd5c590e},{0,0,0,0}}, {{0x1a9064d81caeba83, 0xde0d6cb4e5851124, 0x29fc54b00a7138ba, 0x49bffffffd5c590e},{0,0,0,0}},
{{0,0,0,0},{0,0,0,0}} {{0,0,0,0},{0,0,0,0}}
}; };
int sm9_z256_fp4_is_zero(const sm9_z256_fp4 a) int sm9_z256_fp4_is_zero(const sm9_z256_fp4_t a)
{ {
return sm9_z256_fp2_is_zero(a[0]) && sm9_z256_fp2_is_zero(a[1]); return sm9_z256_fp2_is_zero(a[0]) && sm9_z256_fp2_is_zero(a[1]);
} }
int sm9_z256_fp4_equ(const sm9_z256_fp4 a, const sm9_z256_fp4 b) int sm9_z256_fp4_equ(const sm9_z256_fp4_t a, const sm9_z256_fp4_t b)
{ {
return sm9_z256_fp2_equ(a[0], b[0]) && sm9_z256_fp2_equ(a[1], b[1]); return sm9_z256_fp2_equ(a[0], b[0]) && sm9_z256_fp2_equ(a[1], b[1]);
} }
int sm9_z256_fp4_rand(sm9_z256_fp4 r) int sm9_z256_fp4_rand(sm9_z256_fp4_t r)
{ {
if (sm9_z256_fp2_rand(r[1]) != 1 if (sm9_z256_fp2_rand(r[1]) != 1
|| sm9_z256_fp2_rand(r[0]) != 1) { || sm9_z256_fp2_rand(r[0]) != 1) {
@@ -1084,19 +1084,19 @@ int sm9_z256_fp4_rand(sm9_z256_fp4 r)
return 1; return 1;
} }
void sm9_z256_fp4_copy(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_copy(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_copy(r[0], a[0]); sm9_z256_fp2_copy(r[0], a[0]);
sm9_z256_fp2_copy(r[1], a[1]); sm9_z256_fp2_copy(r[1], a[1]);
} }
void sm9_z256_fp4_to_bytes(const sm9_z256_fp4 a, uint8_t buf[128]) void sm9_z256_fp4_to_bytes(const sm9_z256_fp4_t a, uint8_t buf[128])
{ {
sm9_z256_fp2_to_bytes(a[1], buf); sm9_z256_fp2_to_bytes(a[1], buf);
sm9_z256_fp2_to_bytes(a[0], buf + 64); sm9_z256_fp2_to_bytes(a[0], buf + 64);
} }
int sm9_z256_fp4_from_bytes(sm9_z256_fp4 r, const uint8_t buf[128]) int sm9_z256_fp4_from_bytes(sm9_z256_fp4_t r, const uint8_t buf[128])
{ {
if (sm9_z256_fp2_from_bytes(r[1], buf) != 1 if (sm9_z256_fp2_from_bytes(r[1], buf) != 1
|| sm9_z256_fp2_from_bytes(r[0], buf + 64) != 1) { || sm9_z256_fp2_from_bytes(r[0], buf + 64) != 1) {
@@ -1106,7 +1106,7 @@ int sm9_z256_fp4_from_bytes(sm9_z256_fp4 r, const uint8_t buf[128])
return 1; return 1;
} }
int sm9_z256_fp4_from_hex(sm9_z256_fp4 r, const char hex[65 * 4]) int sm9_z256_fp4_from_hex(sm9_z256_fp4_t r, const char hex[65 * 4])
{ {
if (sm9_z256_fp2_from_hex(r[1], hex) != 1 if (sm9_z256_fp2_from_hex(r[1], hex) != 1
|| hex[129] != SM9_Z256_HEX_SEP || hex[129] != SM9_Z256_HEX_SEP
@@ -1117,46 +1117,46 @@ int sm9_z256_fp4_from_hex(sm9_z256_fp4 r, const char hex[65 * 4])
return 1; return 1;
} }
void sm9_z256_fp4_to_hex(const sm9_z256_fp4 a, char hex[259]) void sm9_z256_fp4_to_hex(const sm9_z256_fp4_t a, char hex[259])
{ {
sm9_z256_fp2_to_hex(a[1], hex); sm9_z256_fp2_to_hex(a[1], hex);
hex[129] = SM9_Z256_HEX_SEP; hex[129] = SM9_Z256_HEX_SEP;
sm9_z256_fp2_to_hex(a[0], hex + 130); sm9_z256_fp2_to_hex(a[0], hex + 130);
} }
void sm9_z256_fp4_add(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b) void sm9_z256_fp4_add(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b)
{ {
sm9_z256_fp2_add(r[0], a[0], b[0]); sm9_z256_fp2_add(r[0], a[0], b[0]);
sm9_z256_fp2_add(r[1], a[1], b[1]); sm9_z256_fp2_add(r[1], a[1], b[1]);
} }
void sm9_z256_fp4_dbl(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_dbl(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_dbl(r[0], a[0]); sm9_z256_fp2_dbl(r[0], a[0]);
sm9_z256_fp2_dbl(r[1], a[1]); sm9_z256_fp2_dbl(r[1], a[1]);
} }
void sm9_z256_fp4_sub(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b) void sm9_z256_fp4_sub(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b)
{ {
sm9_z256_fp2_sub(r[0], a[0], b[0]); sm9_z256_fp2_sub(r[0], a[0], b[0]);
sm9_z256_fp2_sub(r[1], a[1], b[1]); sm9_z256_fp2_sub(r[1], a[1], b[1]);
} }
void sm9_z256_fp4_neg(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_neg(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_neg(r[0], a[0]); sm9_z256_fp2_neg(r[0], a[0]);
sm9_z256_fp2_neg(r[1], a[1]); sm9_z256_fp2_neg(r[1], a[1]);
} }
void sm9_z256_fp4_div2(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_div2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_div2(r[0], a[0]); sm9_z256_fp2_div2(r[0], a[0]);
sm9_z256_fp2_div2(r[1], a[1]); sm9_z256_fp2_div2(r[1], a[1]);
} }
void sm9_z256_fp4_a_mul_v(sm9_z256_fp4 r, sm9_z256_fp4 a) void sm9_z256_fp4_a_mul_v(sm9_z256_fp4_t r, sm9_z256_fp4_t a)
{ {
sm9_z256_fp2 r0; sm9_z256_fp2_t r0;
sm9_z256_fp2_a_mul_u(r0, a[1]); sm9_z256_fp2_a_mul_u(r0, a[1]);
@@ -1164,9 +1164,9 @@ void sm9_z256_fp4_a_mul_v(sm9_z256_fp4 r, sm9_z256_fp4 a)
sm9_z256_fp2_copy(r[0], r0); sm9_z256_fp2_copy(r[0], r0);
} }
void sm9_z256_fp4_mul(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b) void sm9_z256_fp4_mul(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b)
{ {
sm9_z256_fp2 r0, r1, t; sm9_z256_fp2_t r0, r1, t;
// r0 = a0 + a1 // r0 = a0 + a1
sm9_z256_fp2_add(r0, a[0], a[1]); sm9_z256_fp2_add(r0, a[0], a[1]);
@@ -1197,21 +1197,21 @@ void sm9_z256_fp4_mul(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b
sm9_z256_fp2_copy(r[1], r1); sm9_z256_fp2_copy(r[1], r1);
} }
void sm9_z256_fp4_mul_fp(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_t k) void sm9_z256_fp4_mul_fp(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_t k)
{ {
sm9_z256_fp2_mul_fp(r[0], a[0], k); sm9_z256_fp2_mul_fp(r[0], a[0], k);
sm9_z256_fp2_mul_fp(r[1], a[1], k); sm9_z256_fp2_mul_fp(r[1], a[1], k);
} }
void sm9_z256_fp4_mul_fp2(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp2 b0) void sm9_z256_fp4_mul_fp2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp2_t b0)
{ {
sm9_z256_fp2_mul(r[0], a[0], b0); sm9_z256_fp2_mul(r[0], a[0], b0);
sm9_z256_fp2_mul(r[1], a[1], b0); sm9_z256_fp2_mul(r[1], a[1], b0);
} }
void sm9_z256_fp4_mul_v(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4 b) void sm9_z256_fp4_mul_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b)
{ {
sm9_z256_fp2 r0, r1, t; sm9_z256_fp2_t r0, r1, t;
sm9_z256_fp2_mul_u(r0, a[0], b[1]); sm9_z256_fp2_mul_u(r0, a[0], b[1]);
sm9_z256_fp2_mul_u(t, a[1], b[0]); sm9_z256_fp2_mul_u(t, a[1], b[0]);
@@ -1225,9 +1225,9 @@ void sm9_z256_fp4_mul_v(sm9_z256_fp4 r, const sm9_z256_fp4 a, const sm9_z256_fp4
sm9_z256_fp2_copy(r[1], r1); sm9_z256_fp2_copy(r[1], r1);
} }
void sm9_z256_fp4_sqr(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_sqr(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2 r0, r1, t; sm9_z256_fp2_t r0, r1, t;
sm9_z256_fp2_add(r1, a[0], a[1]); sm9_z256_fp2_add(r1, a[0], a[1]);
sm9_z256_fp2_sqr(r1, r1); sm9_z256_fp2_sqr(r1, r1);
@@ -1245,9 +1245,9 @@ void sm9_z256_fp4_sqr(sm9_z256_fp4 r, const sm9_z256_fp4 a)
sm9_z256_fp2_copy(r[1], r1); sm9_z256_fp2_copy(r[1], r1);
} }
void sm9_z256_fp4_sqr_v(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_sqr_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2 r0, r1, t; sm9_z256_fp2_t r0, r1, t;
sm9_z256_fp2_mul_u(t, a[0], a[1]); sm9_z256_fp2_mul_u(t, a[0], a[1]);
sm9_z256_fp2_dbl(r0, t); sm9_z256_fp2_dbl(r0, t);
@@ -1260,9 +1260,9 @@ void sm9_z256_fp4_sqr_v(sm9_z256_fp4 r, const sm9_z256_fp4 a)
sm9_z256_fp2_copy(r[1], r1); sm9_z256_fp2_copy(r[1], r1);
} }
void sm9_z256_fp4_inv(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_inv(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2 r0, r1, k; sm9_z256_fp2_t r0, r1, k;
sm9_z256_fp2_sqr_u(k, a[1]); sm9_z256_fp2_sqr_u(k, a[1]);
sm9_z256_fp2_sqr(r0, a[0]); sm9_z256_fp2_sqr(r0, a[0]);
@@ -1278,14 +1278,14 @@ void sm9_z256_fp4_inv(sm9_z256_fp4 r, const sm9_z256_fp4 a)
sm9_z256_fp2_copy(r[1], r1); sm9_z256_fp2_copy(r[1], r1);
} }
void sm9_z256_fp12_copy(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_copy(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp4_copy(r[0], a[0]); sm9_z256_fp4_copy(r[0], a[0]);
sm9_z256_fp4_copy(r[1], a[1]); sm9_z256_fp4_copy(r[1], a[1]);
sm9_z256_fp4_copy(r[2], a[2]); sm9_z256_fp4_copy(r[2], a[2]);
} }
int sm9_z256_fp12_rand(sm9_z256_fp12 r) int sm9_z256_fp12_rand(sm9_z256_fp12_t r)
{ {
if (sm9_z256_fp4_rand(r[0]) != 1 if (sm9_z256_fp4_rand(r[0]) != 1
|| sm9_z256_fp4_rand(r[1]) != 1 || sm9_z256_fp4_rand(r[1]) != 1
@@ -1296,21 +1296,21 @@ int sm9_z256_fp12_rand(sm9_z256_fp12 r)
return 1; return 1;
} }
void sm9_z256_fp12_set_zero(sm9_z256_fp12 r) void sm9_z256_fp12_set_zero(sm9_z256_fp12_t r)
{ {
sm9_z256_fp4_copy(r[0], SM9_Z256_FP4_ZERO); sm9_z256_fp4_copy(r[0], SM9_Z256_FP4_ZERO);
sm9_z256_fp4_copy(r[1], SM9_Z256_FP4_ZERO); sm9_z256_fp4_copy(r[1], SM9_Z256_FP4_ZERO);
sm9_z256_fp4_copy(r[2], SM9_Z256_FP4_ZERO); sm9_z256_fp4_copy(r[2], SM9_Z256_FP4_ZERO);
} }
void sm9_z256_fp12_set_one(sm9_z256_fp12 r) void sm9_z256_fp12_set_one(sm9_z256_fp12_t r)
{ {
sm9_z256_fp4_copy(r[0], SM9_Z256_FP4_MONT_ONE); sm9_z256_fp4_copy(r[0], SM9_Z256_FP4_MONT_ONE);
sm9_z256_fp4_copy(r[1], SM9_Z256_FP4_ZERO); sm9_z256_fp4_copy(r[1], SM9_Z256_FP4_ZERO);
sm9_z256_fp4_copy(r[2], SM9_Z256_FP4_ZERO); sm9_z256_fp4_copy(r[2], SM9_Z256_FP4_ZERO);
} }
int sm9_z256_fp12_from_hex(sm9_z256_fp12 r, const char hex[65 * 12 - 1]) int sm9_z256_fp12_from_hex(sm9_z256_fp12_t r, const char hex[65 * 12 - 1])
{ {
if (sm9_z256_fp4_from_hex(r[2], hex) != 1 if (sm9_z256_fp4_from_hex(r[2], hex) != 1
|| hex[65 * 4 - 1] != SM9_Z256_HEX_SEP || hex[65 * 4 - 1] != SM9_Z256_HEX_SEP
@@ -1323,7 +1323,7 @@ int sm9_z256_fp12_from_hex(sm9_z256_fp12 r, const char hex[65 * 12 - 1])
return 1; return 1;
} }
void sm9_z256_fp12_to_hex(const sm9_z256_fp12 a, char hex[65 * 12 - 1]) void sm9_z256_fp12_to_hex(const sm9_z256_fp12_t a, char hex[65 * 12 - 1])
{ {
sm9_z256_fp4_to_hex(a[2], hex); sm9_z256_fp4_to_hex(a[2], hex);
hex[65 * 4 - 1] = SM9_Z256_HEX_SEP; hex[65 * 4 - 1] = SM9_Z256_HEX_SEP;
@@ -1332,74 +1332,74 @@ void sm9_z256_fp12_to_hex(const sm9_z256_fp12 a, char hex[65 * 12 - 1])
sm9_z256_fp4_to_hex(a[0], hex + 65 * 8); sm9_z256_fp4_to_hex(a[0], hex + 65 * 8);
} }
void sm9_z256_fp12_to_bytes(const sm9_z256_fp12 a, uint8_t buf[32 * 12]) void sm9_z256_fp12_to_bytes(const sm9_z256_fp12_t a, uint8_t buf[32 * 12])
{ {
sm9_z256_fp4_to_bytes(a[2], buf); sm9_z256_fp4_to_bytes(a[2], buf);
sm9_z256_fp4_to_bytes(a[1], buf + 32 * 4); sm9_z256_fp4_to_bytes(a[1], buf + 32 * 4);
sm9_z256_fp4_to_bytes(a[0], buf + 32 * 8); sm9_z256_fp4_to_bytes(a[0], buf + 32 * 8);
} }
void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12 a) void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12_t a)
{ {
char hex[65 * 12]; char hex[65 * 12];
sm9_z256_fp12_to_hex(a, hex); sm9_z256_fp12_to_hex(a, hex);
printf("%s\n%s\n", prefix, hex); printf("%s\n%s\n", prefix, hex);
} }
void sm9_z256_fp12_set(sm9_z256_fp12 r, const sm9_z256_fp4 a0, const sm9_z256_fp4 a1, const sm9_z256_fp4 a2) void sm9_z256_fp12_set(sm9_z256_fp12_t r, const sm9_z256_fp4_t a0, const sm9_z256_fp4_t a1, const sm9_z256_fp4_t a2)
{ {
sm9_z256_fp4_copy(r[0], a0); sm9_z256_fp4_copy(r[0], a0);
sm9_z256_fp4_copy(r[1], a1); sm9_z256_fp4_copy(r[1], a1);
sm9_z256_fp4_copy(r[2], a2); sm9_z256_fp4_copy(r[2], a2);
} }
int sm9_z256_fp12_equ(const sm9_z256_fp12 a, const sm9_z256_fp12 b) int sm9_z256_fp12_equ(const sm9_z256_fp12_t a, const sm9_z256_fp12_t b)
{ {
return sm9_z256_fp4_equ(a[0], b[0]) return sm9_z256_fp4_equ(a[0], b[0])
&& sm9_z256_fp4_equ(a[1], b[1]) && sm9_z256_fp4_equ(a[1], b[1])
&& sm9_z256_fp4_equ(a[2], b[2]); && sm9_z256_fp4_equ(a[2], b[2]);
} }
void sm9_z256_fp12_add(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b) void sm9_z256_fp12_add(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b)
{ {
sm9_z256_fp4_add(r[0], a[0], b[0]); sm9_z256_fp4_add(r[0], a[0], b[0]);
sm9_z256_fp4_add(r[1], a[1], b[1]); sm9_z256_fp4_add(r[1], a[1], b[1]);
sm9_z256_fp4_add(r[2], a[2], b[2]); sm9_z256_fp4_add(r[2], a[2], b[2]);
} }
void sm9_z256_fp12_dbl(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_dbl(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp4_dbl(r[0], a[0]); sm9_z256_fp4_dbl(r[0], a[0]);
sm9_z256_fp4_dbl(r[1], a[1]); sm9_z256_fp4_dbl(r[1], a[1]);
sm9_z256_fp4_dbl(r[2], a[2]); sm9_z256_fp4_dbl(r[2], a[2]);
} }
void sm9_z256_fp12_tri(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_tri(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp12 t; sm9_z256_fp12_t t;
sm9_z256_fp12_dbl(t, a); sm9_z256_fp12_dbl(t, a);
sm9_z256_fp12_add(r, t, a); sm9_z256_fp12_add(r, t, a);
} }
void sm9_z256_fp12_sub(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b) void sm9_z256_fp12_sub(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b)
{ {
sm9_z256_fp4_sub(r[0], a[0], b[0]); sm9_z256_fp4_sub(r[0], a[0], b[0]);
sm9_z256_fp4_sub(r[1], a[1], b[1]); sm9_z256_fp4_sub(r[1], a[1], b[1]);
sm9_z256_fp4_sub(r[2], a[2], b[2]); sm9_z256_fp4_sub(r[2], a[2], b[2]);
} }
void sm9_z256_fp12_neg(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_neg(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp4_neg(r[0], a[0]); sm9_z256_fp4_neg(r[0], a[0]);
sm9_z256_fp4_neg(r[1], a[1]); sm9_z256_fp4_neg(r[1], a[1]);
sm9_z256_fp4_neg(r[2], a[2]); sm9_z256_fp4_neg(r[2], a[2]);
} }
void sm9_z256_fp12_mul(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp12 b) void sm9_z256_fp12_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b)
{ {
sm9_z256_fp4 r0, r1, r2; sm9_z256_fp4_t r0, r1, r2;
sm9_z256_fp4 t, k0, k1; sm9_z256_fp4_t t, k0, k1;
sm9_z256_fp4 m0, m1, m2; sm9_z256_fp4_t m0, m1, m2;
sm9_z256_fp4_mul(m0, a[0], b[0]); sm9_z256_fp4_mul(m0, a[0], b[0]);
sm9_z256_fp4_mul(m1, a[1], b[1]); sm9_z256_fp4_mul(m1, a[1], b[1]);
@@ -1435,9 +1435,9 @@ void sm9_z256_fp12_mul(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_fp
#if 0 #if 0
//this is slower than the version below //this is slower than the version below
void sm9_z256_fp12_sqr(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_sqr(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp4 r0, r1, r2, t; sm9_z256_fp4_t r0, r1, r2, t;
sm9_z256_fp4_sqr(r0, a[0]); sm9_z256_fp4_sqr(r0, a[0]);
sm9_z256_fp4_mul_v(t, a[1], a[2]); sm9_z256_fp4_mul_v(t, a[1], a[2]);
@@ -1459,10 +1459,10 @@ void sm9_z256_fp12_sqr(sm9_z256_fp12 r, const sm9_z256_fp12 a)
sm9_z256_fp4_copy(r[2], r2); sm9_z256_fp4_copy(r[2], r2);
} }
#else #else
void sm9_z256_fp12_sqr(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_sqr(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
sm9_z256_fp4 h0, h1, h2, t; sm9_z256_fp4_t h0, h1, h2, t;
sm9_z256_fp4 s0, s1, s2, s3; sm9_z256_fp4_t s0, s1, s2, s3;
sm9_z256_fp4_sqr(h0, a[0]); sm9_z256_fp4_sqr(h0, a[0]);
sm9_z256_fp4_sqr(h1, a[2]); sm9_z256_fp4_sqr(h1, a[2]);
@@ -1497,10 +1497,10 @@ void sm9_z256_fp12_sqr(sm9_z256_fp12 r, const sm9_z256_fp12 a)
} }
#endif #endif
void sm9_z256_fp12_inv(sm9_z256_fp12 r, const sm9_z256_fp12 a) void sm9_z256_fp12_inv(sm9_z256_fp12_t r, const sm9_z256_fp12_t a)
{ {
if (sm9_z256_fp4_is_zero(a[2])) { if (sm9_z256_fp4_is_zero(a[2])) {
sm9_z256_fp4 k, t; sm9_z256_fp4_t k, t;
sm9_z256_fp4_sqr(k, a[0]); sm9_z256_fp4_sqr(k, a[0]);
sm9_z256_fp4_mul(k, k, a[0]); sm9_z256_fp4_mul(k, k, a[0]);
@@ -1520,7 +1520,7 @@ void sm9_z256_fp12_inv(sm9_z256_fp12 r, const sm9_z256_fp12 a)
sm9_z256_fp4_mul(r[0], r[0], k); sm9_z256_fp4_mul(r[0], r[0], k);
} else { } else {
sm9_z256_fp4 t0, t1, t2, t3; sm9_z256_fp4_t t0, t1, t2, t3;
sm9_z256_fp4_sqr(t0, a[1]); sm9_z256_fp4_sqr(t0, a[1]);
sm9_z256_fp4_mul(t1, a[0], a[2]); sm9_z256_fp4_mul(t1, a[0], a[2]);
@@ -1549,9 +1549,9 @@ void sm9_z256_fp12_inv(sm9_z256_fp12 r, const sm9_z256_fp12 a)
} }
} }
void sm9_z256_fp12_pow(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_t k) void sm9_z256_fp12_pow(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_t k)
{ {
sm9_z256_fp12 t; sm9_z256_fp12_t t;
uint64_t w; uint64_t w;
int i, j; int i, j;
@@ -1571,13 +1571,13 @@ void sm9_z256_fp12_pow(sm9_z256_fp12 r, const sm9_z256_fp12 a, const sm9_z256_t
sm9_z256_fp12_copy(r, t); sm9_z256_fp12_copy(r, t);
} }
void sm9_z256_fp2_conjugate(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_conjugate(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_copy(r[0], a[0]); sm9_z256_copy(r[0], a[0]);
sm9_z256_fp_neg (r[1], a[1]); sm9_z256_fp_neg (r[1], a[1]);
} }
void sm9_z256_fp2_frobenius(sm9_z256_fp2 r, const sm9_z256_fp2 a) void sm9_z256_fp2_frobenius(sm9_z256_fp2_t r, const sm9_z256_fp2_t a)
{ {
sm9_z256_fp2_conjugate(r, a); sm9_z256_fp2_conjugate(r, a);
} }
@@ -1590,7 +1590,7 @@ void sm9_z256_fp2_frobenius(sm9_z256_fp2 r, const sm9_z256_fp2 a)
// alpha5 = 0x2d40a38cf6983351711e5f99520347cc57d778a9f8ff4c8a4c949c7fa2a96686 // alpha5 = 0x2d40a38cf6983351711e5f99520347cc57d778a9f8ff4c8a4c949c7fa2a96686
// mont version (mod p) // mont version (mod p)
static const sm9_z256_fp2 SM9_MONT_BETA = {{0x39b4ef0f3ee72529, 0xdb043bf508582782, 0xb8554ab054ac91e3, 0x9848eec25498cab5}, {0}}; static const sm9_z256_fp2_t SM9_MONT_BETA = {{0x39b4ef0f3ee72529, 0xdb043bf508582782, 0xb8554ab054ac91e3, 0x9848eec25498cab5}, {0}};
static const sm9_z256_t SM9_MONT_ALPHA1 = {0x1a98dfbd4575299f, 0x9ec8547b245c54fd, 0xf51f5eac13df846c, 0x9ef74015d5a16393}; static const sm9_z256_t SM9_MONT_ALPHA1 = {0x1a98dfbd4575299f, 0x9ec8547b245c54fd, 0xf51f5eac13df846c, 0x9ef74015d5a16393};
static const sm9_z256_t SM9_MONT_ALPHA2 = {0xb626197dce4736ca, 0x08296b3557ed0186, 0x9c705db2fd91512a, 0x1c753e748601c992}; static const sm9_z256_t SM9_MONT_ALPHA2 = {0xb626197dce4736ca, 0x08296b3557ed0186, 0x9c705db2fd91512a, 0x1c753e748601c992};
static const sm9_z256_t SM9_MONT_ALPHA3 = {0x39b4ef0f3ee72529, 0xdb043bf508582782, 0xb8554ab054ac91e3, 0x9848eec25498cab5}; static const sm9_z256_t SM9_MONT_ALPHA3 = {0x39b4ef0f3ee72529, 0xdb043bf508582782, 0xb8554ab054ac91e3, 0x9848eec25498cab5};
@@ -1598,25 +1598,25 @@ static const sm9_z256_t SM9_MONT_ALPHA4 = {0x81054fcd94e9c1c4, 0x4c0e91cb8ce2d
static const sm9_z256_t SM9_MONT_ALPHA5 = {0x048baa79dcc34107, 0x5e2e7ac4fe76c161, 0x99399754365bd4bc, 0xaf91aeac819b0e13}; static const sm9_z256_t SM9_MONT_ALPHA5 = {0x048baa79dcc34107, 0x5e2e7ac4fe76c161, 0x99399754365bd4bc, 0xaf91aeac819b0e13};
void sm9_z256_fp4_frobenius(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_frobenius(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_conjugate(r[0], a[0]); sm9_z256_fp2_conjugate(r[0], a[0]);
sm9_z256_fp2_conjugate(r[1], a[1]); sm9_z256_fp2_conjugate(r[1], a[1]);
sm9_z256_fp2_mul(r[1], r[1], SM9_MONT_BETA); sm9_z256_fp2_mul(r[1], r[1], SM9_MONT_BETA);
} }
void sm9_z256_fp4_conjugate(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_conjugate(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_copy(r[0], a[0]); sm9_z256_fp2_copy(r[0], a[0]);
sm9_z256_fp2_neg(r[1], a[1]); sm9_z256_fp2_neg(r[1], a[1]);
} }
void sm9_z256_fp4_frobenius2(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_frobenius2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp4_conjugate(r, a); sm9_z256_fp4_conjugate(r, a);
} }
void sm9_z256_fp4_frobenius3(sm9_z256_fp4 r, const sm9_z256_fp4 a) void sm9_z256_fp4_frobenius3(sm9_z256_fp4_t r, const sm9_z256_fp4_t a)
{ {
sm9_z256_fp2_conjugate(r[0], a[0]); sm9_z256_fp2_conjugate(r[0], a[0]);
sm9_z256_fp2_conjugate(r[1], a[1]); sm9_z256_fp2_conjugate(r[1], a[1]);
@@ -1624,15 +1624,15 @@ void sm9_z256_fp4_frobenius3(sm9_z256_fp4 r, const sm9_z256_fp4 a)
sm9_z256_fp2_neg(r[1], r[1]); sm9_z256_fp2_neg(r[1], r[1]);
} }
void sm9_z256_fp12_frobenius(sm9_z256_fp12 r, const sm9_z256_fp12 x) void sm9_z256_fp12_frobenius(sm9_z256_fp12_t r, const sm9_z256_fp12_t x)
{ {
const sm9_z256_fp2 *xa = x[0]; const sm9_z256_fp2_t *xa = x[0];
const sm9_z256_fp2 *xb = x[1]; const sm9_z256_fp2_t *xb = x[1];
const sm9_z256_fp2 *xc = x[2]; const sm9_z256_fp2_t *xc = x[2];
sm9_z256_fp4 ra; sm9_z256_fp4_t ra;
sm9_z256_fp4 rb; sm9_z256_fp4_t rb;
sm9_z256_fp4 rc; sm9_z256_fp4_t rc;
sm9_z256_fp2_conjugate(ra[0], xa[0]); sm9_z256_fp2_conjugate(ra[0], xa[0]);
sm9_z256_fp2_conjugate(ra[1], xa[1]); sm9_z256_fp2_conjugate(ra[1], xa[1]);
@@ -1651,11 +1651,11 @@ void sm9_z256_fp12_frobenius(sm9_z256_fp12 r, const sm9_z256_fp12 x)
sm9_z256_fp12_set(r, ra, rb, rc); sm9_z256_fp12_set(r, ra, rb, rc);
} }
void sm9_z256_fp12_frobenius2(sm9_z256_fp12 r, const sm9_z256_fp12 x) void sm9_z256_fp12_frobenius2(sm9_z256_fp12_t r, const sm9_z256_fp12_t x)
{ {
sm9_z256_fp4 a; sm9_z256_fp4_t a;
sm9_z256_fp4 b; sm9_z256_fp4_t b;
sm9_z256_fp4 c; sm9_z256_fp4_t c;
sm9_z256_fp4_conjugate(a, x[0]); sm9_z256_fp4_conjugate(a, x[0]);
sm9_z256_fp4_conjugate(b, x[1]); sm9_z256_fp4_conjugate(b, x[1]);
@@ -1668,15 +1668,15 @@ void sm9_z256_fp12_frobenius2(sm9_z256_fp12 r, const sm9_z256_fp12 x)
sm9_z256_fp4_copy(r[2], c); sm9_z256_fp4_copy(r[2], c);
} }
void sm9_z256_fp12_frobenius3(sm9_z256_fp12 r, const sm9_z256_fp12 x) void sm9_z256_fp12_frobenius3(sm9_z256_fp12_t r, const sm9_z256_fp12_t x)
{ {
const sm9_z256_fp2 *xa = x[0]; const sm9_z256_fp2_t *xa = x[0];
const sm9_z256_fp2 *xb = x[1]; const sm9_z256_fp2_t *xb = x[1];
const sm9_z256_fp2 *xc = x[2]; const sm9_z256_fp2_t *xc = x[2];
sm9_z256_fp4 ra; sm9_z256_fp4_t ra;
sm9_z256_fp4 rb; sm9_z256_fp4_t rb;
sm9_z256_fp4 rc; sm9_z256_fp4_t rc;
sm9_z256_fp2_conjugate(ra[0], xa[0]); sm9_z256_fp2_conjugate(ra[0], xa[0]);
sm9_z256_fp2_conjugate(ra[1], xa[1]); sm9_z256_fp2_conjugate(ra[1], xa[1]);
@@ -1697,11 +1697,11 @@ void sm9_z256_fp12_frobenius3(sm9_z256_fp12 r, const sm9_z256_fp12 x)
sm9_z256_fp4_copy(r[2], rc); sm9_z256_fp4_copy(r[2], rc);
} }
void sm9_z256_fp12_frobenius6(sm9_z256_fp12 r, const sm9_z256_fp12 x) void sm9_z256_fp12_frobenius6(sm9_z256_fp12_t r, const sm9_z256_fp12_t x)
{ {
sm9_z256_fp4 a; sm9_z256_fp4_t a;
sm9_z256_fp4 b; sm9_z256_fp4_t b;
sm9_z256_fp4 c; sm9_z256_fp4_t c;
sm9_z256_fp4_copy(a, x[0]); sm9_z256_fp4_copy(a, x[0]);
sm9_z256_fp4_copy(b, x[1]); sm9_z256_fp4_copy(b, x[1]);
@@ -2060,9 +2060,9 @@ void sm9_z256_twist_point_set_infinity(SM9_Z256_TWIST_POINT *R)
sm9_z256_fp2_set_zero(R->Z); sm9_z256_fp2_set_zero(R->Z);
} }
void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2 x, sm9_z256_fp2 y) void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2_t x, sm9_z256_fp2_t y)
{ {
sm9_z256_fp2 z_inv; sm9_z256_fp2_t z_inv;
assert(!sm9_z256_fp2_is_zero(P->Z)); assert(!sm9_z256_fp2_is_zero(P->Z));
@@ -2082,7 +2082,7 @@ void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2 x,
int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q) int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q)
{ {
sm9_z256_fp2 t1, t2, t3, t4; sm9_z256_fp2_t t1, t2, t3, t4;
sm9_z256_fp2_sqr(t1, P->Z); sm9_z256_fp2_sqr(t1, P->Z);
sm9_z256_fp2_sqr(t2, Q->Z); sm9_z256_fp2_sqr(t2, Q->Z);
@@ -2100,7 +2100,7 @@ int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST
int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P) int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P)
{ {
sm9_z256_fp2 t0, t1, t2; sm9_z256_fp2_t t0, t1, t2;
if (sm9_z256_fp2_is_one(P->Z)) { if (sm9_z256_fp2_is_one(P->Z)) {
sm9_z256_fp2_sqr(t0, P->Y); sm9_z256_fp2_sqr(t0, P->Y);
@@ -2136,7 +2136,7 @@ void sm9_z256_twist_point_dbl(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POIN
const sm9_z256_t *X1 = P->X; const sm9_z256_t *X1 = P->X;
const sm9_z256_t *Y1 = P->Y; const sm9_z256_t *Y1 = P->Y;
const sm9_z256_t *Z1 = P->Z; const sm9_z256_t *Z1 = P->Z;
sm9_z256_fp2 X3, Y3, Z3, T1, T2, T3; sm9_z256_fp2_t X3, Y3, Z3, T1, T2, T3;
if (sm9_z256_twist_point_is_at_infinity(P)) { if (sm9_z256_twist_point_is_at_infinity(P)) {
*R = *P; *R = *P;
@@ -2169,7 +2169,7 @@ void sm9_z256_twist_point_add(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POIN
const sm9_z256_t *Z1 = P->Z; const sm9_z256_t *Z1 = P->Z;
const sm9_z256_t *x2 = Q->X; const sm9_z256_t *x2 = Q->X;
const sm9_z256_t *y2 = Q->Y; const sm9_z256_t *y2 = Q->Y;
sm9_z256_fp2 X3, Y3, Z3, T1, T2, T3, T4; sm9_z256_fp2_t X3, Y3, Z3, T1, T2, T3, T4;
if (sm9_z256_twist_point_is_at_infinity(Q)) { if (sm9_z256_twist_point_is_at_infinity(Q)) {
*R = *P; *R = *P;
@@ -2228,7 +2228,7 @@ void sm9_z256_twist_point_add_full(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST
const sm9_z256_t *X2 = Q->X; const sm9_z256_t *X2 = Q->X;
const sm9_z256_t *Y2 = Q->Y; const sm9_z256_t *Y2 = Q->Y;
const sm9_z256_t *Z2 = Q->Z; const sm9_z256_t *Z2 = Q->Z;
sm9_z256_fp2 T1, T2, T3, T4, T5, T6, T7, T8; sm9_z256_fp2_t T1, T2, T3, T4, T5, T6, T7, T8;
if (sm9_z256_twist_point_is_at_infinity(Q)) { if (sm9_z256_twist_point_is_at_infinity(Q)) {
*R = *P; *R = *P;
@@ -2301,7 +2301,7 @@ void sm9_z256_twist_point_mul_generator(SM9_Z256_TWIST_POINT *R, const sm9_z256_
sm9_z256_twist_point_mul(R, k, SM9_Z256_MONT_P2); sm9_z256_twist_point_mul(R, k, SM9_Z256_MONT_P2);
} }
void sm9_z256_eval_g_tangent(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q) void sm9_z256_eval_g_tangent(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q)
{ {
sm9_z256_t x; sm9_z256_t x;
sm9_z256_t y; sm9_z256_t y;
@@ -2318,9 +2318,9 @@ void sm9_z256_eval_g_tangent(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z25
sm9_z256_t *a4 = num[2][0]; sm9_z256_t *a4 = num[2][0];
sm9_z256_t *b1 = den[0][1]; sm9_z256_t *b1 = den[0][1];
sm9_z256_fp2 t0; sm9_z256_fp2_t t0;
sm9_z256_fp2 t1; sm9_z256_fp2_t t1;
sm9_z256_fp2 t2; sm9_z256_fp2_t t2;
sm9_z256_fp12_set_zero(num); sm9_z256_fp12_set_zero(num);
sm9_z256_fp12_set_zero(den); sm9_z256_fp12_set_zero(den);
@@ -2345,7 +2345,7 @@ void sm9_z256_eval_g_tangent(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z25
sm9_z256_fp2_sub(a0, t0, t1); sm9_z256_fp2_sub(a0, t0, t1);
} }
void sm9_z256_eval_g_line(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q) void sm9_z256_eval_g_line(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q)
{ {
sm9_z256_t x; sm9_z256_t x;
sm9_z256_t y; sm9_z256_t y;
@@ -2365,7 +2365,7 @@ void sm9_z256_eval_g_line(sm9_z256_fp12 num, sm9_z256_fp12 den, const SM9_Z256_T
sm9_z256_t *a4 = num[2][0]; sm9_z256_t *a4 = num[2][0];
sm9_z256_t *b1 = den[0][1]; sm9_z256_t *b1 = den[0][1];
sm9_z256_fp2 T0, T1, T2, T3, T4; sm9_z256_fp2_t T0, T1, T2, T3, T4;
sm9_z256_fp12_set_zero(num); sm9_z256_fp12_set_zero(num);
@@ -2431,14 +2431,14 @@ void sm9_z256_twist_point_neg_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_
} }
void sm9_z256_final_exponent_hard_part(sm9_z256_fp12 r, const sm9_z256_fp12 f) void sm9_z256_final_exponent_hard_part(sm9_z256_fp12_t r, const sm9_z256_fp12_t f)
{ {
// a2 = 0xd8000000019062ed0000b98b0cb27659 // a2 = 0xd8000000019062ed0000b98b0cb27659
// a3 = 0x2400000000215d941 // a3 = 0x2400000000215d941
const sm9_z256_t a2 = {0x0000b98b0cb27659, 0xd8000000019062ed, 0, 0}; const sm9_z256_t a2 = {0x0000b98b0cb27659, 0xd8000000019062ed, 0, 0};
const sm9_z256_t a3 = {0x400000000215d941, 0x2, 0, 0}; const sm9_z256_t a3 = {0x400000000215d941, 0x2, 0, 0};
const sm9_z256_t nine = {9,0,0,0}; const sm9_z256_t nine = {9,0,0,0};
sm9_z256_fp12 t0, t1, t2, t3; sm9_z256_fp12_t t0, t1, t2, t3;
sm9_z256_fp12_pow(t0, f, a3); sm9_z256_fp12_pow(t0, f, a3);
sm9_z256_fp12_inv(t0, t0); sm9_z256_fp12_inv(t0, t0);
@@ -2467,10 +2467,10 @@ void sm9_z256_final_exponent_hard_part(sm9_z256_fp12 r, const sm9_z256_fp12 f)
sm9_z256_fp12_copy(r, t1); sm9_z256_fp12_copy(r, t1);
} }
void sm9_z256_final_exponent(sm9_z256_fp12 r, const sm9_z256_fp12 f) void sm9_z256_final_exponent(sm9_z256_fp12_t r, const sm9_z256_fp12_t f)
{ {
sm9_z256_fp12 t0; sm9_z256_fp12_t t0;
sm9_z256_fp12 t1; sm9_z256_fp12_t t1;
sm9_z256_fp12_frobenius6(t0, f); sm9_z256_fp12_frobenius6(t0, f);
sm9_z256_fp12_inv(t1, f); sm9_z256_fp12_inv(t1, f);
@@ -2484,7 +2484,7 @@ void sm9_z256_final_exponent(sm9_z256_fp12 r, const sm9_z256_fp12 f)
// 这个计算是否有更快速的算法 // 这个计算是否有更快速的算法
// 特别是主循环中的计算时否需要再Fp12上面 // 特别是主循环中的计算时否需要再Fp12上面
void sm9_z256_pairing(sm9_z256_fp12 r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P) void sm9_z256_pairing(sm9_z256_fp12_t r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P)
{ {
const char *abits = "00100000000000000000000000000000000000010000101100020200101000020"; const char *abits = "00100000000000000000000000000000000000010000101100020200101000020";
@@ -2492,10 +2492,10 @@ void sm9_z256_pairing(sm9_z256_fp12 r, const SM9_Z256_TWIST_POINT *Q, const SM9_
SM9_Z256_TWIST_POINT _Q1, *Q1 = &_Q1; SM9_Z256_TWIST_POINT _Q1, *Q1 = &_Q1;
SM9_Z256_TWIST_POINT _Q2, *Q2 = &_Q2; SM9_Z256_TWIST_POINT _Q2, *Q2 = &_Q2;
sm9_z256_fp12 f_num; sm9_z256_fp12_t f_num;
sm9_z256_fp12 f_den; sm9_z256_fp12_t f_den;
sm9_z256_fp12 g_num; sm9_z256_fp12_t g_num;
sm9_z256_fp12 g_den; sm9_z256_fp12_t g_den;
int i; int i;
*T = *Q; *T = *Q;
@@ -2759,8 +2759,8 @@ int sm9_z256_point_from_uncompressed_octets(SM9_Z256_POINT *P, const uint8_t oct
int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129]) int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129])
{ {
octets[0] = 0x04; octets[0] = 0x04;
sm9_z256_fp2 x; sm9_z256_fp2_t x;
sm9_z256_fp2 y; sm9_z256_fp2_t y;
sm9_z256_twist_point_get_xy(P, x, y); sm9_z256_twist_point_get_xy(P, x, y);
sm9_z256_fp2_to_bytes(x, octets + 1); sm9_z256_fp2_to_bytes(x, octets + 1);
sm9_z256_fp2_to_bytes(y, octets + 32 * 2 + 1); sm9_z256_fp2_to_bytes(y, octets + 32 * 2 + 1);

View File

@@ -108,7 +108,7 @@ int sm9_sign_finish(SM9_SIGN_CTX *ctx, const SM9_SIGN_KEY *key, uint8_t *sig, si
int sm9_do_sign(const SM9_SIGN_KEY *key, const SM3_CTX *sm3_ctx, SM9_SIGNATURE *sig) int sm9_do_sign(const SM9_SIGN_KEY *key, const SM3_CTX *sm3_ctx, SM9_SIGNATURE *sig)
{ {
sm9_z256_t r; sm9_z256_t r;
sm9_z256_fp12 g; sm9_z256_fp12_t g;
uint8_t wbuf[32 * 12]; uint8_t wbuf[32 * 12];
SM3_CTX ctx = *sm3_ctx; SM3_CTX ctx = *sm3_ctx;
SM3_CTX tmp_ctx; SM3_CTX tmp_ctx;
@@ -197,10 +197,10 @@ int sm9_do_verify(const SM9_SIGN_MASTER_KEY *mpk, const char *id, size_t idlen,
{ {
sm9_z256_t h1; sm9_z256_t h1;
sm9_z256_t h2; sm9_z256_t h2;
sm9_z256_fp12 g; sm9_z256_fp12_t g;
sm9_z256_fp12 t; sm9_z256_fp12_t t;
sm9_z256_fp12 u; sm9_z256_fp12_t u;
sm9_z256_fp12 w; sm9_z256_fp12_t w;
SM9_Z256_TWIST_POINT P; SM9_Z256_TWIST_POINT P;
uint8_t wbuf[32 * 12]; uint8_t wbuf[32 * 12];
SM3_CTX ctx = *sm3_ctx; SM3_CTX ctx = *sm3_ctx;
@@ -252,7 +252,7 @@ int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen,
size_t klen, uint8_t *kbuf, SM9_Z256_POINT *C) size_t klen, uint8_t *kbuf, SM9_Z256_POINT *C)
{ {
sm9_z256_t r; sm9_z256_t r;
sm9_z256_fp12 w; sm9_z256_fp12_t w;
uint8_t wbuf[32 * 12]; uint8_t wbuf[32 * 12];
uint8_t cbuf[65]; uint8_t cbuf[65];
SM3_KDF_CTX kdf_ctx; SM3_KDF_CTX kdf_ctx;
@@ -301,7 +301,7 @@ int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen,
int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_Z256_POINT *C, int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_Z256_POINT *C,
size_t klen, uint8_t *kbuf) size_t klen, uint8_t *kbuf)
{ {
sm9_z256_fp12 w; sm9_z256_fp12_t w;
uint8_t wbuf[32 * 12]; uint8_t wbuf[32 * 12];
uint8_t cbuf[65]; uint8_t cbuf[65];
SM3_KDF_CTX kdf_ctx; SM3_KDF_CTX kdf_ctx;
@@ -543,7 +543,7 @@ int sm9_exch_step_1B(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idA
const SM9_EXCH_KEY *key, const SM9_Z256_POINT *RA, SM9_Z256_POINT *RB, uint8_t *sk, size_t klen) const SM9_EXCH_KEY *key, const SM9_Z256_POINT *RA, SM9_Z256_POINT *RB, uint8_t *sk, size_t klen)
{ {
sm9_z256_t rB; sm9_z256_t rB;
sm9_z256_fp12 G1, G2, G3; sm9_z256_fp12_t G1, G2, G3;
uint8_t g1[32 * 12], g2[32 * 12], g3[32 * 12]; uint8_t g1[32 * 12], g2[32 * 12], g3[32 * 12];
uint8_t ta[65], tb[65]; uint8_t ta[65], tb[65];
SM3_KDF_CTX kdf_ctx; SM3_KDF_CTX kdf_ctx;
@@ -615,7 +615,7 @@ int sm9_exch_step_2A(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idA
const SM9_EXCH_KEY *key, const sm9_z256_t rA, const SM9_Z256_POINT *RA, const SM9_Z256_POINT *RB, uint8_t *sk, size_t klen) const SM9_EXCH_KEY *key, const sm9_z256_t rA, const SM9_Z256_POINT *RA, const SM9_Z256_POINT *RB, uint8_t *sk, size_t klen)
{ {
sm9_z256_t r; sm9_z256_t r;
sm9_z256_fp12 G1, G2, G3; sm9_z256_fp12_t G1, G2, G3;
uint8_t g1[32 * 12], g2[32 * 12], g3[32 * 12]; uint8_t g1[32 * 12], g2[32 * 12], g3[32 * 12];
uint8_t ta[65], tb[65]; uint8_t ta[65], tb[65];
SM3_KDF_CTX kdf_ctx; SM3_KDF_CTX kdf_ctx;

View File

@@ -147,10 +147,10 @@ int test_sm9_z256_fp2() {
{{1,0,0,0}, {0,0,0,0}}, {{1,0,0,0}, {0,0,0,0}},
}; };
const SM9_Z256_TWIST_POINT *Ppubs = &_Ppubs; const SM9_Z256_TWIST_POINT *Ppubs = &_Ppubs;
sm9_z256_fp2 x; sm9_z256_fp2_t x;
sm9_z256_fp2 y; sm9_z256_fp2_t y;
sm9_z256_fp2 r; sm9_z256_fp2_t r;
sm9_z256_fp2 s; sm9_z256_fp2_t s;
sm9_z256_t k; sm9_z256_t k;
int j = 1; int j = 1;
@@ -164,7 +164,7 @@ int test_sm9_z256_fp2() {
sm9_z256_fp_to_mont(y[1], y[1]); sm9_z256_fp_to_mont(y[1], y[1]);
sm9_z256_fp_to_mont(k, k); sm9_z256_fp_to_mont(k, k);
sm9_z256_fp2 iv2 = {{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80}, sm9_z256_fp2_t iv2 = {{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80},
{0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}}; {0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}};
//sm9_z256_fp2_from_hex(r, hex_iv2); if (!sm9_z256_fp2_equ(r, iv2)) goto err; ++j; //sm9_z256_fp2_from_hex(r, hex_iv2); if (!sm9_z256_fp2_equ(r, iv2)) goto err; ++j;
@@ -240,11 +240,11 @@ int test_sm9_z256_fp4() {
{{1,0,0,0}, {0,0,0,0}}, {{1,0,0,0}, {0,0,0,0}},
}; };
const SM9_Z256_TWIST_POINT *Ppubs = &_Ppubs; const SM9_Z256_TWIST_POINT *Ppubs = &_Ppubs;
sm9_z256_fp4 x; sm9_z256_fp4_t x;
sm9_z256_fp4 y; sm9_z256_fp4_t y;
sm9_z256_fp4 r; sm9_z256_fp4_t r;
sm9_z256_fp4 s; sm9_z256_fp4_t s;
sm9_z256_fp2 q; sm9_z256_fp2_t q;
sm9_z256_t k; sm9_z256_t k;
int j = 1; int j = 1;
@@ -258,7 +258,7 @@ int test_sm9_z256_fp4() {
sm9_z256_fp_to_mont(q[0], q[0]); sm9_z256_fp_to_mont(q[0], q[0]);
sm9_z256_fp_to_mont(q[1], q[1]); sm9_z256_fp_to_mont(q[1], q[1]);
sm9_z256_fp4 iv4 = {{{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80}, sm9_z256_fp4_t iv4 = {{{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80},
{0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}}, {0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}},
{{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80}, {{0xf1fdd299c9bb073c, 0xd632457dd14f49a9, 0x6e492768664a2b72, 0xa39654024e243d80},
{0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}}}; {0x0fedcba987654321, 0x123456789abcdef0, 0x0fedcba987654321, 0x123456789abcdef0}}};
@@ -334,10 +334,10 @@ err:
"6b35df1d1153684f1363fce020088a797802e18959df4f006bc5d7f4a632e9f9" "6b35df1d1153684f1363fce020088a797802e18959df4f006bc5d7f4a632e9f9"
int test_sm9_z256_fp12() { int test_sm9_z256_fp12() {
sm9_z256_fp12 x; sm9_z256_fp12_t x;
sm9_z256_fp12 y; sm9_z256_fp12_t y;
sm9_z256_fp12 r; sm9_z256_fp12_t r;
sm9_z256_fp12 s; sm9_z256_fp12_t s;
sm9_z256_t k; sm9_z256_t k;
int j = 1; int j = 1;
@@ -557,8 +557,8 @@ int test_sm9_z256_pairing()
SM9_Z256_TWIST_POINT p; SM9_Z256_TWIST_POINT p;
SM9_Z256_POINT q; SM9_Z256_POINT q;
sm9_z256_fp12 r; sm9_z256_fp12_t r;
sm9_z256_fp12 s; sm9_z256_fp12_t s;
sm9_z256_t k; sm9_z256_t k;
int j = 1; int j = 1;