現在、私の小さな電子メール送信スクリプト(Python 3.x とpython-gnupgモジュールを使用)に PGP 署名サポートを追加しようとしています。
メッセージに署名するコードは次のとおりです。
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 は署名が悪いと報告しています。
誰かが私の間違いを指摘してもらえますか?