summaryrefslogtreecommitdiff
path: root/pipermail/pycrypto/attachments/20110417/f6b4bb17/attachment.html
blob: 8842e2fd38b2a5e727adf5f21cc422abdb8b717f (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
<tt>
&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;Awesome!&nbsp;Thank&nbsp;you!&lt;br&gt;<br>
--&nbsp;&lt;br&gt;<br>
Sent&nbsp;from&nbsp;my&nbsp;Android&nbsp;phone&nbsp;with&nbsp;K-9&nbsp;Mail.&nbsp;Please&nbsp;excuse&nbsp;my&nbsp;brevity.&lt;br&gt;&lt;br&gt;&lt;div&nbsp;class=&quot;gmail_quote&quot;&gt;Thorsten&nbsp;Behrens&nbsp;&amp;lt;sbehrens@gmx.li&amp;gt;&nbsp;wrote:&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:&nbsp;0pt&nbsp;0pt&nbsp;0pt&nbsp;0.8ex;&nbsp;border-left:&nbsp;1px&nbsp;solid&nbsp;rgb(204,&nbsp;204,&nbsp;204);&nbsp;padding-left:&nbsp;1ex;&quot;&gt;<br>
&lt;pre&nbsp;style=&quot;white-space:&nbsp;pre-wrap;&nbsp;word-wrap:break-word;&nbsp;&quot;&gt;I&nbsp;am&nbsp;going&nbsp;back&nbsp;into&nbsp;the&nbsp;code&nbsp;to&nbsp;take&nbsp;a&nbsp;peek&nbsp;at&nbsp;your&nbsp;suggestion.<br>
<br>
<br>
On&nbsp;1/29/2011&nbsp;8:47&nbsp;PM,&nbsp;Dwayne&nbsp;C.&nbsp;Litzenberger&nbsp;wrote:<br>
&amp;gt;&nbsp;Have&nbsp;a&nbsp;look&nbsp;in&nbsp;the&nbsp;various&nbsp;&lt;a&nbsp;href=&quot;http://common.py&quot;&gt;common.py&lt;/a&gt;&nbsp;files.&nbsp;&nbsp;All&nbsp;of&nbsp;the&nbsp;hex&nbsp;test&nbsp;vectors&nbsp;are<br>
&amp;gt;&nbsp;being&nbsp;fed&nbsp;through&nbsp;either&nbsp;a2b_hex&nbsp;or&nbsp;b2a_hex.&nbsp;&nbsp;I&nbsp;think&nbsp;it&nbsp;should&nbsp;be&nbsp;possible<br>
&amp;gt;&nbsp;to&nbsp;make&nbsp;versions&nbsp;of&nbsp;b2a_hex&nbsp;and&nbsp;a2b_hex&nbsp;that&nbsp;also&nbsp;do&nbsp;bytes-&amp;gt;str&nbsp;and<br>
&amp;gt;&nbsp;str-&amp;gt;bytes&nbsp;conversions,&nbsp;respectively.<br>
&amp;gt;<br>
&amp;gt;&nbsp;The&nbsp;following&nbsp;code&nbsp;works&nbsp;in&nbsp;both&nbsp;Python&nbsp;2.1&nbsp;and&nbsp;Python&nbsp;3.2b2:<br>
&amp;gt;<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;binascii&nbsp;import&nbsp;b2a_hex&nbsp;as&nbsp;_b2a_hex,&nbsp;a2b_hex&nbsp;as&nbsp;_a2b_hex<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;codecs&nbsp;import&nbsp;ascii_decode&nbsp;as&nbsp;_ascii_decode<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;bin2hex(bts):<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;Like&nbsp;b2a_hex,&nbsp;but&nbsp;returns&nbsp;a&nbsp;str&nbsp;instead&nbsp;of&nbsp;bytes&nbsp;in&nbsp;Python&nbsp;3.x&quot;&quot;&quot;<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_ascii_decode(_b2a_hex(bts))[0]<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;hex2bin(s):<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;Like&nbsp;a2b_hex,&nbsp;but&nbsp;expects&nbsp;a&nbsp;str&nbsp;instead&nbsp;of&nbsp;bytes&nbsp;in&nbsp;Python&nbsp;3.x&quot;&quot;&quot;<br>
&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_a2b_hex(s.encode('ascii'))<br>
<br>
This&nbsp;would&nbsp;actually&nbsp;make&nbsp;things&nbsp;worse.&nbsp;That&nbsp;it&nbsp;works&nbsp;at&nbsp;all&nbsp;is&nbsp;to&nbsp;be&nbsp;&nbsp;considered&nbsp;a&nbsp;bug&nbsp;-&nbsp;there's&nbsp;a&nbsp;TODO&nbsp;I&nbsp;have&nbsp;not&nbsp;followed&nbsp;up&nbsp;on&nbsp;yet,&nbsp;and&nbsp;&nbsp;that&nbsp;TODO&nbsp;is&nbsp;to&nbsp;add&nbsp;type-checking&nbsp;to&nbsp;all&nbsp;functions&nbsp;so&nbsp;that&nbsp;an&nbsp;error&nbsp;is&nbsp;&nbsp;returned&nbsp;if&nbsp;a&nbsp;parameter&nbsp;is&nbsp;not&nbsp;&quot;an&nbsp;object&nbsp;interpretable&nbsp;as&nbsp;a&nbsp;buffer&nbsp;of&nbsp;&nbsp;bytes&quot;.&nbsp;That&nbsp;is,&nbsp;if&nbsp;encode()&nbsp;is&nbsp;called&nbsp;with&nbsp;a&nbsp;unicode&nbsp;(str)&nbsp;object,&nbsp;that&nbsp;&nbsp;should&nbsp;raise&nbsp;an&nbsp;error.<br>
<br>
The&nbsp;reason&nbsp;I&nbsp;believe&nbsp;that&nbsp;pycrypto&nbsp;should&nbsp;check&nbsp;type&nbsp;is&nbsp;that&nbsp;the&nbsp;Python&nbsp;<br>
3.x&nbsp;stdlib&nbsp;behaves&nbsp;that&nbsp;way:<br>
<br>
&nbsp;&amp;gt;&amp;gt;&amp;gt;&nbsp;from&nbsp;hashlib&nbsp;import&nbsp;sha1<br>
&nbsp;&amp;gt;&amp;gt;&amp;gt;&nbsp;h&nbsp;=&nbsp;sha1()<br>
&nbsp;&amp;gt;&amp;gt;&amp;gt;&nbsp;h.update(&quot;lorem&quot;)<br>
Traceback&nbsp;(most&nbsp;recent&nbsp;call&nbsp;last):<br>
&nbsp;&nbsp;&nbsp;File&nbsp;&quot;&amp;lt;stdin&amp;gt;&quot;,&nbsp;line&nbsp;1,&nbsp;in&nbsp;&amp;lt;module&amp;gt;<br>
TypeError:&nbsp;Unicode-objects&nbsp;must&nbsp;be&nbsp;encoded&nbsp;before&nbsp;hashing<br>
&nbsp;&amp;gt;&amp;gt;&amp;gt;&nbsp;h.update(b&quot;lorem&quot;)<br>
&nbsp;&amp;gt;&amp;gt;&amp;gt;&nbsp;print&nbsp;(h.hexdigest())<br>
b58e92fff5246645f772bfe7a60272f356c0151a<br>
<br>
For&nbsp;consistency,&nbsp;I&nbsp;have&nbsp;both&nbsp;Crypto.Hash&nbsp;and&nbsp;Crypto.Cipher&nbsp;behaving&nbsp;this&nbsp;&nbsp;way.&nbsp;The&nbsp;changes&nbsp;are&nbsp;in&nbsp;the&nbsp;doc,&nbsp;but&nbsp;in&nbsp;a&nbsp;nutshell:<br>
<br>
Crypto.Hash<br>
<br>
Python&nbsp;3.x:&nbsp;digest()&nbsp;returns&nbsp;a&nbsp;bytes&nbsp;object<br>
Python&nbsp;3.x:&nbsp;hexdigest()&nbsp;returns&nbsp;a&nbsp;bytes&nbsp;object<br>
Python&nbsp;3.x:&nbsp;The&nbsp;passed&nbsp;argument&nbsp;to&nbsp;update()&nbsp;must&nbsp;be&nbsp;an&nbsp;object<br>
interpretable&nbsp;as&nbsp;a&nbsp;buffer&nbsp;of&nbsp;bytes<br>
<br>
Crypto.Cipher<br>
&nbsp;new()<br>
Python&nbsp;3.x:&nbsp;```mode``&nbsp;is&nbsp;a&nbsp;string&nbsp;object;&nbsp;```key```&nbsp;and&nbsp;```IV```&nbsp;must&nbsp;be&nbsp;objects&nbsp;interpretable&nbsp;as&nbsp;a&nbsp;buffer&nbsp;of&nbsp;bytes.<br>
&nbsp;cipher&nbsp;object<br>
Python&nbsp;3.x:&nbsp;```IV```&nbsp;is&nbsp;a&nbsp;bytes&nbsp;object.<br>
&nbsp;decrypt()<br>
Python&nbsp;3.x:&nbsp;```string```&nbsp;must&nbsp;be&nbsp;an&nbsp;object&nbsp;interpretable&nbsp;as&nbsp;a&nbsp;buffer&nbsp;of&nbsp;&nbsp;bytes.<br>
decrypt()&nbsp;will&nbsp;return&nbsp;a&nbsp;bytes&nbsp;object.<br>
&nbsp;encrypt()<br>
Python&nbsp;3.x:&nbsp;```string```&nbsp;must&nbsp;be&nbsp;an&nbsp;object&nbsp;interpretable&nbsp;as&nbsp;a&nbsp;buffer&nbsp;of&nbsp;&nbsp;bytes.<br>
encrypt()&nbsp;will&nbsp;return&nbsp;a&nbsp;bytes&nbsp;object.<br>
<br>
<br>
If&nbsp;these&nbsp;new&nbsp;conventions&nbsp;will&nbsp;cause&nbsp;an&nbsp;issue,&nbsp;let's&nbsp;discuss&nbsp;that&nbsp;now,&nbsp;&nbsp;before&nbsp;I&nbsp;add&nbsp;the&nbsp;type-checking.<br>
<br>
<br>
All&nbsp;that&nbsp;having&nbsp;been&nbsp;said,&nbsp;I&nbsp;still&nbsp;think&nbsp;it&nbsp;should&nbsp;be&nbsp;possible&nbsp;to&nbsp;have&nbsp;&nbsp;the&nbsp;vectors&nbsp;be&nbsp;Unicode&nbsp;literals&nbsp;and&nbsp;to&nbsp;convert&nbsp;them&nbsp;to&nbsp;a&nbsp;bytes&nbsp;object&nbsp;&nbsp;when&nbsp;reading&nbsp;them&nbsp;in.&nbsp;It&nbsp;just&nbsp;will&nbsp;need&nbsp;to&nbsp;be&nbsp;done&nbsp;in&nbsp;a&nbsp;different&nbsp;part&nbsp;&nbsp;of&nbsp;the&nbsp;code.<br>
<br>
Thorsten<br>
<br>
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;
</tt>