2011-09-19 24 views
6

Witam Nie mogłem znaleźć sposobu na przekonwertowanie nieprzejrzystego pakietu pkcs # 7 (p7m) w czystym tekście deatached smime tak, aby podpisana zawartość mogła być przetwarzana przez zwykłe biblioteki mime.Konwersja z nieprzezroczystego pkcs7 p7m do odłączonego smime

Chciałbym wziąć plik p7m i przekonwertować go do wiadomości smime keping prawidłowego podpisu.

Kroki powinny być:

  • ekstrakt podpisał treści z p7m

  • ekstraktu cms struktury z p7m

  • opakowanie wszystkiego w nowej strukturze smime z jednorodzinnym podpisu

Czy ta operacja jest możliwa ?

Przeszukałem podręczniki openssl, ale nie mogłem znaleźć sposobu na zrobienie tego.

Odpowiedz

1

byłem w stanie konwertować nieprzezroczyste podpisane wiadomości do jednorodzinnego te z następującego kodu:

#include <openssl/evp.h> 
#include <openssl/bio.h> 
#include <openssl/pkcs7.h> 

int main(int argc, char **argv) 
{ 
    BIO *data = NULL, *bin = NULL, *bout = NULL; 
    PKCS7 *p7, *p7b; 

    OpenSSL_add_all_algorithms(); 

    bin = BIO_new_file("opaque.p7m", "rb"); 
    p7 = SMIME_read_PKCS7(bin, &data); 
    p7b = PKCS7_dup(p7); 

    data = PKCS7_dataInit(p7, NULL); 

    PKCS7_set_detached(p7b, 1); 

    bout = BIO_new_file("detached.p7m", "wb"); 
    SMIME_write_PKCS7(bout, p7b, data, PKCS7_BINARY | SMIME_DETACHED); 
} 

Aby przetestować program I wygenerować opaque.p7m pomocą następującego polecenia:

$ openssl smime -sign -in foo.txt -signer my.crt -inkey my.key -nodetach -out opaque.p7m 

Aby być zwięzłym, powyższy kod nie zawiera żadnych sprawdzeń. Aby zaakceptować różne formaty wejściowe, możesz zmienić SMIME_read_PKCS7 na PEM_read_bio_PKCS7 (PEM) lub d2i_PKCS7_bio (DER).