Попытка проверить подпись SHA1 с помощью Python. Что я делаю не так?

Я пытаюсь проверить подпись SHA1 сообщения, загрузив сертификат с веб-сайта и извлекая его открытый ключ. Там несколько бит кода примера в другом месте на SO (здесь и здесь), однако у меня еще нет выяснил, что я делаю неправильно.

import requests
from M2Crypto import BIO, RSA, EVP, X509

def verify_message(cert_url, msg, sig):
    cert_text = requests.get(cert_url, verify=True)
    cert = X509.load_cert_string(cert_text.content)
    pubkey = cert.get_pubkey()
    sig = sig.decode('base64')

    # Write a few files to disk for debugging purposes
    f = open("sig", "wb")
    f.write(sig)
    f.close()

    f = open("msg", "w")
    f.write(msg)
    f.close()

    f = open("mypubkey.pem", "w")
    f.write(pubkey.get_rsa().as_pem())
    f.close()

    pubkey.reset_context(md='sha1')
    pubkey.verify_init()
    pubkey.verify_update(msg)
    assert pubkey.verify_final(sig) == 1

Это дает мне следующую ошибку утверждения:

  File "/tmp/test.py", line 71, in verify_message
    assert pubkey.verify_final(sig) == 1
AssertionError

Однако, если я использую openssl из командной строки вместе с файлами, созданными из вышеуказанного Python script, он отлично работает:

[[email protected] tmp]$ openssl dgst -sha1 -verify mypubkey.pem -signature sig msg
Verified OK

Я ударил кирпичную стену здесь; Любые предложения будут ценны. Спасибо!

Ответ 2

Этот код отлично работает на моем конце.