SM2加法同态加密
typedef struct {
SM2_POINT C1;
SM2_POINT C2;
} SM2_ELGAMAL_CIPHERTEXT;
SM2同态加密密文结构SM2_ELGAMAL_CIPHERTEXT包含两个椭圆曲线点C1和C2。
int sm2_elgamal_do_encrypt(const SM2_KEY *pub_key, uint32_t in, SM2_ELGAMAL_CIPHERTEXT *out);
以SM2公钥pub_key和明文in作为输入,计算同态密文out。函数执行成功返回1,失败返回-1。
int sm2_elgamal_do_decrypt(const SM2_KEY *key, const SM2_ELGAMAL_CIPHERTEXT *in, uint32_t *out);
以SM2密钥key和同态密文in作为输入,解密出明文out。函数执行成功返回1,失败返回-1。
int sm2_elgamal_ciphertext_add(SM2_ELGAMAL_CIPHERTEXT *r, const SM2_ELGAMAL_CIPHERTEXT *a, const SM2_ELGAMAL_CIPHERTEXT *b, const SM2_KEY *pub_key);
int sm2_elgamal_cipehrtext_sub(SM2_ELGAMAL_CIPHERTEXT *r, const SM2_ELGAMAL_CIPHERTEXT *a, const SM2_ELGAMAL_CIPHERTEXT *b, const SM2_KEY *pub_key);
int sm2_elgamal_cipehrtext_neg(SM2_ELGAMAL_CIPHERTEXT *r, const SM2_ELGAMAL_CIPHERTEXT *a, const SM2_KEY *pub_key);
以SM2同态密文a、b(如果有)和SM2公钥pub_key作为输入,实现SM2同态密文的同态加、减、取负运算,并将结果写入SM2同态密文结构r中。函数执行成功返回1,失败返回-1。
int sm2_elgamal_ciphertext_scalar_mul(SM2_ELGAMAL_CIPHERTEXT *R, const uint8_t scalar[32], const SM2_ELGAMAL_CIPHERTEXT *A, const SM2_KEY *pub_key);
以SM2同态密文A、大整数scalar和SM2公钥pub_key作为输入,实现SM2同态密文的同态标量乘法运算,并将结果写入SM2同态密文结构R中。函数执行成功返回1,失败返回-1。
int sm2_elgamal_ciphertext_to_der(const SM2_ELGAMAL_CIPHERTEXT *c, uint8_t **out, size_t *outlen);
int sm2_elgamal_ciphertext_from_der(SM2_ELGAMAL_CIPHERTEXT *c, const uint8_t **in, size_t *inlen);
实现SM2同态密文信息在SM2_ELGAMAL_CIPHERTEXT结构和DER格式间的相互转换。函数执行成功返回1,失败返回-1。
int sm2_elgamal_encrypt(const SM2_KEY *pub_key, uint32_t in, uint8_t *out, size_t *outlen);
int sm2_elgamal_decrypt(SM2_KEY *key, const uint8_t *in, size_t inlen, uint32_t *out);
与sm2_elgamal_do_encrypt和sm2_elgamal_do_decrypt功能相同,但SM2同态密文以DER格式的字节及其长度表示。函数执行成功返回1,失败返回-1。