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_a和blind_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作为输入,计算脱盲后的签名及其长度并分别写入到sig与siglen中。函数执行成功返回1,失败返回-1。