I am trying to decrypt messages using pyme (a python wrapper from gpgme). It works fine if I type in the password when it prompts but I cannot get the passphrase callback to work. Here is the code
import pyme.core
def Callback( x, y, z ):
print 'in passphrase callback'
return 'passphrase'
plain = pyme.core.Data()
cipher = pyme.core.Data(sys.stdin.read())
c = pyme.core.Context()
c.set_armor(1)
c.set_passphrase_cb(Callback)
c.op_decrypt( cipher, plain )
plain.seek(0,0)
print plain.read()
When I run this and don't provide the password interactively the program then tries the Callback printing 'in passphrase callback' but then fails with error:
pyme.errors.GPGMEError: Invocation of gpgme_op_decrypt: Unspecified source: General error (0,1)
First and foremost, why does the passphrase callback not work? And secondly, how can I prevent the program from prompting the user for a password before calling the passphrase callback?
This is running on Ubuntu 10.04
I'm able to reproduce the error you're reporting by returning
Nonefrom the passphrase callback. Python functions returnNoneby default if they reach the end of executing a function without reaching areturnstatement. Is it possible that you are accidentally returningNonefrom your callback, perhaps due to misindentation of your code ending your function early? (The misindentation idea is just a guess based on the illegal indentation in your example.)