В настоящее время я пытаюсь добавить поддержку подписи 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 сообщают, что подпись неверна.
Кто-нибудь может указать мне на мою ошибку?