[pycrypto] Verify DSA bytestring signature

Winston Weinert winston at ml1.net
Sat Apr 5 12:03:25 PDT 2014


I noticed in Git there is a “verify” method on Crypto.PublicKey.DSA. How do
I go about using this method? It wants a tuple, but unsure how to create
the appropriate tuple from my bytestring (which is decoded base64 text).
This is git revision 2d1aecd. The relevant code and error:


def validate(dsa_pubkey, signature, zipfile):
    with open(dsa_pubkey, 'rb') as f:
        pubkey = DSA.importKey(f.read())
    with open(zipfile, 'rb') as f:
        h = SHA1.new()
        zipfile_digest = h.digest()
    decoded_signature = base64.b64decode(signature)

    return pubkey.verify(zipfile_digest, decoded_signature)


Traceback (most recent call last):
  File "sparkle_tool.py", line 67, in <module>
    validate_files(appcast, dsa_pubkey)
  File "sparkle_tool.py", line 55, in validate_files
    if validate(dsa_pubkey, signature, local_file):
  File "sparkle_tool.py", line 33, in validate
    return pubkey.verify(zipfile_digest, decoded_signature)
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py", line 222, in verify
    return pubkey.pubkey.verify(self, M, signature)
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/pubkey.py", line 126, in verify
    return self._verify(M, signature)
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py", line 240, in _verify
    (r, s) = sig
ValueError: too many values to unpack

Thanks a bunch!
Winston Weinert
winston at ml1.net

More information about the pycrypto mailing list