API参考
载入中...
搜索中...
未找到
sm9_fp.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef _SM9_FP_H_
17#define _SM9_FP_H_
18
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SM9
21
22#include "sm9_bn.h"
23#include "sm9_curve.h"
24#include <string.h>
25
26// Field P
27#define SM9_Fp_Assign(Fpz, Fp_x) \
28 do { \
29 if ((Fpz) != (Fp_x)) \
30 memcpy((Fpz), (Fp_x), 4 * sm9_sys_para.wsize); \
31 } while (0)
32#define SM9_Fp_SetOne(Fpz) \
33 memcpy(Fpz, sm9_sys_para.Q_R1, 4 * sm9_sys_para.wsize)
34#define SM9_Fq_IsZero(Fpx) \
35 bn_is_zero(Fpx, sm9_sys_para.wsize)
36
37#define SM9_Fp_Add(Fp_z, Fp_x, Fp_y) \
38 bn_mod_add(Fp_z, Fp_x, Fp_y, sm9_sys_para.EC_Q, sm9_sys_para.wsize)
39
40#define SM9_Fp_Sub(Fp_z, Fp_x, Fp_y) \
41 bn_mod_sub(Fp_z, Fp_x, Fp_y, sm9_sys_para.EC_Q, sm9_sys_para.wsize)
42
43#define SM9_Fp_Neg(Fp_z, Fp_x) \
44 bn_mod_sub(Fp_z, sm9_sys_para.EC_Q, Fp_x, sm9_sys_para.EC_Q, sm9_sys_para.wsize)
45
46#define SM9_Fp_LastRes(Fp_x) \
47 bn_get_res(Fp_x, sm9_sys_para.EC_Q, sm9_sys_para.wsize)
48
49#define SM9_Fp_Mul(Fp_z, Fp_x, Fp_y) \
50 bn_mont_mul(Fp_z, Fp_x, Fp_y, sm9_sys_para.EC_Q, sm9_sys_para.Q_Mc, sm9_sys_para.wsize)
51
52#define SM9_Fp_Squ(Fp_z, Fp_x) \
53 bn_mont_mul(Fp_z, Fp_x, Fp_x, sm9_sys_para.EC_Q, sm9_sys_para.Q_Mc, sm9_sys_para.wsize)
54
55#define SM9_Fp_Inv(Fp_z, Fp_x) \
56 do { \
57 bn_mont_mul(Fp_z, Fp_x, sm9_sys_para.EC_One, sm9_sys_para.EC_Q, sm9_sys_para.Q_Mc, sm9_sys_para.wsize); \
58 BN_GetInv_Mont(Fp_z, Fp_z, sm9_sys_para.EC_Q, sm9_sys_para.Q_Mc, sm9_sys_para.Q_R2, sm9_sys_para.wsize); \
59 } while (0)
60
61#define SM9_Fp_MulRoot(Fp_z, Fp_x) \
62 bn_mont_mul(Fp_z, Fp_x, sm9_sys_para.EC_Root_Mont, sm9_sys_para.EC_Q, sm9_sys_para.Q_Mc, sm9_sys_para.wsize);
63
64// Field N
65#define SM9_Bn_ReadBytes(x, src) \
66 ByteToBN(src, BNByteLen, x, BNWordLen)
67
68#define SM9_Bn_IsZero(x) \
69 bn_is_zero(x, sm9_sys_para.wsize)
70
71#define SM9_Fn_LastRes(Fp_x) \
72 bn_get_res(Fp_x, sm9_sys_para.EC_N, sm9_sys_para.wsize)
73
74#define SM9_Fn_Sub(Fn_z, Fn_x, Fn_y) \
75 bn_mod_sub(Fn_z, Fn_x, Fn_y, sm9_sys_para.EC_N, sm9_sys_para.wsize)
76
77#define SM9_Fn_Add(Fn_z, Fn_x, Fn_y) \
78 bn_mod_add(Fn_z, Fn_x, Fn_y, sm9_sys_para.EC_N, sm9_sys_para.wsize)
79
80#ifdef __cplusplus
81extern "C" {
82#endif
83
84void SM9_Fp_ReadBytes(uint32_t *dst, const uint8_t *src);
85
86void SM9_Fp_WriteBytes(uint8_t *dst, uint32_t *src);
87
88#ifdef __cplusplus
89}
90#endif
91
92#endif // HITLS_CRYPTO_SM9
93
94#endif // !_SM9_FP_H_