WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
ecc_ec_fp.h
浏览该文件的文档.
1
9#ifndef ECC_EC_FP_H
10#define ECC_EC_FP_H
11
12#include "crypto_pke_struct.h"
13#include "drv_pke_inner.h"
14#include "crypto_osal_lib.h"
15
16#ifdef __cplusplus
17#if __cplusplus
18extern "C" {
19#endif /* __cplusplus */
20#endif /* __cplusplus */
21
22/* The whole DRAM is 4KB, and there are 128 blocks, each block is 256bits. For ecc, it needs to support 521bits, so
23there should be 3 block DRAM used for calculate. */
24
25/* * struct of ecc point */
26typedef struct {
27 td_u8 *x; /* X coordinates of the point in Jacobian coordinate system. */
28 td_u8 *y; /* Y coordinates of the point in Jacobian coordinate system. */
29 td_u8 *z; /* Z coordinates of the point in Jacobian coordinate system. */
32
42
44
55
65 const drv_pke_ecc_point *out, const uintptr_t check_word);
66
79
89
102
112
125td_s32 ecc_ecfp_mul_add(const drv_pke_ecc_curve *ecc, const drv_pke_data *u1, const drv_pke_data *u2,
127
139/************************************************** inner calculate API start************************************/
149td_s32 get_random_key(const td_u8 *n, const td_u32 size, td_u8 *rand CIPHER_CHECK_WORD);
150
160td_s32 update_modulus(const td_u8 *n, const td_u32 n_len CIPHER_CHECK_WORD);
161
176td_s32 ecc_ecfn_sign_s(const drv_pke_data *k_inv, const drv_pke_data *e, const drv_pke_data *d,
177 const drv_pke_data *r, const drv_pke_data *n, const drv_pke_data *s CIPHER_CHECK_WORD);
178
194td_s32 ecc_ecfn_verify_u(const drv_pke_data *s_inv, const drv_pke_data *e, const drv_pke_data *r,
195 const drv_pke_data *n, const drv_pke_data *u1, const drv_pke_data *u2 CIPHER_CHECK_WORD);
196
205td_s32 ecc_ecfn_verify_v(const drv_pke_ecc_curve *ecc, const drv_pke_ecc_sig *sig, td_u8 *out_v);
206
217 td_bool *is_on_curve CIPHER_CHECK_WORD);
218
232
244 const drv_pke_data *r, const drv_pke_data *s);
245
247 const drv_pke_data *c, uintptr_t const check_word);
248
260 const drv_pke_data *n, const drv_pke_data *out);
272/************************************************** inner calculate API end************************************/
273
274#ifdef __cplusplus
275#if __cplusplus
276}
277#endif /* __cplusplus */
278#endif /* __cplusplus */
279
280#endif
drv_pke_ecc_curve_type
Definition crypto_pke_struct.h:32
#define CIPHER_CHECK_WORD
Definition crypto_security.h:111
td_s32 ecc_ecfn_add_mod(const drv_pke_data *a, const drv_pke_data *b, const drv_pke_data *p, const drv_pke_data *c CIPHER_CHECK_WORD)
calculate modular addition on prime n domain. Here use instr_sm2_verify_t_3 as common add_mod calcula...
Definition sm2_ec_fp_sign_verify.c:14
td_s32 ecc_ecfp_demontgomery_data_aff(const drv_pke_ecc_point *r, td_u32 work_len)
demontgomery data, (ecc_addr_cx, ecc_addr_cy) -> (ecc_addr_cx, ecc_addr_cy). Before calculate demont,...
Definition ecc_ec_fp_sign_verify_common.c:81
td_s32 ecc_ecfp_montgomery_data_aff_backup(const drv_pke_ecc_point *in, const drv_pke_data *mod_p, const drv_pke_ecc_point *out, const uintptr_t check_word)
montgomery the point coordinate in affine coordinate system.
td_s32 sm2_ecfn_sign_s(const drv_pke_data *k, const drv_pke_data *d, const drv_pke_data *n, const drv_pke_data *r, const drv_pke_data *s)
calculate s for sm2 signature. s = (1 + d) * (k - r *d) mod n. and the output is the demontgomeried r...
td_s32 ecc_ecfp_jac_to_aff(const drv_pke_data *mod_p)
Get final calculate result. trans (ecc_addr_cx, ecc_addr_cy, ecc_addr_cz) from jac to aff....
Definition ecc_ec_fp_sign_verify_common.c:15
td_s32 update_modulus(const td_u8 *n, const td_u32 n_len CIPHER_CHECK_WORD)
update modulus into ecc_addr_m, and set new montgomery parameter into reg. Before call this API,...
Definition ecc_ec_fp_sign_verify_common.c:100
td_s32 ecc_ecfn_verify_v(const drv_pke_ecc_curve *ecc, const drv_pke_ecc_sig *sig, td_u8 *out_v)
verify whether the v == r.
Definition ecc_ec_fp_verify.c:48
td_s32 ecc_ecfp_point_valid_standard(drv_pke_ecc_curve_type curve_type, const drv_pke_ecc_point *pub_key, td_bool *is_on_curve CIPHER_CHECK_WORD)
the standard method to check whether the point is on the curve.
td_s32 ecc_ecfn_inv(const drv_pke_data *a, const drv_pke_data *n, const drv_pke_data *c CIPHER_CHECK_WORD)
c = ~a mod n, ecc_addr_s = 1/ecc_addr_k. Before call this API, you should have set curve initial para...
Definition ecc_ec_fp_sign_verify_common.c:124
td_s32 ecc_ecfn_verify_u(const drv_pke_data *s_inv, const drv_pke_data *e, const drv_pke_data *r, const drv_pke_data *n, const drv_pke_data *u1, const drv_pke_data *u2 CIPHER_CHECK_WORD)
calculate the u1 = s_inv * e mod n & u2 = s_inv * r mod n. montgomery multiplication modulurs and twi...
Definition ecc_ec_fp_verify.c:14
td_s32 sm2_ecfn_verify_r(const drv_pke_data *rx, const drv_pke_data *hash, const drv_pke_data *r, const drv_pke_data *n, const drv_pke_data *out)
calculate r= e + Rx mod n, and check whether r -r == 0?
td_s32 get_random_key(const td_u8 *n, const td_u32 size, td_u8 *rand CIPHER_CHECK_WORD)
Get the random key object range in [1, n-1]
Definition ecc_ec_fp_sign_common.c:17
td_s32 ecc_ecfp_aff_to_jac(const drv_pke_ecc_point *in, const drv_pke_data *mod_p, pke_ecc_point_jac *out)
trans coordinate system from affine to jacobin, before call this API, you should have set mont_1_p an...
Definition ecc_ec_fp_sign_common.c:67
td_s32 ecc_ecfp_mul_naf_cal(td_u32 work_len, const drv_pke_data *k)
R = k * G, point multiplication. Before call this API, you should have set curve initial parameters,...
Definition ecc_ec_fp_sign_common.c:104
td_s32 ecc_ecfp_demontgomery_data_jac_z(const drv_pke_data *z, td_u32 work_len)
td_s32 sm2_ecfn_add_mod(const drv_pke_data *a, const drv_pke_data *b, const drv_pke_data *p, const drv_pke_data *c, uintptr_t const check_word)
td_s32 ecc_ecfp_mul_naf(const drv_pke_ecc_curve *ecc, const drv_pke_data *k, const drv_pke_ecc_point *p, const drv_pke_ecc_point *r CIPHER_CHECK_WORD)
R = k * G, point multiplication.
Definition ecc_ec_fp_sign_common.c:125
td_s32 ecc_ecfp_montgomery_data_aff(const drv_pke_ecc_point *in, const drv_pke_data *mod_p, const drv_pke_ecc_point *out CIPHER_CHECK_WORD)
montgomery the point coordinate in affine coordinate system. Before call this API,...
Definition ecc_ec_fp_sign_verify_common.c:32
td_s32 ecc_ecfn_sign_s(const drv_pke_data *k_inv, const drv_pke_data *e, const drv_pke_data *d, const drv_pke_data *r, const drv_pke_data *n, const drv_pke_data *s CIPHER_CHECK_WORD)
calculate the s value of signature. s = k_inv * (e + d * r) mod n. montgomery multiplication modulurs...
Definition ecc_ec_fp_sign.c:15
td_s32 ecc_ecfp_mul_add(const drv_pke_ecc_curve *ecc, const drv_pke_data *u1, const drv_pke_data *u2, const drv_pke_ecc_point *q, const drv_pke_ecc_point *r CIPHER_CHECK_WORD)
R = u1 * G + u2 * Q. Before call this API, you should have set curve initial parameters into DRAM,...
Definition ecc_ec_fp_verify_common.c:74
td_s32 sign_verify_hash(const sm2_sign_verify_hash_pack *param, const drv_pke_msg *msg, drv_pke_data *hash CIPHER_CHECK_WORD)
calculate hash for sm2.
Definition crypto_pke_struct.h:74
Definition crypto_pke_struct.h:96
Definition crypto_pke_struct.h:80
Definition crypto_pke_struct.h:89
Definition crypto_pke_struct.h:111
Definition ecc_ec_fp.h:26
td_u8 * z
Definition ecc_ec_fp.h:29
td_u32 length
Definition ecc_ec_fp.h:30
td_u8 * x
Definition ecc_ec_fp.h:27
td_u8 * y
Definition ecc_ec_fp.h:28
Definition drv_pke_inner.h:115
unsigned int uintptr_t
Definition td_type.h:65
unsigned char td_u8
Definition td_type.h:36
td_u8 td_bool
Definition td_type.h:50
unsigned int td_u32
Definition td_type.h:38
int td_s32
Definition td_type.h:44