Самый простой способ сообщить об ошибках в AES-GCM EVP_DecryptFinal_ex () OpenSSL - PullRequest
0 голосов
/ 03 августа 2020

У меня есть небольшой класс C ++ для обработки зашифрованных сообщений для приложения. Один из методов класса завершает расшифровку, проверяя тег AEAD. Эта функция не работает. Я пытаюсь понять почему. Вот функция:

bool aescipher::finalizeDecrypt(uint8_t* src, uint8_t tag[AES_GCM_TAG_LENGTH])
{
    if (mMode != DECRYPT) { return false; }
    if (!src) { return false; }
    if (mFinalized) { return false; }

    //Set expected tag value.
    if(!EVP_CIPHER_CTX_ctrl(mContext, EVP_CTRL_GCM_SET_TAG, AES_GCM_TAG_LENGTH, tag)) {
        return false;
    }
    // finalize, note: no output for GCM.
    int outlen = false;
    if (EVP_DecryptFinal_ex(mContext, src, &outlen) <= 0){
        return false;
    }
    mFinalized = true;
    return true;
}

Функция не работает на EV_DecryptFinal_ex() Теперь я не спрашиваю, почему она не работает. По крайней мере, пока. Я предполагаю, что когда EVP_DecryptFinal_ex() выходит из строя, где-то сообщается об ошибке. Как я могу понять, почему это не удалось? Я пробовал использовать:

    if (EVP_DecryptFinal_ex(mContext, src, &outlen) <= 0){
        ERR_print_errors_fp(stderr); 
        return false;
    }

, но это ничего не дает stderr. Я пробовал делать:

    if (EVP_DecryptFinal_ex(mContext, src, &outlen) <= 0){
        fprintf(stderr, "%lu", ERR_get_error());
        return false;
    }

, но это также просто печатает 0.

Я делаю это неправильно или есть другой способ определить по EVP_DecryptFinal_ex() не работает?

...