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.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +3 -0
  3. data/.gitignore +0 -2
  4. data/.rubocop.yml +43 -0
  5. data/.travis.yml +3 -7
  6. data/Gemfile +1 -0
  7. data/Guardfile +4 -3
  8. data/Makefile +26 -0
  9. data/README.md +28 -10
  10. data/Rakefile +8 -17
  11. data/akero.gemspec +17 -10
  12. data/bin/akero +6 -0
  13. data/coverage/.last_run.json +5 -0
  14. data/coverage/.resultset.json +367 -0
  15. data/coverage/.resultset.json.lock +0 -0
  16. data/coverage/assets/0.10.0/application.css +799 -0
  17. data/coverage/assets/0.10.0/application.js +1707 -0
  18. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  19. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  20. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  21. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  22. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  23. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  24. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  25. data/coverage/assets/0.10.0/loading.gif +0 -0
  26. data/coverage/assets/0.10.0/magnify.png +0 -0
  27. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  28. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  29. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  30. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  31. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  32. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  33. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  34. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  35. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  36. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  37. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  38. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  39. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  40. data/coverage/assets/0.7.1/application.css +1110 -0
  41. data/coverage/assets/0.7.1/application.js +626 -0
  42. data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  43. data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  44. data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  45. data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  46. data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  47. data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  48. data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  49. data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  50. data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  51. data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  52. data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  53. data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  54. data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  55. data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  56. data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  57. data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  58. data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  59. data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  60. data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  61. data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  62. data/coverage/assets/0.7.1/favicon_green.png +0 -0
  63. data/coverage/assets/0.7.1/favicon_red.png +0 -0
  64. data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  65. data/coverage/assets/0.7.1/loading.gif +0 -0
  66. data/coverage/assets/0.7.1/magnify.png +0 -0
  67. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  68. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  69. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  70. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  71. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  72. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  73. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  74. data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  75. data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  76. data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  77. data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  78. data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  79. data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  80. data/coverage/index.html +2248 -0
  81. data/doc/Akero/Message.html +475 -0
  82. data/doc/Akero.html +1148 -0
  83. data/doc/_index.html +125 -0
  84. data/doc/class_list.html +53 -0
  85. data/doc/css/common.css +1 -0
  86. data/doc/css/full_list.css +57 -0
  87. data/doc/css/style.css +338 -0
  88. data/doc/file.README.html +186 -0
  89. data/doc/file_list.html +55 -0
  90. data/doc/frames.html +28 -0
  91. data/doc/index.html +186 -0
  92. data/doc/js/app.js +214 -0
  93. data/doc/js/full_list.js +173 -0
  94. data/doc/js/jquery.js +4 -0
  95. data/doc/method_list.html +148 -0
  96. data/doc/top-level-namespace.html +112 -0
  97. data/lib/akero/benchmark.rb +21 -20
  98. data/lib/akero/cli.rb +74 -0
  99. data/lib/akero/version.rb +2 -1
  100. data/lib/akero.rb +92 -90
  101. data/spec/akero_spec.rb +66 -65
  102. data/spec/spec_helper.rb +1 -0
  103. 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
+ &mdash; 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> &raquo;
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>
@@ -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 "Running size benchmark..."
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 "Running timing benchmark..."
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}", :rounds => rounds, :compare => :mean) do
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, i|
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}", :rounds => rounds, :compare => :mean) do
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, i|
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}", :rounds => rounds, :compare => :mean) do
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, i|
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, i|
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, "Throughput", 'Input size (bytes)', 'Messages/sec')
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( gp ) do |plot|
98
- plot.terminal "png"
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Akero
2
- VERSION = "1.0.4"
3
+ VERSION = '1.1.0'
3
4
  end