Проблема расшифровки PGP в Python с Pyme без взаимодействия с пользователем - PullRequest
0 голосов
/ 07 сентября 2010

Я пытаюсь расшифровать сообщения, используя pyme (оболочку Python из gpgme).Это работает нормально, если я ввожу пароль, когда он запрашивает, но я не могу заставить обратный вызов парольной фразы работать.Вот код

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

Когда я запускаю это и не предоставляю пароль в интерактивном режиме, программа затем пытается распечатать обратный вызов «в обратном вызове парольной фразы», ​​но затем завершается ошибкой:

pyme.errors.GPGMEError: Invocation of gpgme_op_decrypt: Unspecified source: General error (0,1)

Прежде всего, почему обратный вызов парольной фразы не работает?А во-вторых, как я могу запретить программе запрашивать у пользователя пароль перед вызовом обратного вызова парольной фразы?

Это работает в Ubuntu 10.04

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

очевидно, вам нужно интерпретировать ключевое слово hook:

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

отлично работает.

0 голосов
/ 19 сентября 2010

Я могу воспроизвести ошибку, о которой вы сообщаете, вернув None из обратного вызова парольной фразы. Функции Python возвращают None по умолчанию, если они достигают конца выполнения функции, не достигая оператора return. Возможно ли, что вы случайно вернули None из вашего обратного вызова, возможно, из-за неправильного указания кода, завершающего вашу функцию раньше? (Идея неверного отступа - это всего лишь предположение, основанное на незаконном отступе в вашем примере.)

...