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

Signieren

Die Erzeugung einer Signatur hat grosse Ähnlichkeit mit dem Verschlüsseln. Ein beliebiges MIME Objekt kann signiert werden.

Die Vorgehensweise wir Anhand eines Beispiels recht klar; in diesem Beispiel wird ein vorliegendes MIME Objekt in ein signiertes Objekt umgewandelt und auf stdout ausgegeben. Fehlerbehandlung und die Wahl einer sinnvollen Boundary fehlen hier.

   GpgmeCtx ctx;
   GpgmeData data, sig;

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

   gpgme_data_new_from_mem (&data, mime_object,
                            mime_object_len, TRUE );
   gpgme_data_new ( &sig );
   gpgme_op_sign (ctx, data, sig, GPGME_SIG_MODE_DETACH );

   fputs ( "Content-Type: multipart/signed;\r\n"
           "              protocol=\"application/pgp-signature\";\r\n"
           "              boundary=\"42=.42=.42=.42\"\r\n"
           "\r\n--42=.42=.42=.42\r\n", stdout );

   gpgme_data_rewind (data);
   while ( !gpgme_data_read (data, buf, sizeof buf, &nread ) ) {
        fwrite (buf, nread, 1, stdout );
   }
   fputs ( "\r\n--42=.42=.42=.42--\r\n"
           "Content-Type: application/pgp-signature\r\n\r\n", stdout);

   gpgme_data_rewind (sig);
   while ( !gpgme_data_read (sig, 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(data);
   gpgme_data_release(sig);

RFC2015[2] und dessen bald erscheinende Überarbeitung definieren noch einige sinnvolle Transformationen des MIME Objekts; z.B. sollten ``trailing white spaces'' entfernt werden und die Zeilen mit kanonischen Zeilentrennern (CR,LF) versehen sein.



Werner Koch 2001-02-14