Ошибки при попытке использовать типы данных openssl - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь запустить фрагмент кода, который нашел в Интернете, но из-за этой конкретной функции я продолжаю получать кучу ошибок:

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 функции». Я упоминаю, что перед добавлением этих типов данных у меня не было ошибок, и программа работала без сбоев. Кто-нибудь знает, в чем может быть проблема?

...