summaryrefslogtreecommitdiff
path: root/pipermail/pycrypto/attachments/20140408/670eecf2/attachment-0001.html
blob: 669e2932e912ba6acf705a5a3df9e34bff179e83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<tt>
&lt;div&nbsp;dir=&quot;ltr&quot;&gt;&lt;div&gt;I&nbsp;am&nbsp;glad&nbsp;I&nbsp;could&nbsp;help.&lt;br&gt;&lt;br&gt;To&nbsp;be&nbsp;honest,&nbsp;I&nbsp;find&nbsp;that&nbsp;the&nbsp;DSA.verify()&nbsp;should&nbsp;be&nbsp;completely&nbsp;avoided.&nbsp;It&nbsp;is&nbsp;a&nbsp;really&nbsp;primitive&nbsp;API.&lt;br&gt;&lt;br&gt;&lt;/div&gt;The&nbsp;proposal&nbsp;I&nbsp;captured&nbsp;in&nbsp;the&nbsp;pull&nbsp;request&nbsp;below,&nbsp;accepts&nbsp;DER&nbsp;and&nbsp;pure&nbsp;big&nbsp;endian&nbsp;and&nbsp;takes&nbsp;care&nbsp;of&nbsp;hashing&nbsp;internally&nbsp;(plus&nbsp;it&nbsp;allows&nbsp;for&nbsp;Deterministic&nbsp;DSA,&nbsp;which&nbsp;is&nbsp;safer&nbsp;than&nbsp;standard&nbsp;DSA).&lt;br&gt;<br>
&lt;div&gt;&lt;div&gt;&lt;div&nbsp;class=&quot;gmail_extra&quot;&gt;&lt;br&gt;&lt;div&nbsp;class=&quot;gmail_quote&quot;&gt;2014-04-08&nbsp;13:45&nbsp;GMT+02:00&nbsp;Winston&nbsp;Weinert&nbsp;&lt;span&nbsp;dir=&quot;ltr&quot;&gt;&lt;&lt;a&nbsp;href=&quot;mailto:winston@ml1.net&quot;&nbsp;target=&quot;_blank&quot;&gt;winston@ml1.net&lt;/a&gt;&gt;&lt;/span&gt;:&lt;br&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left:1px&nbsp;solid&nbsp;rgb(204,204,204);padding-left:1ex&quot;&gt;<br>
&lt;div&nbsp;style=&quot;word-wrap:break-word&quot;&gt;&lt;div&gt;Thank&nbsp;you&nbsp;for&nbsp;your&nbsp;patience.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Unbeknownst&nbsp;to&nbsp;me&nbsp;what&nbsp;I&nbsp;wanted&nbsp;is&nbsp;indeed&nbsp;the&nbsp;sha1&nbsp;digest&nbsp;of&nbsp;the&nbsp;zipfile&rsquo;s&nbsp;sha1&nbsp;digest.&nbsp;(So&nbsp;the&nbsp;first&nbsp;suggestion&nbsp;you&nbsp;wrote&nbsp;is&nbsp;what&nbsp;I&nbsp;needed.)&nbsp;It&nbsp;sounds&nbsp;funny,&nbsp;though&nbsp;is&nbsp;is&nbsp;how&nbsp;the&nbsp;library&nbsp;(the&nbsp;Sparkle&nbsp;Update&nbsp;Framework)&nbsp;I&rsquo;m&nbsp;writing&nbsp;tools&nbsp;for&nbsp;does&nbsp;it.&lt;/div&gt;<br>
&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Is&nbsp;it&nbsp;worthwhile&nbsp;for&nbsp;me&nbsp;to&nbsp;open&nbsp;a&nbsp;pull&nbsp;request&nbsp;enabling&nbsp;DSA.verify()&nbsp;to&nbsp;accept&nbsp;a&nbsp;base64&nbsp;or&nbsp;the&nbsp;ASN.1&nbsp;DER&nbsp;bytestring&nbsp;instead&nbsp;of&nbsp;the&nbsp;(r,&nbsp;s)&nbsp;tuple?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;--&lt;/div&gt;&lt;div&gt;Winston&lt;/div&gt;&lt;div&gt;<br>
&lt;div&nbsp;class=&quot;h5&quot;&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;div&gt;On&nbsp;Apr&nbsp;7,&nbsp;2014,&nbsp;at&nbsp;6:50,&nbsp;Legrandin&nbsp;&lt;&lt;a&nbsp;href=&quot;mailto:helderijs@gmail.com&quot;&nbsp;target=&quot;_blank&quot;&gt;helderijs@gmail.com&lt;/a&gt;&gt;&nbsp;wrote:&lt;/div&gt;&lt;br&gt;&lt;blockquote&nbsp;type=&quot;cite&quot;&gt;&lt;div&nbsp;dir=&quot;ltr&quot;&gt;&lt;div&gt;<br>
The&nbsp;openssl&nbsp;code&nbsp;is&nbsp;using&nbsp;SHA-1&nbsp;twice:&nbsp;once&nbsp;to&nbsp;create&nbsp;the&nbsp;digest&nbsp;of&nbsp;the&nbsp;archive&nbsp;(dgst&nbsp;-sha1)&nbsp;and&nbsp;a&nbsp;second&nbsp;time&nbsp;when&nbsp;computing&nbsp;the&nbsp;DSA&nbsp;signature&nbsp;(dgst&nbsp;-dss1).&lt;br&gt;&lt;br&gt;&lt;/div&gt;If&nbsp;your&nbsp;goal&nbsp;is&nbsp;to&nbsp;sign&nbsp;the&nbsp;hash,&nbsp;the&nbsp;Python&nbsp;code&nbsp;should&nbsp;actually&nbsp;read:&lt;br&gt;<br>
<br>
&lt;br&gt;&gt;&gt;&nbsp;return&nbsp;pubkey.verify(SHA1.new(zipfile_digest).digest(),&nbsp;signature)&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;div&nbsp;class=&quot;gmail_extra&quot;&gt;If&nbsp;your&nbsp;goal&nbsp;is&nbsp;to&nbsp;sign&nbsp;only&nbsp;the&nbsp;archive,&nbsp;the&nbsp;openssl&nbsp;code&nbsp;should&nbsp;be:&lt;br&gt;&lt;br&gt;&gt;&gt;&nbsp;|&nbsp;openssl&nbsp;dgst&nbsp;-dss1&nbsp;-sign&nbsp;&quot;$DSA_PRIVKEY&quot;&nbsp;&nbsp;&lt;&nbsp;&quot;$RELEASE_ARCHIVE&quot;&nbsp;\&lt;br&gt;<br>
<br>
<br>
&gt;&gt;&nbsp;|&nbsp;openssl&nbsp;enc&nbsp;-base64&lt;br&gt;<br>
&lt;br&gt;&lt;div&nbsp;class=&quot;gmail_quote&quot;&gt;2014-04-07&nbsp;0:49&nbsp;GMT+02:00&nbsp;Winston&nbsp;Weinert&nbsp;&lt;span&nbsp;dir=&quot;ltr&quot;&gt;&lt;&lt;a&nbsp;href=&quot;mailto:winston@ml1.net&quot;&nbsp;target=&quot;_blank&quot;&gt;winston@ml1.net&lt;/a&gt;&gt;&lt;/span&gt;:&lt;br&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left:1px&nbsp;solid&nbsp;rgb(204,204,204);padding-left:1ex&quot;&gt;<br>
<br>
The&nbsp;signature&nbsp;is&nbsp;created&nbsp;using&nbsp;the&nbsp;openssl(1)&nbsp;command-line&nbsp;tool&nbsp;like&nbsp;this:&lt;br&gt;<br>
&lt;br&gt;<br>
openssl&nbsp;dgst&nbsp;-sha1&nbsp;-binary&nbsp;&lt;&nbsp;&quot;$RELEASE_ARCHIVE&quot;&nbsp;\&lt;br&gt;<br>
|&nbsp;openssl&nbsp;dgst&nbsp;-dss1&nbsp;-sign&nbsp;&quot;$DSA_PRIVKEY&quot;&nbsp;\&lt;br&gt;<br>
|&nbsp;openssl&nbsp;enc&nbsp;-base64&lt;br&gt;<br>
&lt;br&gt;<br>
It&nbsp;verifies&nbsp;correctly&nbsp;using&nbsp;this&nbsp;command-line:&lt;br&gt;<br>
&lt;br&gt;<br>
echo&nbsp;&quot;$SIGNATURE&rdquo;&nbsp;|&nbsp;openssl&nbsp;enc&nbsp;-base64&nbsp;-d&nbsp;&gt;&nbsp;/tmp/decoded_signature&lt;br&gt;<br>
openssl&nbsp;dgst&nbsp;-sha1&nbsp;-binary&nbsp;&lt;&nbsp;&quot;$RELEASE_ARCHIVE&quot;&nbsp;&gt;&nbsp;/tmp/release_archive_sha1&lt;br&gt;<br>
openssl&nbsp;dgst&nbsp;-dss1&nbsp;-verify&nbsp;&quot;$DSA_PUBKEY&quot;&nbsp;-signature&nbsp;/tmp/decoded_signature&nbsp;/tmp/release_archive_sha1&lt;br&gt;<br>
&lt;br&gt;<br>
After&nbsp;I&nbsp;wrote&nbsp;my&nbsp;email,&nbsp;I&nbsp;dug&nbsp;around&nbsp;for&nbsp;awhile.&nbsp;After&nbsp;a&nbsp;lot&nbsp;of&nbsp;research&nbsp;I&nbsp;learned&lt;br&gt;<br>
about&nbsp;ASN.1&nbsp;DER&rsquo;s&nbsp;usage&nbsp;in&nbsp;Dss-Sig-Value&nbsp;(&lt;a&nbsp;href=&quot;http://www.ietf.org/rfc/rfc2459.txt&quot;&nbsp;target=&quot;_blank&quot;&gt;http://www.ietf.org/rfc/rfc2459.txt&lt;/a&gt;).&nbsp;I&lt;br&gt;<br>
wrote&nbsp;this&nbsp;code&nbsp;that&nbsp;appeared&nbsp;to&nbsp;decode&nbsp;my&nbsp;Base64&nbsp;encoded&nbsp;signature&nbsp;correctly&nbsp;(I&lt;br&gt;<br>
checked&nbsp;against&nbsp;&lt;a&nbsp;href=&quot;http://lapo.it/asn1js/&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lapo.it/asn1js/&lt;/a&gt;):&lt;br&gt;<br>
&lt;br&gt;<br>
def&nbsp;decode_DSA_signature(signature):&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;raw_signature&nbsp;=&nbsp;base64.b64decode(signature)&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;der&nbsp;=&nbsp;DerSequence()&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;der.decode(raw_signature)&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(der[0],&nbsp;der[1])&lt;br&gt;<br>
&lt;br&gt;<br>
Unfortunately&nbsp;.verify()&nbsp;returns&nbsp;False&nbsp;on&nbsp;correctly&nbsp;verified&nbsp;signature&nbsp;and&nbsp;hash&lt;br&gt;<br>
pairs.&nbsp;I&nbsp;am&nbsp;using&nbsp;this&nbsp;new&nbsp;function&nbsp;like&nbsp;so:&lt;br&gt;<br>
&lt;div&gt;&lt;br&gt;<br>
&lt;br&gt;<br>
def&nbsp;validate(dsa_pubkey,&nbsp;signature,&nbsp;zipfile):&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(dsa_pubkey,&nbsp;&#39;rb&#39;)&nbsp;as&nbsp;f:&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pubkey&nbsp;=&nbsp;DSA.importKey(f.read())&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(zipfile,&nbsp;&#39;rb&#39;)&nbsp;as&nbsp;f:&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;SHA1.new()&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.update(f.read())&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipfile_digest&nbsp;=&nbsp;h.digest()&lt;br&gt;<br>
&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;signature&nbsp;=&nbsp;decode_DSA_signature(signature)&lt;br&gt;<br>
&lt;br&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pubkey.verify(zipfile_digest,&nbsp;signature)&lt;br&gt;<br>
&lt;br&gt;<br>
Maybe&nbsp;there&nbsp;is&nbsp;a&nbsp;problem&nbsp;with&nbsp;PyCrypto&nbsp;DSA&nbsp;and&nbsp;my&nbsp;environment?&lt;br&gt;<br>
&gt;&gt;&gt;&nbsp;sys.version&lt;br&gt;<br>
&#39;2.7.6&nbsp;(default,&nbsp;Feb&nbsp;&nbsp;7&nbsp;2014,&nbsp;12:51:34)&nbsp;\n[GCC&nbsp;4.2.1&nbsp;Compatible&nbsp;Apple&nbsp;LLVM&nbsp;5.0&nbsp;(clang-500.2.79)]&#39;&lt;br&gt;<br>
&lt;br&gt;<br>
For&nbsp;the&nbsp;time&nbsp;being&nbsp;I&rsquo;m&nbsp;invoking&nbsp;openssl(1)&nbsp;for&nbsp;this&nbsp;task.&lt;br&gt;<br>
&lt;br&gt;<br>
Thank&nbsp;you&nbsp;for&nbsp;the&nbsp;reply!&lt;br&gt;<br>
&lt;span&gt;&lt;font&nbsp;color=&quot;#888888&quot;&gt;Winston&nbsp;Weinert&lt;br&gt;<br>
&lt;/font&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;<br>
&lt;br&gt;<br>
On&nbsp;Apr&nbsp;6,&nbsp;2014,&nbsp;at&nbsp;4:50,&nbsp;Legrandin&nbsp;&lt;&lt;a&nbsp;href=&quot;mailto:helderijs@gmail.com&quot;&nbsp;target=&quot;_blank&quot;&gt;helderijs@gmail.com&lt;/a&gt;&gt;&nbsp;wrote:&lt;br&gt;<br>
&lt;br&gt;<br>
&gt;&nbsp;How&nbsp;was&nbsp;the&nbsp;signature&nbsp;created&nbsp;exactly?&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;The&nbsp;.verify()&nbsp;method&nbsp;of&nbsp;a&nbsp;DSA&nbsp;object&nbsp;requires&nbsp;two&nbsp;integers,&nbsp;and&nbsp;there&nbsp;are&nbsp;several&nbsp;ways&nbsp;to&nbsp;encode&nbsp;them&nbsp;into&nbsp;a&nbsp;bytestring.&nbsp;It&#39;s&nbsp;very&nbsp;hard&nbsp;to&nbsp;guess&nbsp;the&nbsp;correct&nbsp;one&nbsp;for&nbsp;your&nbsp;case.&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;FYI,&nbsp;there&nbsp;is&nbsp;a&nbsp;long&nbsp;standing&nbsp;pull&nbsp;request&nbsp;I&nbsp;created&nbsp;to&nbsp;add&nbsp;a&nbsp;saner&nbsp;DSA&nbsp;API:&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;https://github.com/dlitz/pycrypto/pull/53&quot;&nbsp;target=&quot;_blank&quot;&gt;https://github.com/dlitz/pycrypto/pull/53&lt;/a&gt;&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;The&nbsp;verification&nbsp;method&nbsp;accepts&nbsp;DER&nbsp;or&nbsp;big-endian&nbsp;encoded&nbsp;signatures.&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;2014-04-05&nbsp;21:03&nbsp;GMT+02:00&nbsp;Winston&nbsp;Weinert&nbsp;&lt;&lt;a&nbsp;href=&quot;mailto:winston@ml1.net&quot;&nbsp;target=&quot;_blank&quot;&gt;winston@ml1.net&lt;/a&gt;&gt;:&lt;br&gt;<br>
&gt;&nbsp;Hello,&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;I&nbsp;noticed&nbsp;in&nbsp;Git&nbsp;there&nbsp;is&nbsp;a&nbsp;&ldquo;verify&rdquo;&nbsp;method&nbsp;on&nbsp;Crypto.PublicKey.DSA.&nbsp;How&nbsp;do&lt;br&gt;<br>
&gt;&nbsp;I&nbsp;go&nbsp;about&nbsp;using&nbsp;this&nbsp;method?&nbsp;It&nbsp;wants&nbsp;a&nbsp;tuple,&nbsp;but&nbsp;unsure&nbsp;how&nbsp;to&nbsp;create&lt;br&gt;<br>
&gt;&nbsp;the&nbsp;appropriate&nbsp;tuple&nbsp;from&nbsp;my&nbsp;bytestring&nbsp;(which&nbsp;is&nbsp;decoded&nbsp;base64&nbsp;text).&lt;br&gt;<br>
&gt;&nbsp;This&nbsp;is&nbsp;git&nbsp;revision&nbsp;2d1aecd.&nbsp;The&nbsp;relevant&nbsp;code&nbsp;and&nbsp;error:&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;Code:&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;def&nbsp;validate(dsa_pubkey,&nbsp;signature,&nbsp;zipfile):&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(dsa_pubkey,&nbsp;&#39;rb&#39;)&nbsp;as&nbsp;f:&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pubkey&nbsp;=&nbsp;DSA.importKey(f.read())&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(zipfile,&nbsp;&#39;rb&#39;)&nbsp;as&nbsp;f:&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;SHA1.new()&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.update(f.read())&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipfile_digest&nbsp;=&nbsp;h.digest()&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decoded_signature&nbsp;=&nbsp;base64.b64decode(signature)&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pubkey.verify(zipfile_digest,&nbsp;decoded_signature)&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;Error:&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;Traceback&nbsp;(most&nbsp;recent&nbsp;call&nbsp;last):&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;sparkle_tool.py&quot;,&nbsp;line&nbsp;67,&nbsp;in&nbsp;&lt;module&gt;&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validate_files(appcast,&nbsp;dsa_pubkey)&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;sparkle_tool.py&quot;,&nbsp;line&nbsp;55,&nbsp;in&nbsp;validate_files&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;validate(dsa_pubkey,&nbsp;signature,&nbsp;local_file):&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;sparkle_tool.py&quot;,&nbsp;line&nbsp;33,&nbsp;in&nbsp;validate&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pubkey.verify(zipfile_digest,&nbsp;decoded_signature)&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py&quot;,&nbsp;line&nbsp;222,&nbsp;in&nbsp;verify&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pubkey.pubkey.verify(self,&nbsp;M,&nbsp;signature)&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/pubkey.py&quot;,&nbsp;line&nbsp;126,&nbsp;in&nbsp;verify&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self._verify(M,&nbsp;signature)&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;File&nbsp;&quot;/home/winston/jobber/venv/local/lib/python2.7/site-packages/Crypto/PublicKey/DSA.py&quot;,&nbsp;line&nbsp;240,&nbsp;in&nbsp;_verify&lt;br&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r,&nbsp;s)&nbsp;=&nbsp;sig&lt;br&gt;<br>
&gt;&nbsp;ValueError:&nbsp;too&nbsp;many&nbsp;values&nbsp;to&nbsp;unpack&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;Thanks&nbsp;a&nbsp;bunch!&lt;br&gt;<br>
&gt;&nbsp;&mdash;&lt;br&gt;<br>
&gt;&nbsp;Winston&nbsp;Weinert&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;mailto:winston@ml1.net&quot;&nbsp;target=&quot;_blank&quot;&gt;winston@ml1.net&lt;/a&gt;&lt;br&gt;<br>
&gt;&nbsp;_______________________________________________&lt;br&gt;<br>
&gt;&nbsp;pycrypto&nbsp;mailing&nbsp;list&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;mailto:pycrypto@lists.dlitz.net&quot;&nbsp;target=&quot;_blank&quot;&gt;pycrypto@lists.dlitz.net&lt;/a&gt;&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&lt;/a&gt;&lt;br&gt;<br>
&gt;&lt;br&gt;<br>
&gt;&nbsp;_______________________________________________&lt;br&gt;<br>
&gt;&nbsp;pycrypto&nbsp;mailing&nbsp;list&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;mailto:pycrypto@lists.dlitz.net&quot;&nbsp;target=&quot;_blank&quot;&gt;pycrypto@lists.dlitz.net&lt;/a&gt;&lt;br&gt;<br>
&gt;&nbsp;&lt;a&nbsp;href=&quot;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&lt;/a&gt;&lt;br&gt;<br>
&lt;br&gt;<br>
_______________________________________________&lt;br&gt;<br>
pycrypto&nbsp;mailing&nbsp;list&lt;br&gt;<br>
&lt;a&nbsp;href=&quot;mailto:pycrypto@lists.dlitz.net&quot;&nbsp;target=&quot;_blank&quot;&gt;pycrypto@lists.dlitz.net&lt;/a&gt;&lt;br&gt;<br>
&lt;a&nbsp;href=&quot;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&lt;/a&gt;&lt;br&gt;<br>
&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;<br>
_______________________________________________&lt;br&gt;pycrypto&nbsp;mailing&nbsp;list&lt;br&gt;&lt;a&nbsp;href=&quot;mailto:pycrypto@lists.dlitz.net&quot;&nbsp;target=&quot;_blank&quot;&gt;pycrypto@lists.dlitz.net&lt;/a&gt;&lt;br&gt;&lt;a&nbsp;href=&quot;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&lt;/a&gt;&lt;br&gt;<br>
&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;_______________________________________________&lt;br&gt;<br>
pycrypto&nbsp;mailing&nbsp;list&lt;br&gt;<br>
&lt;a&nbsp;href=&quot;mailto:pycrypto@lists.dlitz.net&quot;&gt;pycrypto@lists.dlitz.net&lt;/a&gt;&lt;br&gt;<br>
&lt;a&nbsp;href=&quot;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&quot;&nbsp;target=&quot;_blank&quot;&gt;http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto&lt;/a&gt;&lt;br&gt;<br>
&lt;br&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;<br>

</tt>