[Kalle] signature verification and decoding of encrypted mails
authorKarl-Heinz Zimmer <khz@kde.org>
Sun, 25 Nov 2001 15:23:21 +0000 (15:23 +0000)
committerKarl-Heinz Zimmer <khz@kde.org>
Sun, 25 Nov 2001 15:23:21 +0000 (15:23 +0000)
gpgmeplug/cryptplug.h
gpgmeplug/gpgmeplug.c

index e809fca..1e4a67d 100644 (file)
@@ -921,9 +921,9 @@ struct SignatureMetaData {
 
 /*! \ingroup groupSignAct
    \brief Checks whether the signature of a message is
-          valid. \c ciphertext specifies the message
-          as it was received by the MUA, \c cleartext
-          is the message with the signature(s) removed.
+          valid. \c ciphertext specifies the signed message
+          as it was received by the MUA, \c signaturetext is the
+          signature itself.
 
    Depending on the configuration, MUAs might not need to use this.
    If \c sigmeta is non-null, the
@@ -932,7 +932,7 @@ struct SignatureMetaData {
           function call.
 */
 bool checkMessageSignature( const char* ciphertext,
-                            const char** cleartext,
+                            const char* signaturetext,
                             struct SignatureMetaData* sigmeta );
 
 /*! \ingroup groupSignAct
index 3fe308b..8be1948 100644 (file)
@@ -773,8 +773,30 @@ bool signMessage( const char*  cleartext,
   return bOk;
 }
 
-bool checkMessageSignature( const char* ciphertext, const char**
-        cleartext, struct SignatureMetaData* sigmeta ){ return true; }
+
+bool checkMessageSignature( const char* ciphertext, 
+                            const char* signaturetext,
+                            struct SignatureMetaData* sigmeta )
+{ 
+    GpgmeCtx ctx;
+    GpgmeSigStat status;
+    GpgmeData datapart, sigpart;
+
+    gpgme_new( &ctx );
+    gpgme_data_new_from_mem( &datapart, ciphertext,
+                             1+strlen( ciphertext ), 1 );
+    gpgme_data_new_from_mem( &sigpart, signaturetext,
+                             1+strlen( signaturetext ), 1 );
+
+    gpgme_op_verify( ctx, sigpart, datapart, &status );
+    gpgme_data_release( datapart );
+    gpgme_data_release( sigpart );
+    gpgme_release( ctx );
+
+    // PENDING(khz) Differentiate better between various failures
+    // PENDING(khz) Fill sigmeta
+    return ( status == GPGME_SIG_STAT_GOOD );
+}
 
 bool storeCertificatesFromMessage(
         const char* ciphertext ){ return true; }