生成点椭圆曲线

时间:2016-05-29 17:49:45

标签: c openssl elliptic-curve

我正在学习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功能吗? 感谢您的支持。

0 个答案:

没有答案