diff --git a/gpgmeplug/gpgmeplug.c b/gpgmeplug/gpgmeplug.c index d94348cb..1fc88016 100644 --- a/gpgmeplug/gpgmeplug.c +++ b/gpgmeplug/gpgmeplug.c @@ -962,8 +962,66 @@ bool encryptAndSignMessage( const char* cleartext, const char** ciphertext, const char* certificate, struct SignatureMetaData* sigmeta ){ return true; } -bool decryptMessage( const char* ciphertext, const - char** cleartext, const char* certificate ){ return true; } +bool decryptMessage( const char* ciphertext, + const char** cleartext, + const char* certificate ) +{ + GpgmeCtx ctx; + GpgmeData gCiphertext, gPlaintext; + size_t rCLen; + char* rCiph = 0; + bool bOk = false; + + + +/* + temporary code!! + + will be removed!! + + asking for passphrase will be handeked via gpg-agent!! +*/ + struct passphrase_cb_info_s info; + + +/* + temporary code!! + + will be removed!! + + asking for passphrase will be handeked via gpg-agent!! +*/ + if (!getenv("GPG_AGENT_INFO")) { + info.c = ctx; + gpgme_set_passphrase_cb (ctx, passphrase_cb, &info); + } + strcpy( tmpPassphrase, certificate ); + + + + gpgme_new( &ctx ); + gpgme_data_new_from_mem( &gCiphertext, ciphertext, + 1+strlen( ciphertext ), 1 ); + gpgme_data_new( &gPlaintext ); + + gpgme_op_decrypt( ctx, gCiphertext, gPlaintext ); + gpgme_data_release( gCiphertext ); + + rCiph = gpgme_data_release_and_get_mem( gPlaintext, &rCLen ); + + *cleartext = malloc( rCLen + 1 ); + if( *cleartext ) { + if( rCLen ) { + bOk = true; + strncpy((char*)*cleartext, rCiph, rCLen ); + } + ((char*)(*cleartext))[rCLen] = 0; + } + + free( rCiph ); + gpgme_release( ctx ); + return bOk; +} bool decryptAndCheckMessage( const char* ciphertext, const char** cleartext, const char* certificate,