Я пытаюсь запустить фрагмент кода, который нашел в Интернете, но из-за этой конкретной функции я продолжаю получать кучу ошибок:
EC_KEY* Blockchain::convertToEC(const std::string& key)
{
std::string sKeyInAscii = HexToBytes(key);
std::string sPub64(base64_encode(sKeyInAscii));
std::string sKeyInPem = std::string("-----BEGIN PUBLIC KEY-----\n") + sPub64 + std::string("\n---
--
END PUBLIC KEY-----");
const char* pzKey = sKeyInPem.c_str();
std::unique_ptr< BIO, std::function<void(BIO*)>> bo(BIO_new(BIO_s_mem()), [](BIO* b) {
BIO_free(b);
});
BIO_write(bo.get(), pzKey, strlen(pzKey));
std::unique_ptr< EC_KEY, std::function<void(EC_KEY*)>>
zPublicKey(EC_KEY_new_by_curve_name(NID_X9_62_prime256v1), [](EC_KEY* b) { EC_KEY_free(b); });
EC_KEY* pPubKey = zPublicKey.get();
PEM_read_bio_EC_PUBKEY(bo.get(), &pPubKey, NULL, NULL);
if (EC_KEY_check_key(pPubKey) == 1) {
printf("EC Key valid.\n");
}
else {
printf("EC Key Invalid!\n");
}
return pPubKey;
}
Я предполагаю, что проблема связана с EC_KEY, потому что я используя ECDSA_SIG в какой-то момент моего кода, и я получаю похожие ошибки, хотя я только объявил переменную этого типа. Ошибки в основном такие:
Error C2143 syntax error: missing ';' before '*'
Error C3861 'convertToEC': identifier not found Project1
Error C2039 'convertToEC': is not a member of 'Blockchain'
Error C3861 'HexToBytes': identifier not found Project1
Error C3861 'base64_encode': identifier not found Project1
Error C2143 syntax error: missing ';' before '*' Project1
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int
Error C2238 unexpected token(s) preceding ';'
и многие другие подобные. Ошибки ECDSA_SIG похожи на эти, а также «недопустимый вызов нестатической c функции». Я упоминаю, что перед добавлением этих типов данных у меня не было ошибок, и программа работала без сбоев. Кто-нибудь знает, в чем может быть проблема?