Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to verify SHA1 message signature using Python. What am I doing wrong?

I'm attempting to verify the SHA1 signature of a message by downloading a certificate from a website and extracting its public key. There's a few bits of sample code elsewhere on SO (here and here), however I haven't yet figured out what I'm doing wrong.

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

This gives me the following assertion error:

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

However, if I use openssl from the command line along with the files generated from the above Python script, it works fine:

[jamie@test5 tmp]$ openssl dgst -sha1 -verify mypubkey.pem -signature sig msg
Verified OK

I've hit a brick wall here; any suggestions would be greatly appreciated. Thanks!

like image 901
jamieb Avatar asked Mar 03 '13 15:03

jamieb


2 Answers

Your code is work properly — https://gist.github.com/kalloc/5106808 I see something else wrong here

like image 146
YBW Avatar answered Oct 17 '22 00:10

YBW


This code is working perfectly fine at my end.

like image 1
GodMan Avatar answered Oct 17 '22 00:10

GodMan