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
apparently, you need to interpret the keyword hook
:
def Callback( x, y, z, hook=None):
...
works perfectly well.
I'm able to reproduce the error you're reporting by returning None
from the passphrase callback. Python functions return None
by default if they reach the end of executing a function without reaching a return
statement. Is it possible that you are accidentally returning None
from 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.)
来源:https://stackoverflow.com/questions/3660150/problem-decrypting-pgp-in-python-with-pyme-without-user-interaction