M2CryptoでMessage Digest

# coding=utf-8
from binascii import hexlify
import M2Crypto
from M2Crypto.EVP import MessageDigest

import hashlib
# ファイルのsha1ハッシュ値の計算(hashlib)
sha1 = hashlib.sha1()
sha1.update(open('file.txt', 'r').read())
print sha1.hexdigest()
# => 03cfd743661f07975fa2f1220c5194cbaff48451

# ファイルのsha1ハッシュ値の計算(M2Crypto)
sha1 = MessageDigest('sha1')
sha1.update(open("file.txt").read())
print hexlify(sha1.digest())
# => 03cfd743661f07975fa2f1220c5194cbaff48451

# file.txtのハッシュ値にdsakey.pemファイルにある秘密鍵を利用して、電子署名を作成
dsa = M2Crypto.DSA.load_key('dsaprivatekey.pem', callback=lambda x: 'password')
sha1 = MessageDigest('sha1')
sha1.update(open("file.txt").read())

with open('dsasign.bin', 'wb') as f:
    f.write(dsa.sign_asn1(sha1.digest()))

# dsasign.binファイルの電子署名を検証する
sha1 = MessageDigest('sha1')
sha1.update(open("file.txt").read())
with open('dsasign.bin', 'rb') as f:
    print dsa.verify_asn1(sha1.digest(), f.read())


opensslの以下のコマンドとだいたい同じはず

** sha1ハッシュ値を計算
   openssl dgst -sha1 file.txt 

** file.txtのハッシュ値にdsaprivatekey.pemファイルにある秘密鍵を利用して、電子署名を作成
   openssl dgst -dss1 -sign dsaprivatekey.pem -out dsasign.bin file.txt

** 電子署名を検証する
   openssl dgst -dss1 -prverify dsaprivatekey.pem -signature dsasign.bin file.txt