16#ifndef __HEADER_SM9_ALG_H__
17#define __HEADER_SM9_ALG_H__
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SM9
28void SM9_Hash_Init(SM9_Hash_Ctx *ctx);
29void SM9_Hash_Update(SM9_Hash_Ctx *ctx,
const uint8_t *data, uint32_t len);
30void SM9_Hash_Final(SM9_Hash_Ctx *ctx, uint8_t *digest);
31void SM9_Hash_Data(
const uint8_t *data, uint32_t len, uint8_t *digest);
33#define SM3_Alg_Data SM9_Hash_Data
40void sm9_rand(uint8_t *p, uint32_t len);
43#define SM9_CURVE_MODULE_BYTES 32
49#define SM9_SIG_SYS_PRIKEY_BYTES SM9_CURVE_MODULE_BYTES
50#define SM9_SIG_SYS_PUBKEY_BYTES (4*SM9_CURVE_MODULE_BYTES)
51#define SM9_SIG_USR_PRIKEY_BYTES (2*SM9_CURVE_MODULE_BYTES)
53#define SM9_ENC_SYS_PRIKEY_BYTES SM9_CURVE_MODULE_BYTES
54#define SM9_ENC_SYS_PUBKEY_BYTES (2*SM9_CURVE_MODULE_BYTES)
55#define SM9_ENC_USR_PRIKEY_BYTES (4*SM9_CURVE_MODULE_BYTES)
57#define SM9_SIGNATURE_BYTES (3*SM9_CURVE_MODULE_BYTES)
59#define SM9_KEYEX_RA_BYTES (2*SM9_CURVE_MODULE_BYTES)
60#define SM9_KEYEX_RB_BYTES (2*SM9_CURVE_MODULE_BYTES)
62#define SM9_OPT_DM_MODE0 0x00
63#define SM9_OPT_DM_MODE1 0x04
64#define SM9_OPT_DM_MODE2 0x02
65#define SM9_OPT_DM_MODE3 0x06
69#define SM9_ERR_ID_UNUSEABLE 0x3F01
70#define SM9_ERR_RND_UNUSEABLE 0x3F02
71#define SM9_ERR_BAD_INPUT 0x3F03
72#define SM9_ERR_VERIFY_FAILED 0x3F04
73#define SM9_ERR_INVALID_POINT 0x3F05
74#define SM9_ERR_MAC_FAILED 0x3F06
75#define SM9_ERR_INPUT 0x3F07
76#define SM9_ERR_MODE_UNUSEABLE 0x3F0E
77#define SM9_ERR_NODEINFO 0x3F0A
78#define SM9_ERR_UNSUPPORT 0x3F0F
86int32_t SM9_Alg_GetVersion();
93int32_t SM9_Get_Sig_G(uint8_t *g, uint8_t *mpk);
95int32_t SM9_Get_Enc_G(uint8_t *g, uint8_t *mpk);
127int32_t SM9_Alg_Verify(
134 const uint8_t *sign);
177int32_t SM9_Alg_KeyEx_InitA(
187int32_t SM9_Alg_KeyEx_InitB(
199int32_t SM9_Alg_KeyEx_ConfirmA(
215int32_t SM9_Alg_KeyEx_ConfirmB(
230int32_t SM9_Alg_KeyEx_VerifySA(
243int32_t SM9_Alg_KeyEx_VerifySB(