next up previous
Nächste Seite: Prüfung einer Signatur Aufwärts: gnupg+mua_de Vorherige Seite: Entschlüsselung

Verschlüsselung

Eine Verschlüsselung durchzuführen ist prinzipiell recht einfach, wird allerdings dadurch erschwert, daß hier ein UI benötigt wird, welches es erlaubt die Keys der Empfänger auszuwählen. Dies ist ein recht komplexes Thema und wir können hier nicht darauf eingehen.

Als Eingabedaten wird eine Liste der Empfanger benötigt, sowie ein MIME Objekt. Das einfachste MIME Objekt hat den Content-Type text/plain, es ist aber auch jegliches andere MIME Objekt möglich.

Hier der Beispielcode ohne jegliche Fehlerbehandlung, der eine vollständige RFC822[1] Mail ausgibt.

   GpgmeCtx ctx;
   GpgmeData ciphertext, plaintext;
   GpgmeRecipients rset;

   gpgme_new (&ctx);
   gpgme_set_armor (ctx, 1);

   gpgme_data_new_from_mem (&plaintext, mime_object,
                            mime_object_len, TRUE );
   err = gpgme_data_new ( &ciphertext );

   gpgme_recipients_new (&rset);
   gpgme_recipients_add_name (rset, "Bob");,

   gpgme_op_encrypt (ctx, rset, plaintext, ciphertext );
   gpgme_data_release (plaintext);
   gpgme_recipients_release (rset);

   print_mail_headers_without_content_lines ();
   fputs ( "Content-Type: multipart/encrypted;\r\n"
           "              protocol=\"application/pgp-encrypted\";\r\n"
           "              boundary=\"42=.42=.42=.42\"\r\n"
           "\r\n--42=.42=.42=.42\r\n"
           "Content-Type: application/pgp-encrypted\r\n\r\n"
           "Version: 1\r\n
           "\r\n--42=.42=.42=.42\r\n"
           "Content-Type: application/octet-stream\r\n\r\n", stdout );

   gpgme_data_rewind (ciphertext);
   while ( !gpgme_data_read (ciphertext, buf, sizeof buf, &nread ) ) {
        fwrite (buf, nread, 1, stdout );
   }
   fputs ( "\r\n--42=.42=.42=.42--\r\n", stdout );
    
   gpgme_release (ctx);
   gpgme_data_release(plaintext);

print_mail_headers_without_content_lines sollte alle notwendigen Mail Header mit der Ausnahme der Content-*: Zeilen ausgeben. Die Content Zeilen dürfen nicht mit ausgegeben werden, da diese von obigem Coder erzeugt werden. Normalerweise ist es möglich eine existierende Mail zu verschlüsseln, indem die alten Header gespeichert werden, die Content Header benutzt werden um das MIME Objekt zu bilden und dann die obigen Operationen durchgeführt werden.



Werner Koch 2001-02-14