From 2331d9df2625cb0eabca89128c57677ac3b65ca4 Mon Sep 17 00:00:00 2001 From: Karl-Heinz Zimmer Date: Sun, 25 Nov 2001 15:23:21 +0000 Subject: [PATCH] [Kalle] signature verification and decoding of encrypted mails --- trunk/gpgmeplug/cryptplug.h | 8 ++++---- trunk/gpgmeplug/gpgmeplug.c | 26 ++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/trunk/gpgmeplug/cryptplug.h b/trunk/gpgmeplug/cryptplug.h index e809fca..1e4a67d 100644 --- a/trunk/gpgmeplug/cryptplug.h +++ b/trunk/gpgmeplug/cryptplug.h @@ -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 diff --git a/trunk/gpgmeplug/gpgmeplug.c b/trunk/gpgmeplug/gpgmeplug.c index 3fe308b..8be1948 100644 --- a/trunk/gpgmeplug/gpgmeplug.c +++ b/trunk/gpgmeplug/gpgmeplug.c @@ -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; } -- 2.26.2