SM9公钥加解密
typedef struct {
SM9_POINT Ppube;
sm9_fn_t ke;
} SM9_ENC_MASTER_KEY;
SM9加密主密钥SM9_ENC_MASTER_KEY结构包含两个成员变量,分别为椭圆曲线点形式的主公钥Ppube和大整数形式的主私钥ke。
int sm9_enc_master_key_generate(SM9_ENC_MASTER_KEY *master);
加密主密钥生成函数:随机生成主私钥ke,计算对应的主公钥Ppube并将二者写入给定的加密主密钥结构master中。
函数执行成功返回1,失败返回-1。
int sm9_enc_master_key_extract_key(SM9_ENC_MASTER_KEY *master, const char *id, size_t idlen, SM9_ENC_KEY *key);
根据给定的用户标识信息字符串id及其长度idlen,基于给定的加密主密钥master计算出用户对应的加密密钥,并写入加密密钥结构key中。
函数执行成功返回1,失败返回-1。
int sm9_enc_master_key_info_encrypt_to_der(const SM9_ENC_MASTER_KEY *msk, const char *pass, uint8_t **out, size_t *outlen);
int sm9_enc_master_key_info_decrypt_from_der(SM9_ENC_MASTER_KEY *msk, const char *pass, const uint8_t **in, size_t *inlen);
实现SM9加密主密钥信息在SM9_ENC_MASTER_KEY结构和加密DER格式存储间的相互转换。
函数执行成功返回1,失败返回-1。
int sm9_enc_master_key_info_encrypt_to_pem(const SM9_ENC_MASTER_KEY *msk, const char *pass, FILE *fp);
int sm9_enc_master_key_info_decrypt_from_pem(SM9_ENC_MASTER_KEY *msk, const char *pass, FILE *fp);
实现SM9加密主密钥信息在SM9_ENC_MASTER_KEY结构和加密PEM格式存储间的相互转换。
函数执行成功返回1,失败返回-1。
int sm9_enc_master_public_key_to_der(const SM9_ENC_MASTER_KEY *mpk, uint8_t **out, size_t *outlen);
int sm9_enc_master_public_key_from_der(SM9_ENC_MASTER_KEY *mpk, const uint8_t **in, size_t *inlen);
实现SM9加密主公钥在SM9_ENC_MASTER_KEY结构和DER格式文件间的相互转换。
函数执行成功返回1,失败返回-1。
int sm9_enc_master_public_key_to_pem(const SM9_ENC_MASTER_KEY *mpk, FILE *fp);
int sm9_enc_master_public_key_from_pem(SM9_ENC_MASTER_KEY *mpk, FILE *fp);
实现SM9加密主公钥在SM9_ENC_MASTER_KEY结构和PEM格式文件间的相互转换。
函数执行成功返回1,失败返回-1。
typedef struct {
SM9_POINT Ppube;
SM9_TWIST_POINT de;
} SM9_ENC_KEY;
SM9加密密钥SM9_ENC_KEY结构包含两个成员变量,分别为椭圆曲线点形式的主公钥Ppube和主私钥de。
int sm9_enc_key_info_encrypt_to_der(const SM9_ENC_KEY *key, const char *pass, uint8_t **out, size_t *outlen);
int sm9_enc_key_info_decrypt_from_der(SM9_ENC_KEY *key, const char *pass, const uint8_t **in, size_t *inlen);
实现SM9加密密钥信息在SM9_ENC_KEY结构和加密DER格式存储间的相互转换。
函数执行成功返回1,失败返回-1。
int sm9_enc_key_info_encrypt_to_pem(const SM9_ENC_KEY *key, const char *pass, FILE *fp);
int sm9_enc_key_info_decrypt_from_pem(SM9_ENC_KEY *key, const char *pass, FILE *fp);
实现SM9加密密钥信息在SM9_ENC_KEY结构和加密PEM格式存储间的相互转换。
函数执行成功返回1,失败返回-1。
#define SM9_MAX_PLAINTEXT_SIZE 255
#define SM9_MAX_CIPHERTEXT_SIZE 367
定义了SM9公钥加解密的明密文最长字节数。
int sm9_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen,
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
使用给定的SM9加密主密钥mpk和长度为idlen的用户身份标识字符串id,对给定的长度为inlen的字节串消息in进行加密。密文的内容和长度分别存放至字节数组out和整数outlen中。
函数执行成功返回1,失败返回-1。
int sm9_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen,
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
使用给定的SM9加密密钥key和长度为idlen的用户身份标识字符串id,对给定的长度为inlen的字节串密文in进行解密。解密出明文的内容和长度分别存放至字节数组out和整数outlen中。
函数执行成功返回1,失败返回-1。