2012-02-24 15 views
7

Kiedy próbuję odszyfrować zaszyfrowaną wiadomość S/MIME za pomocą CMS w OpenSSL, metoda odszyfrowywania zwraca mi 0, co oznacza, że ​​się nie udało.Odszyfrowanie OpenSSL kończy się niepowodzeniem, ale kod błędu to 0

OpenSSL.org mówi ..

CMS_decrypt() zwraca albo 1 lub 0 dla sukcesu na niepowodzenie. Błąd może być otrzymany z ERR_get_error (3)

gdy ten ...

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); 
} 

... zmienną błędu 0, co oznacza, wystąpił błąd i kod błędu jest ERR_get_error() również 0. Dodatkowo ERR_print_errors_fp() nie drukuje niczego co oznacza, że ​​nie wystąpił błąd.

Wyjście ze wspomnianego kodu:

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

Czy ktoś ma sugestię, co się dzieje niewłaściwy tutaj? Dzięki

+1

czy odszyfrowuje się pomyślnie? Jeśli tak, warto sprawdzić, czy błąd zwraca 0 zgodnie z zamierzeniem (wartości zwracane mogły zostać przypadkowo zamienione) lub po prostu użyć wartości "ERR_get_error()" w instrukcji sterowania –

+0

@ MD-Tech: Nie. : -/BIO jest pusty. Nawet jeśli utworzę plik BIO zamiast memu BIO, to utworzy nowy plik, ale niczego w nim nie zapisze ... – Chris

Odpowiedz

0

Po wielu tygodniach próbowania różnych podejść i frustracji skończyłem używając odszyfrowywania PKCS # 7 OpenSSL. Due CMS jest oparte na PKCS # 7 działa dobrze z szyfrowaniem za pomocą CMS i deszyfrowania przy użyciu PKCS7.

Metodą, której użyłem jest pkcs7_decrypt().

0

Z ciekawości, co zwraca ERR_peek_last_error()?

+0

Myślę, że było 0, ponieważ próbowałem wszystkiego, ale nie było żadnego błędu (openssl) . – Chris