SM2盲签名

typedef struct {
	SM3_CTX sm3_ctx;
	SM2_KEY public_key;
	uint8_t blind_factor_a[32];
	uint8_t blind_factor_b[32];
	uint8_t sig_r[32];
} SM2_BLIND_SIGN_CTX;

SM2盲签名结构SM2_BLIND_SIGN_CTX包含:SM3哈希上下文结构sm3_ctx、SM2密钥pblic_key、两个256位盲因子blind_factor_ablind_factor_b和最终的256位盲签名sig_r

int sm2_blind_sign_commit(SM2_Fn k, uint8_t *commit, size_t *commitlen);

对随机数k生成承诺值并写入到字节数组commit中,长度写入commitlen中。函数返回1。

int sm2_blind_sign_init(SM2_BLIND_SIGN_CTX *ctx, const SM2_KEY *public_key, const char *id, size_t idlen);

以签名者公钥public_key和身份信息id(长度idlen)作为输入,初始化SM2盲签名将要使用的上下文结构ctx。函数执行成功返回1,失败返回-1。

int sm2_blind_sign_update(SM2_BLIND_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);

以消息data及其长度datalen作为输入,更新SM2盲签名上下文结构ctx。函数执行成功返回1,失败返回-1。

int sm2_blind_sign_finish(SM2_BLIND_SIGN_CTX *ctx, const uint8_t *commit, size_t commitlen, uint8_t blinded_sig_r[32]);

以长度为commitlen的承诺值commit作为输入,计算盲签名值的r部分并写入到blinded_sig_r中。函数执行成功返回1,失败返回-1。

int sm2_blind_sign(const SM2_KEY *key, const SM2_Fn k, const uint8_t blinded_sig_r[32], uint8_t blinded_sig_s[32]);

以签名者的密钥key和大整数k作为输入,计算盲签名值的s部分并写入到blinded_sig_s中。函数执行成功返回1,失败返回-1。

int sm2_blind_sign_unblind(SM2_BLIND_SIGN_CTX *ctx, const uint8_t blinded_sig_s[32], uint8_t *sig, size_t *siglen);

以盲签名值的s部分blinded_sig_s作为输入,计算脱盲后的签名及其长度并分别写入到sigsiglen中。函数执行成功返回1,失败返回-1。