0

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

Marc Mutz - mmutz
  • 24,485
  • 12
  • 80
  • 90
user19745
  • 3,499
  • 8
  • 25
  • 21

2 Answers2

2

apparently, you need to interpret the keyword hook:

   def Callback( x, y, z, hook=None):
   ...

works perfectly well.

pazz
  • 21
  • 2
0

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.)

llasram
  • 4,417
  • 28
  • 28
  • Unfortunately the indenting error in this example was just a copy and paste error. In my code the Callback function properly returns a string. What version of python/pyme/os are you running that you were able to get this working? – user19745 Sep 19 '10 at 17:02
  • @user19745 I'm running Debian testing with libgpgme11 1.2.0-1.2 and python-pyme 0.8.1+clean-4. – llasram Sep 20 '10 at 12:21