如何使用OpenSSL将生成器点添加到EC公钥?

时间:2014-01-18 15:27:22

标签: c cryptography openssl

我有这个,但它不起作用:

EC_GROUP * group = EC_GROUP_new_by_curve_name(NID_secp256k1);
EC_POINT * pub = EC_POINT_new(group);
EC_POINT * new = EC_POINT_new(group);
BN_CTX * ctx = BN_CTX_new();
EC_POINT_oct2point(group, pub, key->pubkey.key, 33, ctx);
EC_POINT_add(group, (EC_POINT *)EC_GROUP_get0_generator(group), pub, new, ctx);
EC_POINT_point2oct(group, new, POINT_CONVERSION_COMPRESSED, key->pubkey.key, 33, ctx);
BN_CTX_free(ctx);
EC_POINT_free(pub);
EC_POINT_free(new);
EC_GROUP_free(group);

除了压缩密钥不是2或3的第一个字节,但是0(我不知道它是什么,或者它是否是有效类型的公钥)之外,公钥保持不变。 / p>

1 个答案:

答案 0 :(得分:1)

EC_POINT_add(group, (EC_POINT *)EC_GROUP_get0_generator(group), pub, new, ctx);

应该是

EC_POINT_add(group, new, (EC_POINT *)EC_GROUP_get0_generator(group), pub, ctx);