我正在学习Elliptic Cruve,我正在学习OpenSSL以便在C中快速实现。现在我想了解如何生成随机数并将其与Generator Point相乘。形式上:用户在[1,\ dots,n - 1]中生成一个随机数r_U \并计算R_U = r_U \次G("我不能插入图像,因为我的声誉少于10& #34;。)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/obj_mac.h>
int main() {
const EC_GROUP *curve;
BIGNUM *r_U=BN_new();
BIGNUM *n=BN_new();//Order Curve
EC_KEY *key=NULL;
const BIGNUM *c=BN_new(); //Private Key CA
const EC_POINT *C; //Public Key CA
EC_POINT *R_U; //R_U point
BN_CTX *ctx;
const EC_POINT *G; //Generator
curve = EC_GROUP_new_by_curve_name(NID_secp224r1);
G=EC_GROUP_get0_generator(curve);
EC_GROUP_get_order(curve,n,ctx);
//Private Key and Public Key CA
key = EC_KEY_new_by_curve_name(NID_secp224r1);
EC_KEY_generate_key(key);
key_user = EC_KEY_new_by_curve_name(NID_secp224r1);
EC_KEY_generate_key(key_user);
c=EC_KEY_get0_private_key(key);
printf("\nPrivate Key CA:%s",BN_bn2dec(c));
return 0;
}
现在如何生成1到n-1之间的随机数并将其乘以G?我可以使用EC_POINT_mul功能吗? 感谢您的支持。