我有这个,但它不起作用:
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>
答案 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);