<div dir="ltr"><div><div><div>How was the signature created exactly?<br><br></div>The .verify() method of a DSA object requires two integers, and there are several ways to encode them into a bytestring. It's very hard to guess the correct one for your case.<br>
<br></div>FYI, there is a long standing pull request I created to add a saner DSA API:<br><br><a href="https://github.com/dlitz/pycrypto/pull/53">https://github.com/dlitz/pycrypto/pull/53</a><br><br></div>The verification method accepts DER or big-endian encoded signatures.<br>
<div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-05 21:03 GMT+02:00 Winston Weinert <span dir="ltr"><<a href="mailto:winston@ml1.net" target="_blank">winston@ml1.net</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I noticed in Git there is a “verify” method on Crypto.PublicKey.DSA. How do<br>
I go about using this method? It wants a tuple, but unsure how to create<br>
the appropriate tuple from my bytestring (which is decoded base64 text).<br>
This is git revision 2d1aecd. The relevant code and error:<br>
<br>
Code:<br>
<br>
def validate(dsa_pubkey, signature, zipfile):<br>
    with open(dsa_pubkey, 'rb') as f:<br>
        pubkey = DSA.importKey(f.read())<br>
    with open(zipfile, 'rb') as f:<br>
        h = SHA1.new()<br>
        h.update(f.read())<br>
        zipfile_digest = h.digest()<br>
    decoded_signature = base64.b64decode(signature)<br>
<br>
    return pubkey.verify(zipfile_digest, decoded_signature)<br>
<br>
Error:<br>
<br>
Traceback (most recent call last):<br>
  File "sparkle_tool.py", line 67, in <module><br>
    validate_files(appcast, dsa_pubkey)<br>
  File "sparkle_tool.py", line 55, in validate_files<br>
    if validate(dsa_pubkey, signature, local_file):<br>
  File "sparkle_tool.py", line 33, in validate<br>
    return pubkey.verify(zipfile_digest, decoded_signature)<br>
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py", line 222, in verify<br>
    return pubkey.pubkey.verify(self, M, signature)<br>
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/pubkey.py", line 126, in verify<br>
    return self._verify(M, signature)<br>
  File "/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py", line 240, in _verify<br>
    (r, s) = sig<br>
ValueError: too many values to unpack<br>
<br>
Thanks a bunch!<br>
—<br>
<span class="HOEnZb"><font color="#888888">Winston Weinert<br>
<a href="mailto:winston@ml1.net">winston@ml1.net</a><br>
_______________________________________________<br>
pycrypto mailing list<br>
<a href="mailto:pycrypto@lists.dlitz.net">pycrypto@lists.dlitz.net</a><br>
<a href="http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto" target="_blank">http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto</a><br>
</font></span></blockquote></div><br></div>