PGP -подписание составных электронных -писем с помощью Python

В настоящее время я пытаюсь добавить поддержку подписи PGP в мой небольшой e -скрипт отправки почты (, который использует Python 3.x и python -gnupg модуль ).

Код, который подписывает сообщение::

gpg = gnupg.GPG()
basetext = basemsg.as_string().replace('\n', '\r\n')
signature = str(gpg.sign(basetext, detach=True))
if signature:
    signmsg = messageFromSignature(signature)
    msg = MIMEMultipart(_subtype="signed", micalg="pgp-sha1",
    protocol="application/pgp-signature")
    msg.attach(basemsg)
    msg.attach(signmsg)
else:
    print('Warning: failed to sign the message!')

(Здесь basemsgотносится к типу email.message.Message.)

А функция messageFromSignature— это:

def messageFromSignature(signature):
    message = Message()
    message['Content-Type'] = 'application/pgp-signature; name="signature.asc"'
    message['Content-Description'] = 'OpenPGP digital signature'
    message.set_payload(signature)
    return message

Затем я добавляю все необходимые заголовки в сообщение(msg)и отправляю его.

Это хорошо работает для не--составных сообщений, но не работает, когда basemsgявляется составным(multipart/alternativeилиmultipart/mixed).

Ручная проверка подписи по соответствующему фрагменту текста работает, но Evolution и Mutt сообщают, что подпись неверна.

Кто-нибудь может указать мне на мою ошибку?

9
задан Dmitry Shachnev 6 November 2013 в 18:46
поделиться