Skip to content

Commit

Permalink
refactor ♻️ dropping AES ECB by AES CBC for private key encryption
Browse files Browse the repository at this point in the history
Signed-off-by: Marco Aurélio da Silva <marcoonroad@gmail.com>
  • Loading branch information
marcoonroad committed Mar 17, 2019
1 parent 9982fbd commit 8cb8cb7
Show file tree
Hide file tree
Showing 17 changed files with 176 additions and 145 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -24,7 +24,7 @@ For further information, see:
This library uses the Blake2B hash algorithm, but further / additional hashes are
planned as well. Currently, the following things are implemented now:

- [x] Importing/exporting encrypted private key (by now using AES ECB).
- [x] Importing/exporting encrypted private key (by now using AES CBC).
- [x] Public Key serialization+validation (to share and receive such key for verification).
- [x] Built-in one-time invariant protected by a blacklist of used private keys.
- [x] Tests covering the things here and there.
Expand Down
2 changes: 1 addition & 1 deletion docs/coverage/index.html
Expand Up @@ -119,6 +119,6 @@ <h2>100.00%</h2>
</a>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
</body>
</html>
2 changes: 1 addition & 1 deletion docs/coverage/lib/blacklist.ml.html
Expand Up @@ -54,7 +54,7 @@ <h2>100.00%</h2>
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
55 changes: 44 additions & 11 deletions docs/coverage/lib/encryption.ml.html
Expand Up @@ -25,16 +25,27 @@ <h2>100.00%</h2>
<a id="L5"></a><span > </span>
<a id="L6"></a><span class="visited"> </span>
<a id="L7"></a><span class="visited"> </span>
<a id="L8"></a><span class="visited"> </span>
<a id="L9"></a><span > </span>
<a id="L8"></a><span > </span>
<a id="L9"></a><span class="visited"> </span>
<a id="L10"></a><span > </span>
<a id="L11"></a><span > </span>
<a id="L12"></a><span class="visited"> </span>
<a id="L12"></a><span > </span>
<a id="L13"></a><span class="visited"> </span>
<a id="L14"></a><span class="visited"> </span>
<a id="L15"></a><span > </span>
<a id="L16"></a><span > </span>
<a id="L15"></a><span class="visited"> </span>
<a id="L16"></a><span class="visited"> </span>
<a id="L17"></a><span class="visited"> </span>
<a id="L18"></a><span > </span>
<a id="L19"></a><span > </span>
<a id="L20"></a><span > </span>
<a id="L21"></a><span class="visited"> </span>
<a id="L22"></a><span class="visited"> </span>
<a id="L23"></a><span class="visited"> </span>
<a id="L24"></a><span class="visited"> </span>
<a id="L25"></a><span class="visited"> </span>
<a id="L26"></a><span > </span>
<a id="L27"></a><span > </span>
<a id="L28"></a><span class="visited"> </span>
</pre>
</div>
<div id="text-layer">
Expand All @@ -56,29 +67,51 @@ <h2>100.00%</h2>
<a href="#L15">15</a>
<a href="#L16">16</a>
<a href="#L17">17</a>
<a href="#L18">18</a>
<a href="#L19">19</a>
<a href="#L20">20</a>
<a href="#L21">21</a>
<a href="#L22">22</a>
<a href="#L23">23</a>
<a href="#L24">24</a>
<a href="#L25">25</a>
<a href="#L26">26</a>
<a href="#L27">27</a>
<a href="#L28">28</a>
</pre>
<pre id="code">
open Nocrypto.Cipher_block.AES.ECB
open Nocrypto.Cipher_block.AES.CBC
module Option = Core.Option
module Base64 = Nocrypto.Base64

let digest cstruct =
<span data-count="5">l</span>et digest = <span data-count="5">N</span>ocrypto.Hash.SHA256.digest cstruct in
<span data-count="5">l</span>et left, right = <span data-count="5">C</span>struct.split digest 16 in
(* split 32 bytes into a pair of 16 *)
<span data-count="5">N</span>ocrypto.Uncommon.Cs.xor left right


