【问题标题】:OpenSSL: print X and Y of EC_POINTOpenSSL:打印 EC_POINT 的 X 和 Y
【发布时间】:2013-09-01 00:43:51
【问题描述】:

这是我的代码:

EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
printf("%s", pub->X);

我收到一条错误消息,提示“'struct ec_point_st' 类型的定义不完整”。我也试过了:

EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_secp521r1);
BN_CTX *ecctx= BN_CTX_new();
EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
NSLog(@"%s", EC_POINT_point2hex(curve, pub, POINT_CONVERSION_HYBRID, ecctx));

在这种情况下,我会收到 EXC_BAD_ACCESS 错误。如何打印(用于调试)公钥的 x 和 y 点?

【问题讨论】:

    标签: objective-c cryptography openssl public-key-encryption cryptoapi


    【解决方案1】:

    在调用EC_KEY_generate_key 之前,您必须将EC_GROUP 对象与EC_KEY 相关联:

        EC_KEY *ec_key = EC_KEY_new();
        EC_GROUP *ec_group = EC_GROUP_new_by_curve_name(NID_secp521r1);
    
        EC_KEY_set_group(ec_key, ec_group);
        EC_KEY_generate_key(ec_key);
    

    然后打印公钥:

        const EC_POINT *pub = EC_KEY_get0_public_key(ec_key);
    
        BIGNUM *x = BN_new();
        BIGNUM *y = BN_new();
    
        if (EC_POINT_get_affine_coordinates_GFp(ec_group, pub, x, y, NULL)) {
            BN_print_fp(stdout, x);
            putc('\n', stdout);
            BN_print_fp(stdout, y);
            putc('\n', stdout);
        }
    

    不要忘记添加错误和内存处理,上面的示例代码泄漏。

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多