akero 1.0.4 → 1.1.0

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