1
OpenSSLを使用してNSDataからEC_Keyを作成します。だから私は、次のように記述:d2i_ECParameters Nullを返します。
- (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);
リターンはnull。
何が問題ですか?彼の偉大なコメントを@jwwする
'd2i_ECParameters'への呼び出しが失敗した後、' ERR_get_error'は何を返しますか? – jww
@jww適切なエラーコードは生成されません。 '218570875'を生成します。 'd2i_ECParameters'関数の' d2i_ECPKParameters(&ret-> group、in、len) 'のエラーです。私は正確な問題を見つけることができません –
'218570875'は' 0xD07207B'です。 'openssl errstr 0xD07207B'は' error:0D07207B:asn1エンコーディングルーチン:ASN1_get_object:header too long'を返します。 'd2i_ECParameters'のパラメータが間違っているようです。 ECパラメータは、ドメインパラメータです。キーではなく曲線を使うべきでしょうか?たぶん 'd2i_ECParameters(&ec_group、&bits、privateKey.length)'のようなものでしょうか? – jww