akero 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitattributes +3 -0
- data/.gitignore +0 -2
- data/.rubocop.yml +43 -0
- data/.travis.yml +3 -7
- data/Gemfile +1 -0
- data/Guardfile +4 -3
- data/Makefile +26 -0
- data/README.md +28 -10
- data/Rakefile +8 -17
- data/akero.gemspec +17 -10
- data/bin/akero +6 -0
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +367 -0
- data/coverage/.resultset.json.lock +0 -0
- data/coverage/assets/0.10.0/application.css +799 -0
- data/coverage/assets/0.10.0/application.js +1707 -0
- data/coverage/assets/0.10.0/colorbox/border.png +0 -0
- data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.0/favicon_green.png +0 -0
- data/coverage/assets/0.10.0/favicon_red.png +0 -0
- data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.0/loading.gif +0 -0
- data/coverage/assets/0.10.0/magnify.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.7.1/application.css +1110 -0
- data/coverage/assets/0.7.1/application.js +626 -0
- data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
- data/coverage/assets/0.7.1/favicon_green.png +0 -0
- data/coverage/assets/0.7.1/favicon_red.png +0 -0
- data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
- data/coverage/assets/0.7.1/loading.gif +0 -0
- data/coverage/assets/0.7.1/magnify.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +2248 -0
- data/doc/Akero/Message.html +475 -0
- data/doc/Akero.html +1148 -0
- data/doc/_index.html +125 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +338 -0
- data/doc/file.README.html +186 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +186 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +148 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/akero/benchmark.rb +21 -20
- data/lib/akero/cli.rb +74 -0
- data/lib/akero/version.rb +2 -1
- data/lib/akero.rb +92 -90
- data/spec/akero_spec.rb +66 -65
- data/spec/spec_helper.rb +1 -0
- metadata +164 -52
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
|
+
|
|
7
|
+
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
|
|
8
|
+
|
|
9
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
|
14
|
+
|
|
15
|
+
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<base id="base_target" target="_parent" />
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<script type="text/javascript" charset="utf-8">
|
|
22
|
+
if (window.top.frames.main) {
|
|
23
|
+
document.getElementById('base_target').target = 'main';
|
|
24
|
+
document.body.className = 'frames';
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
<div id="content">
|
|
28
|
+
<h1 id="full_list_header">Method List</h1>
|
|
29
|
+
<div id="nav">
|
|
30
|
+
|
|
31
|
+
<span><a target="_self" href="class_list.html">
|
|
32
|
+
Classes
|
|
33
|
+
</a></span>
|
|
34
|
+
|
|
35
|
+
<span><a target="_self" href="method_list.html">
|
|
36
|
+
Methods
|
|
37
|
+
</a></span>
|
|
38
|
+
|
|
39
|
+
<span><a target="_self" href="file_list.html">
|
|
40
|
+
Files
|
|
41
|
+
</a></span>
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
<div id="search">Search: <input type="text" /></div>
|
|
45
|
+
|
|
46
|
+
<ul id="full_list" class="method">
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
<li class="r1 ">
|
|
50
|
+
<span class='object_link'><a href="Akero/Message.html#body-instance_method" title="Akero::Message#body (method)">#body</a></span>
|
|
51
|
+
|
|
52
|
+
<small>Akero::Message</small>
|
|
53
|
+
|
|
54
|
+
</li>
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
<li class="r2 ">
|
|
58
|
+
<span class='object_link'><a href="Akero.html#encrypt-instance_method" title="Akero#encrypt (method)">#encrypt</a></span>
|
|
59
|
+
|
|
60
|
+
<small>Akero</small>
|
|
61
|
+
|
|
62
|
+
</li>
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
<li class="r1 ">
|
|
66
|
+
<span class='object_link'><a href="Akero/Message.html#from-instance_method" title="Akero::Message#from (method)">#from</a></span>
|
|
67
|
+
|
|
68
|
+
<small>Akero::Message</small>
|
|
69
|
+
|
|
70
|
+
</li>
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
<li class="r2 ">
|
|
74
|
+
<span class='object_link'><a href="Akero/Message.html#from_pk-instance_method" title="Akero::Message#from_pk (method)">#from_pk</a></span>
|
|
75
|
+
|
|
76
|
+
<small>Akero::Message</small>
|
|
77
|
+
|
|
78
|
+
</li>
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<li class="r1 ">
|
|
82
|
+
<span class='object_link'><a href="Akero.html#id-instance_method" title="Akero#id (method)">#id</a></span>
|
|
83
|
+
|
|
84
|
+
<small>Akero</small>
|
|
85
|
+
|
|
86
|
+
</li>
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
<li class="r2 ">
|
|
90
|
+
<span class='object_link'><a href="Akero.html#initialize-instance_method" title="Akero#initialize (method)">#initialize</a></span>
|
|
91
|
+
|
|
92
|
+
<small>Akero</small>
|
|
93
|
+
|
|
94
|
+
</li>
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
<li class="r1 ">
|
|
98
|
+
<span class='object_link'><a href="Akero.html#load-class_method" title="Akero.load (method)">load</a></span>
|
|
99
|
+
|
|
100
|
+
<small>Akero</small>
|
|
101
|
+
|
|
102
|
+
</li>
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
<li class="r2 ">
|
|
106
|
+
<span class='object_link'><a href="Akero.html#private_key-instance_method" title="Akero#private_key (method)">#private_key</a></span>
|
|
107
|
+
|
|
108
|
+
<small>Akero</small>
|
|
109
|
+
|
|
110
|
+
</li>
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
<li class="r1 ">
|
|
114
|
+
<span class='object_link'><a href="Akero.html#public_key-instance_method" title="Akero#public_key (method)">#public_key</a></span>
|
|
115
|
+
|
|
116
|
+
<small>Akero</small>
|
|
117
|
+
|
|
118
|
+
</li>
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
<li class="r2 ">
|
|
122
|
+
<span class='object_link'><a href="Akero.html#receive-instance_method" title="Akero#receive (method)">#receive</a></span>
|
|
123
|
+
|
|
124
|
+
<small>Akero</small>
|
|
125
|
+
|
|
126
|
+
</li>
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
<li class="r1 ">
|
|
130
|
+
<span class='object_link'><a href="Akero.html#sign-instance_method" title="Akero#sign (method)">#sign</a></span>
|
|
131
|
+
|
|
132
|
+
<small>Akero</small>
|
|
133
|
+
|
|
134
|
+
</li>
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
<li class="r2 ">
|
|
138
|
+
<span class='object_link'><a href="Akero/Message.html#type-instance_method" title="Akero::Message#type (method)">#type</a></span>
|
|
139
|
+
|
|
140
|
+
<small>Akero::Message</small>
|
|
141
|
+
|
|
142
|
+
</li>
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
</ul>
|
|
146
|
+
</div>
|
|
147
|
+
</body>
|
|
148
|
+
</html>
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
|
+
<title>
|
|
7
|
+
Top Level Namespace
|
|
8
|
+
|
|
9
|
+
— Documentation by YARD 0.8.5.2
|
|
10
|
+
|
|
11
|
+
</title>
|
|
12
|
+
|
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
|
|
14
|
+
|
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
|
16
|
+
|
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
|
19
|
+
relpath = '';
|
|
20
|
+
framesUrl = "frames.html#!" + escape(window.location.href);
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
|
25
|
+
|
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="header">
|
|
32
|
+
<div id="menu">
|
|
33
|
+
|
|
34
|
+
<a href="_index.html">Index</a> »
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<span class="title">Top Level Namespace</span>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div id="search">
|
|
44
|
+
|
|
45
|
+
<a class="full_list_link" id="class_list_link"
|
|
46
|
+
href="class_list.html">
|
|
47
|
+
Class List
|
|
48
|
+
</a>
|
|
49
|
+
|
|
50
|
+
<a class="full_list_link" id="method_list_link"
|
|
51
|
+
href="method_list.html">
|
|
52
|
+
Method List
|
|
53
|
+
</a>
|
|
54
|
+
|
|
55
|
+
<a class="full_list_link" id="file_list_link"
|
|
56
|
+
href="file_list.html">
|
|
57
|
+
File List
|
|
58
|
+
</a>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
<div class="clear"></div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<iframe id="search_frame"></iframe>
|
|
65
|
+
|
|
66
|
+
<div id="content"><h1>Top Level Namespace
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
</h1>
|
|
71
|
+
|
|
72
|
+
<dl class="box">
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
</dl>
|
|
82
|
+
<div class="clear"></div>
|
|
83
|
+
|
|
84
|
+
<h2>Defined Under Namespace</h2>
|
|
85
|
+
<p class="children">
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Akero.html" title="Akero (class)">Akero</a></span>
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div id="footer">
|
|
106
|
+
Generated on Mon Mar 18 15:03:26 2013 by
|
|
107
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
108
|
+
0.8.5.2 (ruby-1.9.3).
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
</body>
|
|
112
|
+
</html>
|
data/lib/akero/benchmark.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'akero'
|
|
2
3
|
require 'gnuplot'
|
|
3
4
|
require 'b'
|
|
@@ -12,10 +13,10 @@ class Akero
|
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def b_size
|
|
15
|
-
puts
|
|
16
|
+
puts 'Running size benchmark...'
|
|
16
17
|
|
|
17
18
|
rnd = Random.new
|
|
18
|
-
msg_sizes = (8..14).map{|x| 2**x}
|
|
19
|
+
msg_sizes = (8..14).map { |x| 2**x }
|
|
19
20
|
modes = [[2048, false], [2048, true]]
|
|
20
21
|
results = {}
|
|
21
22
|
modes.each do |mode|
|
|
@@ -32,9 +33,9 @@ class Akero
|
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def b_timing
|
|
35
|
-
puts
|
|
36
|
+
puts 'Running timing benchmark...'
|
|
36
37
|
|
|
37
|
-
msg_sizes = (8..18).map{|x| 2**x}
|
|
38
|
+
msg_sizes = (8..18).map { |x| 2**x }
|
|
38
39
|
modes = [[2048, false], [2048, true]]
|
|
39
40
|
|
|
40
41
|
rnd = Random.new
|
|
@@ -42,10 +43,10 @@ class Akero
|
|
|
42
43
|
rounds = 50
|
|
43
44
|
results = []
|
|
44
45
|
modes.each do |mode|
|
|
45
|
-
results << B.enchmark("ENCRYPT #{mode[0]} bits, ascii_armor=#{mode[1]?1:0}", :
|
|
46
|
+
results << B.enchmark("ENCRYPT #{mode[0]} bits, ascii_armor=#{mode[1] ? 1 : 0}", rounds: rounds, compare: :mean) do
|
|
46
47
|
alice = Akero.new(mode[0])
|
|
47
48
|
bob = Akero.new(mode[0])
|
|
48
|
-
msg_sizes.each_with_index do |msize,
|
|
49
|
+
msg_sizes.each_with_index do |msize, _i|
|
|
49
50
|
msg = rnd.bytes(msize)
|
|
50
51
|
job "msg_size #{msize}" do
|
|
51
52
|
alice.encrypt(bob.public_key, msg, mode[1])
|
|
@@ -55,10 +56,10 @@ class Akero
|
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
modes.each do |mode|
|
|
58
|
-
results << B.enchmark("DECRYPT #{mode[0]} bits, ascii_armor=#{mode[1]?1:0}", :
|
|
59
|
+
results << B.enchmark("DECRYPT #{mode[0]} bits, ascii_armor=#{mode[1] ? 1 : 0}", rounds: rounds, compare: :mean) do
|
|
59
60
|
alice = Akero.new(mode[0])
|
|
60
61
|
bob = Akero.new(mode[0])
|
|
61
|
-
msg_sizes.each_with_index do |msize,
|
|
62
|
+
msg_sizes.each_with_index do |msize, _i|
|
|
62
63
|
msg = rnd.bytes(msize)
|
|
63
64
|
msg = alice.encrypt(bob.public_key, msg, mode[1])
|
|
64
65
|
job "msg_size #{msize}" do
|
|
@@ -69,10 +70,10 @@ class Akero
|
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
modes.each do |mode|
|
|
72
|
-
results << B.enchmark("SIGN #{mode[0]} bits, ascii_armor=#{mode[1]?1:0}", :
|
|
73
|
+
results << B.enchmark("SIGN #{mode[0]} bits, ascii_armor=#{mode[1] ? 1 : 0}", rounds: rounds, compare: :mean) do
|
|
73
74
|
alice = Akero.new(mode[0])
|
|
74
75
|
bob = Akero.new(mode[0])
|
|
75
|
-
msg_sizes.each_with_index do |msize,
|
|
76
|
+
msg_sizes.each_with_index do |msize, _i|
|
|
76
77
|
msg = rnd.bytes(msize)
|
|
77
78
|
job "msg_size #{msize}" do
|
|
78
79
|
alice.sign(msg, mode[1])
|
|
@@ -83,19 +84,19 @@ class Akero
|
|
|
83
84
|
|
|
84
85
|
ds = {}
|
|
85
86
|
title = []
|
|
86
|
-
results.each_with_index do |r,
|
|
87
|
-
r.each_with_index do |v,j|
|
|
88
|
-
(ds[v[:group]] ||= []) << [msg_sizes[j],v[:rate]]
|
|
87
|
+
results.each_with_index do |r, _i|
|
|
88
|
+
r.each_with_index do |v, j|
|
|
89
|
+
(ds[v[:group]] ||= []) << [msg_sizes[j], v[:rate]]
|
|
89
90
|
end
|
|
90
91
|
end
|
|
91
92
|
|
|
92
|
-
plot('benchmark/bm_rate.png', ds,
|
|
93
|
+
plot('benchmark/bm_rate.png', ds, 'Throughput', 'Input size (bytes)', 'Messages/sec')
|
|
93
94
|
end
|
|
94
95
|
|
|
95
96
|
def plot(path, ds, label, xlabel, ylabel)
|
|
96
97
|
Gnuplot.open do |gp|
|
|
97
|
-
Gnuplot::Plot.new(
|
|
98
|
-
plot.terminal
|
|
98
|
+
Gnuplot::Plot.new(gp) do |plot|
|
|
99
|
+
plot.terminal 'png'
|
|
99
100
|
plot.output path
|
|
100
101
|
plot.title label
|
|
101
102
|
plot.xlabel xlabel
|
|
@@ -108,13 +109,13 @@ class Akero
|
|
|
108
109
|
plot.set 'tics nomirror'
|
|
109
110
|
plot.style 'line 12 lc rgb "#808080" lt 0 lw 1'
|
|
110
111
|
plot.set 'grid back ls 12'
|
|
111
|
-
i=0
|
|
112
|
+
i = 0
|
|
112
113
|
ds.each do |k, v|
|
|
113
|
-
plot.data << Gnuplot::DataSet.new([v.collect {|x| x[0]}, v.collect {|x| x[1]}]) do |_ds|
|
|
114
|
-
_ds.with = "lp ls #{i+1}"
|
|
114
|
+
plot.data << Gnuplot::DataSet.new([v.collect { |x| x[0] }, v.collect { |x| x[1] }]) do |_ds|
|
|
115
|
+
_ds.with = "lp ls #{i + 1}"
|
|
115
116
|
_ds.title = k
|
|
116
117
|
end
|
|
117
|
-
i+=1
|
|
118
|
+
i += 1
|
|
118
119
|
end
|
|
119
120
|
end
|
|
120
121
|
end
|
data/lib/akero/cli.rb
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'akero/version'
|
|
3
|
+
require 'akero'
|
|
4
|
+
require 'optix'
|
|
5
|
+
|
|
6
|
+
# Akero
|
|
7
|
+
class Akero
|
|
8
|
+
# Akero Cli
|
|
9
|
+
class Cli < Optix::Cli
|
|
10
|
+
Optix.command do
|
|
11
|
+
text "Akero v#{Akero::VERSION}"
|
|
12
|
+
opt :private_key, 'Path to private key', short: :i, default: File.join(ENV['HOME'], '.akero_id')
|
|
13
|
+
opt :version, 'Print version and exit', short: :none
|
|
14
|
+
trigger :version do
|
|
15
|
+
puts "Akero v#{Akero::VERSION}"
|
|
16
|
+
end
|
|
17
|
+
filter do |_cmd, opts, _argv|
|
|
18
|
+
if ENV['AKERO_PK']&.starts_with? Akero::PKEY_HEADER
|
|
19
|
+
Akero.load(ENV['AKERO_PK'])
|
|
20
|
+
elsif File.exist? opts[:private_key]
|
|
21
|
+
opts[:akero_instance] = Akero.load(File.read(opts[:private_key]))
|
|
22
|
+
else
|
|
23
|
+
puts "Private key not found. Generating a new #{Akero::DEFAULT_RSA_BITS} bits RSA key and saving to #{opts[:private_key]} ..."
|
|
24
|
+
opts[:akero_instance] = Akero.new
|
|
25
|
+
File.write(opts[:private_key], opts[:akero_instance].private_key)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
desc 'Print public key to stdout'
|
|
31
|
+
text 'Print public key to stdout.'
|
|
32
|
+
def pk(_cmd, opts, _argv)
|
|
33
|
+
puts opts[:akero_instance].public_key
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
desc 'Print id (fingerprint) to stdout'
|
|
37
|
+
text 'Print id (fingerprint) to stdout.'
|
|
38
|
+
def id(_cmd, opts, _argv)
|
|
39
|
+
puts opts[:akero_instance].id
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
desc 'Read plain from stdin, print encrypted message to stdout'
|
|
43
|
+
text 'Read plain from stdin, print encrypted message to stdout.'
|
|
44
|
+
text ''
|
|
45
|
+
text 'The path to at least one file containing a recipient'
|
|
46
|
+
text 'public key must be given as a parameter.'
|
|
47
|
+
opt :armor, 'Output in ASCII armored format', short: :none, default: true
|
|
48
|
+
params '<path to recipient public_key> [..]'
|
|
49
|
+
def encrypt(_cmd, opts, argv)
|
|
50
|
+
raise Optix::HelpNeeded if argv.empty?
|
|
51
|
+
recipients = []
|
|
52
|
+
argv.each do |path|
|
|
53
|
+
recipients << File.read(path)
|
|
54
|
+
end
|
|
55
|
+
puts opts[:akero_instance].encrypt(recipients, STDIN.read, opts[:armor])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
desc 'Read plain from stdin, print signed message to stdout'
|
|
59
|
+
text 'Read plain from stdin, print signed message to stdout.'
|
|
60
|
+
opt :armor, 'Output in ASCII armored format', short: :none, default: true
|
|
61
|
+
def sign(_cmd, opts, _argv)
|
|
62
|
+
puts opts[:akero_instance].sign(STDIN.read, opts[:armor])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
desc 'Read signed/encrypted message from stdin, print plain to stdout'
|
|
66
|
+
text 'Read signed or encrypted message from stdin, print plain to stdout.'
|
|
67
|
+
opt :key, 'Write sender key to stderr', default: false
|
|
68
|
+
def receive(_cmd, opts, _argv)
|
|
69
|
+
msg = opts[:akero_instance].receive(STDIN.read)
|
|
70
|
+
puts msg.body
|
|
71
|
+
STDERR.puts msg.from_pk if opts[:key]
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
data/lib/akero/version.rb
CHANGED