-
Notifications
You must be signed in to change notification settings - Fork 11
/
sample.py.html
55 lines (50 loc) · 6.16 KB
/
sample.py.html
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
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite">
<title>sample.py</title>
</head>
<body bgcolor="white">
<pre><tt><b><font color="#000080">import</font></b> hashlib
<b><font color="#000080">import</font></b> binascii
<b><font color="#000080">import</font></b> rsa
<i><font color="#9A1900"># gets the hash of a file; from https://stackoverflow.com/a/44873382</font></i>
<b><font color="#0000FF">def</font></b> <b><font color="#000000">hashFile</font></b><font color="#990000">(</font>filename<font color="#990000">):</font>
h <font color="#990000">=</font> hashlib<font color="#990000">.</font><b><font color="#000000">sha256</font></b><font color="#990000">()</font>
with <b><font color="#000000">open</font></b><font color="#990000">(</font>filename<font color="#990000">,</font> <font color="#FF0000">'rb'</font><font color="#990000">,</font> buffering<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">)</font> as f<font color="#990000">:</font>
<b><font color="#0000FF">for</font></b> b <b><font color="#0000FF">in</font></b> <b><font color="#000000">iter</font></b><font color="#990000">(</font><b><font color="#0000FF">lambda</font></b> <font color="#990000">:</font> f<font color="#990000">.</font><b><font color="#000000">read</font></b><font color="#990000">(</font><font color="#993399">128</font><font color="#990000">*</font><font color="#993399">1024</font><font color="#990000">),</font> b<font color="#FF0000">''</font><font color="#990000">):</font>
h<font color="#990000">.</font><b><font color="#000000">update</font></b><font color="#990000">(</font>b<font color="#990000">)</font>
<b><font color="#0000FF">return</font></b> h<font color="#990000">.</font><b><font color="#000000">hexdigest</font></b><font color="#990000">()</font>
<i><font color="#9A1900"># given an array of bytes, return a hex reprenstation of it</font></i>
<b><font color="#0000FF">def</font></b> <b><font color="#000000">bytesToString</font></b><font color="#990000">(</font>data<font color="#990000">):</font>
<b><font color="#0000FF">return</font></b> binascii<font color="#990000">.</font><b><font color="#000000">hexlify</font></b><font color="#990000">(</font>data<font color="#990000">)</font>
<i><font color="#9A1900"># given a hex reprensetation, convert it to an array of bytes</font></i>
<b><font color="#0000FF">def</font></b> <b><font color="#000000">stringToBytes</font></b><font color="#990000">(</font>hexstr<font color="#990000">):</font>
<b><font color="#0000FF">return</font></b> binascii<font color="#990000">.</font><b><font color="#000000">a2b_hex</font></b><font color="#990000">(</font>hexstr<font color="#990000">)</font>
<i><font color="#9A1900"># Load the wallet keys from a filename</font></i>
<b><font color="#0000FF">def</font></b> <b><font color="#000000">loadWallet</font></b><font color="#990000">(</font>filename<font color="#990000">):</font>
with <b><font color="#000000">open</font></b><font color="#990000">(</font>filename<font color="#990000">,</font> mode<font color="#990000">=</font><font color="#FF0000">'rb'</font><font color="#990000">)</font> as file<font color="#990000">:</font>
keydata <font color="#990000">=</font> file<font color="#990000">.</font><b><font color="#000000">read</font></b><font color="#990000">()</font>
privkey <font color="#990000">=</font> rsa<font color="#990000">.</font>PrivateKey<font color="#990000">.</font><b><font color="#000000">load_pkcs1</font></b><font color="#990000">(</font>keydata<font color="#990000">)</font>
pubkey <font color="#990000">=</font> rsa<font color="#990000">.</font>PublicKey<font color="#990000">.</font><b><font color="#000000">load_pkcs1</font></b><font color="#990000">(</font>keydata<font color="#990000">)</font>
<b><font color="#0000FF">return</font></b> pubkey<font color="#990000">,</font> privkey
<i><font color="#9A1900"># save the wallet to a file</font></i>
<b><font color="#0000FF">def</font></b> <b><font color="#000000">saveWallet</font></b><font color="#990000">(</font>pubkey<font color="#990000">,</font> privkey<font color="#990000">,</font> filename<font color="#990000">):</font>
<i><font color="#9A1900"># Save the keys to a key format (outputs bytes)</font></i>
pubkeyBytes <font color="#990000">=</font> pubkey<font color="#990000">.</font><b><font color="#000000">save_pkcs1</font></b><font color="#990000">(</font>format<font color="#990000">=</font><font color="#FF0000">'PEM'</font><font color="#990000">)</font>
privkeyBytes <font color="#990000">=</font> privkey<font color="#990000">.</font><b><font color="#000000">save_pkcs1</font></b><font color="#990000">(</font>format<font color="#990000">=</font><font color="#FF0000">'PEM'</font><font color="#990000">)</font>
<i><font color="#9A1900"># Convert those bytes to strings to write to a file (gibberish, but a string...)</font></i>
pubkeyString <font color="#990000">=</font> pubkeyBytes<font color="#990000">.</font><b><font color="#000000">decode</font></b><font color="#990000">(</font><font color="#FF0000">'ascii'</font><font color="#990000">)</font>
privkeyString <font color="#990000">=</font> privkeyBytes<font color="#990000">.</font><b><font color="#000000">decode</font></b><font color="#990000">(</font><font color="#FF0000">'ascii'</font><font color="#990000">)</font>
<i><font color="#9A1900"># Write both keys to the wallet file</font></i>
with <b><font color="#000000">open</font></b><font color="#990000">(</font>filename<font color="#990000">,</font> <font color="#FF0000">'w'</font><font color="#990000">)</font> as file<font color="#990000">:</font>
file<font color="#990000">.</font><b><font color="#000000">write</font></b><font color="#990000">(</font>pubkeyString<font color="#990000">)</font>
file<font color="#990000">.</font><b><font color="#000000">write</font></b><font color="#990000">(</font>privkeyString<font color="#990000">)</font>
<b><font color="#0000FF">return</font></b>
</tt></pre>
</body>
</html>