Расшифровка OpenSSL не удалась, но код ошибки равен 0

Когда я пытаюсь расшифровать зашифрованное сообщение S/MIME с помощью CMS в OpenSSL, метод расшифровки возвращает мне 0, что означает «не удалось».

OpenSSL.org говорит...

CMS_decrypt() возвращает либо 1 в случае успеха, либо 0 в случае неудачи. Ошибку можно получить из ERR_get_error(3)

Когда я запускаю это...

out = BIO_new(BIO_s_mem());
if (!out)
        assert(false);

int error = CMS_decrypt(cms, rkey, rcert, out, NULL, 0);
    if (!error) {
    fprintf(stderr, "Error Decrypting Data\n");
    printf("error code: %d\n", ERR_get_error());
    ERR_print_errors_fp(stderr);
    assert(false);
}

... переменная ошибки равна 0, что означает, что произошла ошибка, и код ошибки из ERR_get_error() также равен 0. Кроме того, ERR_print_errors_fp() ничего не печатает, что означает отсутствие ошибки.

Вывод из вышеупомянутого кода:

Error Decrypting Data
error code: 0
Assertion failed: (false)

У кого-нибудь есть предложение, что здесь происходит не так? Спасибо


person Chris    schedule 24.02.2012    source источник
comment
он успешно расшифровывает? Если это так, возможно, стоит проверить, что ошибка возвращает 0, как предполагалось (возвращаемые значения могли быть случайно заменены местами) или просто использовать значение ERR_get_error() в операторе управления.   -  person MD-Tech    schedule 24.02.2012
comment
@MD-Tech: Нет. :-/ БИО пусто. Даже если я создам файл BIO вместо mem BIO, он создаст новый файл, но ничего в нем не запишет...   -  person Chris    schedule 25.02.2012


Ответы (1)


После многих недель попыток использовать различные подходы и разочарования я остановился на расшифровке OpenSSL с помощью PKCS#7. Поскольку CMS в основном основана на PKCS#7, она отлично работает с шифрованием с использованием CMS и дешифрованием с использованием PKCS7.

Я использовал метод pkcs7_decrypt().

person Chris    schedule 17.05.2012