2011-09-19 18 views
6

Ciao Non riuscivo a trovare un modo per convertire un opaco pkcs # 7 (p7m) in un testo chiaro smeat in disordine in modo che il contenuto firmato potesse essere elaborato dalle normali librerie mime.conversione da opaco pkcs7 p7m a smine distaccato

Mi piacerebbe prendere il file p7m e convertirlo in un messaggio smime che firma una firma valida.

I passaggi dovrebbero essere:

  • estratto firmato contenuti da p7m

  • estratto cm struttura da p7m

  • pacchetto tutto in una nuova struttura SMIME con la firma distaccata

Questa operazione è possibile ?

Ho cercato tra i manuali di openssl ma non sono riuscito a trovare il modo di farlo.

risposta

1

sono stato in grado di convertire i messaggi opachi-firmato per una quelle staccate con il seguente codice:

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

Per testare il programma a generare l'opaque.p7m con il seguente comando:

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

Per essere conciso, il codice sopra non ha assegni. Per accettare diversi formati di input, è possibile modificare SMIME_read_PKCS7 in PEM_read_bio_PKCS7 (PEM) o d2i_PKCS7_bio (DER).