akero 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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