let encrypt msg ~pass =
<span data-count="2">l</span>et key = <span data-count="2">o</span>f_secret (Hash.mine pass ~difficulty:5) in
<span data-count="2">l</span>et result = <span data-count="2">e</span>ncrypt ~key (Utils.pad ~basis:16 msg) in
<span data-count="2">l</span>et proof = <span data-count="2">H</span>ash.mine pass ~difficulty:5 in
<span data-count="2">l</span>et key = <span data-count="2">o</span>f_secret proof in
<span data-count="2">l</span>et iv = <span data-count="2">d</span>igest proof in
<span data-count="2">l</span>et result = <span data-count="2">e</span>ncrypt ~iv ~key (Utils.pad ~basis:16 msg) in
<span data-count="2">r</span>esult |&gt; <span data-count="2">B</span>ase64.encode |&gt; <span data-count="2">C</span>struct.to_string


let decrypt cipher ~pass =
<span data-count="3">l</span>et key = <span data-count="3">o</span>f_secret (Hash.mine pass ~difficulty:5) in
<span data-count="3">l</span>et proof = <span data-count="3">H</span>ash.mine pass ~difficulty:5 in
<span data-count="3">l</span>et key = <span data-count="3">o</span>f_secret proof in
<span data-count="3">l</span>et iv = <span data-count="3">d</span>igest proof in
<span data-count="3">l</span>et result = <span data-count="3">c</span>ipher |&gt; <span data-count="3">C</span>struct.of_string |&gt; <span data-count="3">B</span>ase64.decode in
<span data-count="3">l</span>et open Option in
result
&gt;&gt;= fun msg -&gt;
<span data-count="3">m</span>sg |&gt; <span data-count="3">d</span>ecrypt ~key |&gt; <span data-count="3">C</span>struct.to_string |&gt; <span data-count="3">U</span>tils.unpad |&gt; <span data-count="3">s</span>ome
<span data-count="3">m</span>sg |&gt; <span data-count="3">d</span>ecrypt ~iv ~key |&gt; <span data-count="3">C</span>struct.to_string |&gt; <span data-count="3">U</span>tils.unpad |&gt; <span data-count="3">s</span>ome
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion docs/coverage/lib/hash.ml.html
Expand Up @@ -117,7 +117,7 @@ <h2>100.00%</h2>
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion docs/coverage/lib/hieroglyphs.ml.html
Expand Up @@ -30,7 +30,7 @@ <h2>100.00%</h2>
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
45 changes: 18 additions & 27 deletions docs/coverage/lib/keys.ml.html
Expand Up @@ -33,30 +33,27 @@ <h2>100.00%</h2>
<a id="L13"></a><span > </span>
<a id="L14"></a><span class="visited"> </span>
<a id="L15"></a><span > </span>
<a id="L16"></a><span > </span>
<a id="L17"></a><span class="visited"> </span>
<a id="L16"></a><span class="visited"> </span>
<a id="L17"></a><span > </span>
<a id="L18"></a><span > </span>
<a id="L19"></a><span > </span>
<a id="L20"></a><span class="visited"> </span>
<a id="L19"></a><span class="visited"> </span>
<a id="L20"></a><span > </span>
<a id="L21"></a><span > </span>
<a id="L22"></a><span > </span>
<a id="L23"></a><span > </span>
<a id="L24"></a><span class="visited"> </span>
<a id="L23"></a><span class="visited"> </span>
<a id="L24"></a><span > </span>
<a id="L25"></a><span > </span>
<a id="L26"></a><span > </span>
<a id="L27"></a><span > </span>
<a id="L28"></a><span class="visited"> </span>
<a id="L29"></a><span > </span>
<a id="L30"></a><span class="visited"> </span>
<a id="L31"></a><span > </span>
<a id="L32"></a><span class="visited"> </span>
<a id="L33"></a><span > </span>
<a id="L34"></a><span class="visited"> </span>
<a id="L27"></a><span class="visited"> </span>
<a id="L28"></a><span > </span>
<a id="L29"></a><span class="visited"> </span>
<a id="L30"></a><span > </span>
<a id="L31"></a><span class="visited"> </span>
<a id="L32"></a><span > </span>
<a id="L33"></a><span class="visited"> </span>
<a id="L34"></a><span > </span>
<a id="L35"></a><span > </span>
<a id="L36"></a><span > </span>
<a id="L37"></a><span class="visited"> </span>
<a id="L38"></a><span class="visited"> </span>
<a id="L39"></a><span class="visited"> </span>
<a id="L36"></a><span class="visited"> </span>
</pre>
</div>
<div id="text-layer">
Expand Down Expand Up @@ -97,9 +94,6 @@ <h2>100.00%</h2>
<a href="#L34">34</a>
<a href="#L35">35</a>
<a href="#L36">36</a>
<a href="#L37">37</a>
<a href="#L38">38</a>
<a href="#L39">39</a>
</pre>
<pre id="code">
module List = Core.List
Expand All @@ -114,9 +108,8 @@ <h2>100.00%</h2>
<span data-count="25">l</span>et pieces = <span data-count="25">U</span>tils.generate_pieces ~digest:Hash.digest_bytes priv in
<span data-count="25">L</span>ist.map pieces ~f:Hash.digest_bytes

