SM2公钥加密

typedef struct {
	SM2_POINT point;
	uint8_t hash[32];
	uint32_t ciphertext_size;
	uint8_t ciphertext[1];
} SM2_CIPHERTEXT;

SM2密文结构包含三部分:椭圆曲线点point、256位哈希值hash和密文异或值ciphertext(及其长度ciphertext_size)。

int sm2_ciphertext_to_der(const SM2_CIPHERTEXT *c, uint8_t **out, size_t *outlen);
int sm2_ciphertext_from_der(SM2_CIPHERTEXT *c, const uint8_t **in, size_t *inlen);

函数提供SM2密文的格式转换功能。

sm2_ciphertext_to_dersm2_ciphertext_from_der函数实现SM2密文在SM2_CIPHERTEXT结构和DER格式间的相互转换。函数执行成功返回1,失败返回-1。

int sm2_do_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, SM2_CIPHERTEXT *out);
int sm2_do_decrypt(const SM2_KEY *key, const SM2_CIPHERTEXT *in, uint8_t *out, size_t *outlen);

函数提供SM2公钥加解密功能。

sm2_do_encrypt函数中,SM2密钥key应为SM2_KEY格式,并同时给定明文数组in及其长度inlen,函数计算出对应密文并存放至密文结构outsm2_do_decrypt函数的参数与此类似,但密文in由调用者提供,函数对其进行解密并将铭文存放到数组out中。函数执行成功返回1,失败返回-1。

int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
int sm2_decrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);

函数提供提供DER格式的SM2公钥加解密功能。

sm2_encrypt函数与sm2_do_encrypt函数类似,但最后计算出的密文被转换为DER格式存放到out中,长度信息存放到outlen中;sm2_decrypt函数与sm2_do_decrypt函数类似,但读取DER格式的密文in和长度信息inlen并进行解密,获得的明文及其长度存放到ininlen中。函数执行成功返回1,失败返回-1。