ios - d2i_ECParameters 返回 Null

标签 ios objective-c iphone openssl

我想通过 OpenSSL 从 NSData 创建一个 EC_Key。所以我写了以下内容:

- (void)setPrivateKey:(NSData *)privateKey {
      const unsigned char *bits = (unsigned char *) [privateKey bytes];
      eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
      ec_group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
      EC_KEY_set_group(eckey, ec_group);
      EC_KEY_generate_key(eckey);
      EC_KEY_set_asn1_flag(eckey, OPENSSL_EC_NAMED_CURVE);
      eckey = d2i_ECParameters(&eckey, &bits, privateKey.length);
}

但是

eckey = d2i_ECParameters(&eckey, &bits, privateKey.length);

返回空值。

问题是什么?

最佳答案

感谢@jww 的精彩点评,最后,我通过以下代码块成功解决了这个问题

- (void)setPrivateKey:(NSData *)privateKey {
      const unsigned char *privateKeyBits = (unsigned char *) [privateKey bytes];

     ec_group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
     eckey = EC_KEY_new();
     EC_KEY_set_group(eckey, ec_group);
     EC_KEY_generate_key(eckey);
     EC_KEY_set_asn1_flag(eckey, OPENSSL_EC_NAMED_CURVE);

     BIGNUM *prv = BN_bin2bn(privateKeyBits, sizeof(privateKeyBits), NULL);
     EC_KEY_set_private_key(eckey, prv);

     EC_POINT *pub = EC_POINT_new(ec_group);
     EC_POINT_mul(ec_group, pub, prv, NULL, NULL, NULL);
     EC_KEY_set_public_key(eckey, pub);

     pkey = EVP_PKEY_new();
     EVP_PKEY_set1_EC_KEY(pkey, eckey);
}

虽然我同时拥有公钥和私钥,但是通过上面的代码我从私钥计算出公钥。

关于ios - d2i_ECParameters 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42251980/

相关文章:

ios - 状态栏高度等宏常量

iphone - 使用 cocos2d 在 iPhone 上显示游戏分数的最佳方式?

ios - 如何在 iOS 中将三个文本文件的数据连接/合并为一个文本文件

iphone - .plist 中的 Xcode4ExternalHosts

ios - 触觉引擎和警报

iphone - 在 iphone 应用程序中录制用户语音时降低噪音?

ios - 在 MapView 中搜索注释

ios - PerformDefaultHandlingForAuthenticationChallenge :? 的默认行为是什么

ios - 跟踪 _objc_msgSend 在 dispatch_sync block 内崩溃的策略

ios - Objective-C 中静态队列的异步日志记录