let derive priv =
<span data-count="25">U</span>tils.bytes_of_string @@ Serialization.digest @@ genpub priv

let derive priv = <span data-count="25">U</span>tils.bytes_of_string @@ Serialization.digest @@ genpub priv

let export ~priv ~pass = <span data-count="2">E</span>ncryption.encrypt ~pass @@ Utils.bytes_to_string priv

Expand All @@ -138,13 +131,11 @@ <h2>100.00%</h2>
let show = <span data-count="1">U</span>tils.bytes_to_string

let load dump =
<span data-count="2">i</span>f Utils.is_hash dump then
<span data-count="1">S</span>ome (Utils.bytes_of_string dump)
else <span data-count="1">N</span>one
<span data-count="2">i</span>f Utils.is_hash dump then <span data-count="1">S</span>ome (Utils.bytes_of_string dump) else <span data-count="1">N</span>one
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
7 changes: 5 additions & 2 deletions docs/coverage/lib/main.ml.html
Expand Up @@ -72,9 +72,10 @@ <h2>100.00%</h2>
<a id="L52"></a><span class="visited"> </span>
<a id="L53"></a><span > </span>
<a id="L54"></a><span > </span>
<a id="L55"></a><span class="visited"> </span>
<a id="L55"></a><span > </span>
<a id="L56"></a><span class="visited"> </span>
<a id="L57"></a><span class="visited"> </span>
<a id="L58"></a><span class="visited"> </span>
</pre>
</div>
<div id="text-layer">
Expand Down Expand Up @@ -136,6 +137,7 @@ <h2>100.00%</h2>
<a href="#L55">55</a>
<a href="#L56">56</a>
<a href="#L57">57</a>
<a href="#L58">58</a>
</pre>
<pre id="code">
module Option = Core.Option
Expand Down Expand Up @@ -191,14 +193,15 @@ <h2>100.00%</h2>
<span data-count="9">l</span>et step = <span data-count="9">O</span>ption.value_map option ~default:generate ~f:const in
<span data-count="9">s</span>tep ()


let pair () =
<span data-count="4">l</span>et priv = <span data-count="4">g</span>enerate () in
<span data-count="4">l</span>et pub = <span data-count="4">d</span>erive priv in
<span data-count="4">(</span>priv, pub)
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion docs/coverage/lib/random.ml.html
Expand Up @@ -69,7 +69,7 @@ <h2>100.00%</h2>
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
7 changes: 5 additions & 2 deletions docs/coverage/lib/serialization.ml.html
Expand Up @@ -34,7 +34,8 @@ <h2>100.00%</h2>
<a id="L14"></a><span > </span>
<a id="L15"></a><span class="visited"> </span>
<a id="L16"></a><span > </span>
<a id="L17"></a><span class="visited"> </span>
<a id="L17"></a><span > </span>
<a id="L18"></a><span class="visited"> </span>
</pre>
</div>
<div id="text-layer">
Expand All @@ -56,6 +57,7 @@ <h2>100.00%</h2>
<a href="#L15">15</a>
<a href="#L16">16</a>
<a href="#L17">17</a>
<a href="#L18">18</a>
</pre>
<pre id="code">
module List = Core.List
Expand All @@ -74,11 +76,12 @@ <h2>100.00%</h2>
Utils.validate_key list
&gt;&gt;= fun list -&gt; <span data-count="6">s</span>ome @@ List.map ~f:Utils.bytes_of_string list


let digest pub = <span data-count="29">p</span>ub |&gt; <span data-count="29">s</span>how |&gt; <span data-count="29">H</span>ash.digest
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
33 changes: 18 additions & 15 deletions docs/coverage/lib/signing.ml.html
Expand Up @@ -20,11 +20,11 @@ <h2>100.00%</h2>
<pre>
<a id="L1"></a><span > </span>
<a id="L2"></a><span > </span>
<a id="L3"></a><span > </span>
<a id="L4"></a><span class="visited"> </span>
<a id="L3"></a><span class="visited"> </span>
<a id="L4"></a><span > </span>
<a id="L5"></a><span > </span>
<a id="L6"></a><span > </span>
<a id="L7"></a><span > </span>
<a id="L7"></a><span class="visited"> </span>
<a id="L8"></a><span class="visited"> </span>
<a id="L9"></a><span class="visited"> </span>
<a id="L10"></a><span class="visited"> </span>
Expand All @@ -34,8 +34,9 @@ <h2>100.00%</h2>
<a id="L14"></a><span class="visited"> </span>
<a id="L15"></a><span class="visited"> </span>
<a id="L16"></a><span class="visited"> </span>
<a id="L17"></a><span > </span>
<a id="L18"></a><span class="visited"> </span>
<a id="L17"></a><span class="visited"> </span>
<a id="L18"></a><span > </span>
<a id="L19"></a><span class="visited"> </span>
</pre>
</div>
<div id="text-layer">
Expand All @@ -58,30 +59,32 @@ <h2>100.00%</h2>
<a href="#L16">16</a>
<a href="#L17">17</a>
<a href="#L18">18</a>
<a href="#L19">19</a>
</pre>
<pre id="code">
module List = Core.List

let digest_to_string bytes =
<span data-count="8192">U</span>tils.bytes_to_string @@ Hash.digest_bytes bytes
let digest_to_string bytes = <span data-count="8192">U</span>tils.bytes_to_string @@ Hash.digest_bytes bytes

let sign ~priv ~msg =
(* yeah, I know that it's really bad smell code *)
<span data-count="4">l</span>et priv' = <span data-count="4">U</span>tils.generate_pieces ~digest:Hash.digest_bytes priv in
<span data-count="4">l</span>et ver_key = <span data-count="4">L</span>ist.map priv' ~f:digest_to_string
|&gt; <span data-count="4">L</span>ist.reduce_exn ~f:Utils.concat_hashes
<span data-count="4">l</span>et ver_key =
<span data-count="4">L</span>ist.map priv' ~f:digest_to_string
|&gt; <span data-count="4">L</span>ist.reduce_exn ~f:Utils.concat_hashes
in
<span data-count="4">l</span>et ver_text = <span data-count="4">m</span>sg
|&gt; <span data-count="4">U</span>tils.indexed_keys
|&gt; <span data-count="4">U</span>tils.replace_index ~matrix:priv'
|&gt; <span data-count="4">L</span>ist.map ~f:Utils.bytes_to_string
|&gt; <span data-count="4">L</span>ist.reduce_exn ~f:Utils.concat_hashes
<span data-count="4">l</span>et ver_text =
<span data-count="4">m</span>sg
|&gt; <span data-count="4">U</span>tils.indexed_keys
|&gt; <span data-count="4">U</span>tils.replace_index ~matrix:priv'
|&gt; <span data-count="4">L</span>ist.map ~f:Utils.bytes_to_string
|&gt; <span data-count="4">L</span>ist.reduce_exn ~f:Utils.concat_hashes
in
<span data-count="4">v</span>er_text ^ "\n" ^ ver_key
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion docs/coverage/lib/store.ml.html
Expand Up @@ -204,7 +204,7 @@ <h2>100.00%</h2>
</pre>
</div>
</div>
<div id="footer">Generated on 2019-03-10 20:28:32 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<div id="footer">Generated on 2019-03-16 22:36:24 by <a href="https://github.com/aantron/bisect_ppx">Bisect_ppx</a> 1.3.4</div>
<script src="../coverage.js"></script>
</body>
</html>

0 comments on commit 8cb8cb7

Please sign in to comment.