helpema 3.0.210706 → 3.1.210909

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 295a6ea0d195e0b52b4f0960d946e87975cbf73059c93e08c54b2aa797e4e17c
4
- data.tar.gz: 65ee413650aaff19864215e8fe95f29f5aa0e898510b13ee436d737aacd535c1
3
+ metadata.gz: 06db87416d69a4ed736c20927d8f9d3c379d7654cbd3e85f57e6e44a5571098e
4
+ data.tar.gz: e0f8202e576a5ba7d7fb30ec1b045bc8da3bf1c696bf98874b30c032820e45a8
5
5
  SHA512:
6
- metadata.gz: adbb195324d7f68fd7bb7033cbef3f9a925c7fe9866c834862779fdb9e306b4ecb4967aa2ad31cacad639b45a6555203c9bae7a049dadf552231b39efd43fdc1
7
- data.tar.gz: 43d34fde681cdcbe0a2dbf4927402fd92c63eaae10d69a40894610fcea3b20c28622790829f585f22bbf9349206c62be4e344deb62bd76c72436cb55fe97759e
6
+ metadata.gz: 0e59e80e64f0c88ac0a0948ff773b9238f7334939231d70c70aec105217962cc4e3e68276b29013cb4e22eec57e392031b2f927c690d29d35999ca236860b1ee
7
+ data.tar.gz: aaddb40d73e6d372d50ff61244232dbc998076806dcc3903fefd1c46647e3f739bfd9b0b0d6d29ab4b56c8bfb0411d2314bee2505ceae11c90ffeb717b2cf781
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Helpema
2
2
 
3
- * [VERSION 3.0.210706](https://github.com/carlosjhr64/helpema/releases)
3
+ * [VERSION 3.1.210909](https://github.com/carlosjhr64/helpema/releases)
4
4
  * [github](https://github.com/carlosjhr64/helpema)
5
5
  * [rubygems](https://rubygems.org/gems/helpema)
6
6
 
@@ -12,7 +12,7 @@ Featured method: `requires "good ~>3.0", "bad ~>2.7", "ugly ~>1.8"`
12
12
 
13
13
  ## INSTALL:
14
14
 
15
- ```shell
15
+ ```console
16
16
  $ gem install helpema
17
17
  ```
18
18
 
@@ -30,7 +30,7 @@ using Helpema
30
30
  # that annoyingly keep falling out of maintainance... right?
31
31
  requires'
32
32
  ruby ~>3.0
33
- helpema ~>3.0
33
+ helpema ~>3.1
34
34
  base_convert ~>4.0
35
35
  entropia ~>0.1'
36
36
  #=> ["base_convert", "entropia"]
@@ -61,7 +61,12 @@ to_arg :geo=, '10x20' #=> "--geo=10x20"
61
61
  to_arg :arg0, 'Hello World' #=> "Hello World"
62
62
 
63
63
  ### Hash#to_args ###
64
- {q: true, quiet: true, verbose: false, f: '/path-to/file', :geo= => '10x20', arg0: 'Hello World'}.to_args
64
+ { q: true,
65
+ quiet: true,
66
+ verbose: false,
67
+ f: '/path-to/file',
68
+ :geo= => '10x20',
69
+ arg0: 'Hello World' }.to_args
65
70
  #=> ["-q", "--quiet", "-f", "/path-to/file", "--geo=10x20", "Hello World"]
66
71
 
67
72
  ### Array#classify ###
@@ -76,7 +81,8 @@ SSSS.split(secret: "Top Secret!", threshold: 2, shares: 3)
76
81
 
77
82
  #### SSSS.combine ###
78
83
  # Pregenerated splits combine to reproduce the secret.
79
- SSSS.combine(secrets: ["3-055562917c41e68c6ab2c8", "1-27bf3cbfe8d2c25c7e8928"], threshold: 2)
84
+ SSSS.combine(secrets: ["3-055562917c41e68c6ab2c8", "1-27bf3cbfe8d2c25c7e8928"],
85
+ threshold: 2)
80
86
  #=> "Top Secret!"
81
87
 
82
88
  ### YouTubeDL.json ###
@@ -95,7 +101,34 @@ string_or_nil = ZBar.screen
95
101
  ### ZBar.cam ###
96
102
  # Reads qrcodes from camera.
97
103
  # You may want to wrap this one in a Timeout block.
98
- string = ZBar.cam
104
+ # string = ZBar.cam
105
+
106
+ ### GPG Symmetric ###
107
+ ## String to String
108
+ encrypted = GPG.encrypt(passphrase: '<Secret>', string: '<Plain Text>')
109
+ decrypted = GPG.decrypt(passphrase: '<Secret>', string: encrypted)
110
+ #=> "<Plain Text>"
111
+ ## File to File
112
+ # Got a text file...
113
+ `md5sum tmp/text.txt` #~> ^d27b3111fdeb72f2862909c216214bc1
114
+ # gpg wont overwrite, so need to remove existing...
115
+ File.exist?(_='tmp/text.enc') and File.unlink(_)
116
+ File.exist?(_='tmp/text.dec') and File.unlink(_)
117
+ # Encrypt text file...
118
+ GPG.encrypt(passphrase: '<Secret>', input: 'tmp/text.txt', output: 'tmp/text.enc') #=> ""
119
+ # Decrypt encrypted file...
120
+ GPG.decrypt(passphrase: '<Secret>', input: 'tmp/text.enc', output: 'tmp/text.dec') #=> ""
121
+ # Decrypted file should match...
122
+ `md5sum tmp/text.dec` #~> ^d27b3111fdeb72f2862909c216214bc1
123
+ ## IO to IO
124
+ require 'stringio'
125
+ pio = StringIO.new '<Plain>'
126
+ eio = StringIO.new ''
127
+ dio = StringIO.new ''
128
+ GPG.encrypt(passphrase: '<Secret>', ioin: pio, ioout: eio)
129
+ eio.rewind
130
+ GPG.decrypt(passphrase: '<Secret>', ioin: eio, ioout: dio)
131
+ dio.string #=> "<Plain>"
99
132
  ```
100
133
 
101
134
  ## TROUBLESHOOTING:
@@ -110,7 +143,7 @@ More documentation
110
143
 
111
144
  (The MIT License)
112
145
 
113
- Copyright (c) 2021 carlosjhr64
146
+ Copyright (c) 2021 CarlosJHR64
114
147
 
115
148
  Permission is hereby granted, free of charge, to any person obtaining
116
149
  a copy of this software and associated documentation files (the
@@ -0,0 +1,86 @@
1
+ module Helpema
2
+ module GPG
3
+ extend Helpema
4
+ class << self; attr_accessor :version; end
5
+ GPG.version = '^gpg \\(GnuPG\\) 2\.[234]\.' # version as of this writing is 2.2.27
6
+
7
+ GPG.define_command(:cryptor,
8
+ cmd: 'gpg', version: GPG.version,
9
+ usage: {
10
+ quiet: true,
11
+ batch: true,
12
+ 'passphrase-fd': 0,
13
+ output: nil,
14
+ symmetric: nil,
15
+ decrypt: nil,
16
+ arg0: nil,
17
+ },
18
+ synonyms: {
19
+ input: :arg0,
20
+ },
21
+ mode: 'w+',
22
+ exception: 'gpg failed'
23
+ ) do |pipe, options, blk|
24
+ passphrase, string, ioin, ioout =
25
+ options.fetch_values(:passphrase, :string, :ioin, :ioout)
26
+ pipe.puts passphrase
27
+ Thread.new do
28
+ if string
29
+ pipe.write string
30
+ elsif ioin
31
+ while c = ioin.getbyte
32
+ pipe.putc c
33
+ end
34
+ end
35
+ pipe.close_write
36
+ end
37
+ if ioout
38
+ while c = pipe.getbyte
39
+ ioout.putc c
40
+ end
41
+ else
42
+ pipe.read
43
+ end
44
+ end
45
+
46
+ def encrypt(passphrase:,
47
+ string:nil,
48
+ output:nil,
49
+ input:nil,
50
+ ioin:nil,
51
+ ioout:nil)
52
+ unless [string,input,ioin].count{_1} == 1
53
+ raise "Need only one of string, input, or ioin"
54
+ end
55
+ raise "Can't have both output and ioout" if output and ioout
56
+ GPG.cryptor(symmetric: true,
57
+ passphrase: passphrase,
58
+ string: string,
59
+ input: input,
60
+ output: output,
61
+ ioin: ioin,
62
+ ioout: ioout)
63
+ end
64
+
65
+ def decrypt(passphrase:,
66
+ string:nil,
67
+ output:nil,
68
+ input:nil,
69
+ ioin:nil,
70
+ ioout:nil)
71
+ unless [string,input,ioin].count{_1} == 1
72
+ raise "Need only one of string, input, or ioin"
73
+ end
74
+ raise "Can't have both output and ioout" if output and ioout
75
+ GPG.cryptor(decrypt: true,
76
+ passphrase: passphrase,
77
+ string: string,
78
+ input: input,
79
+ output: output,
80
+ ioin: ioin,
81
+ ioout: ioout)
82
+ end
83
+
84
+ extend self
85
+ end
86
+ end
@@ -15,7 +15,7 @@ module Helpema
15
15
  # convert key,value tuples to final list of args
16
16
  args.map!(&:to_arg)
17
17
  # get rid of nil
18
- args.select!{_1}
18
+ args.compact!
19
19
  # ...and finally flatten!
20
20
  args.flatten!
21
21
  return args
@@ -58,7 +58,9 @@ module Helpema
58
58
  args,ret = options.to_args(usage:usage,synonyms:synonyms),nil
59
59
  $stderr.puts "#{cmd} #{args.join(' ')}" if $DEBUG
60
60
  IO.popen([cmd, *args], mode, **popt) do |pipe|
61
- ret = (forward_pass)? forward_pass.call(pipe, options, blk): (blk)? blk.call(pipe): pipe.read
61
+ ret = forward_pass ? forward_pass.call(pipe, options, blk) :
62
+ blk ? blk.call(pipe) :
63
+ pipe.read
62
64
  end
63
65
  (exception.nil? or $?.exitstatus==0)? ret : raise(exception)
64
66
  end
@@ -93,10 +95,14 @@ module Helpema
93
95
  unless reqs.empty?
94
96
  case gemname
95
97
  when 'helpema'
96
- raise "helpema #{VERSION} not #{reqs.join(', ')}" unless VERSION.satisfies?(*reqs)
98
+ unless VERSION.satisfies?(*reqs)
99
+ raise "helpema #{VERSION} not #{reqs.join(', ')}"
100
+ end
97
101
  next
98
102
  when 'ruby'
99
- raise "ruby #{RUBY_VERSION} not #{reqs.join(', ')}" unless RUBY_VERSION.satisfies?(*reqs)
103
+ unless RUBY_VERSION.satisfies?(*reqs)
104
+ raise "ruby #{RUBY_VERSION} not #{reqs.join(', ')}"
105
+ end
100
106
  next
101
107
  else
102
108
  gem gemname, *reqs
data/lib/helpema/ssss.rb CHANGED
@@ -14,9 +14,18 @@ module Helpema
14
14
  pipe.puts options.fetch(:secret)
15
15
  pipe.read.split.last(options[:shares])
16
16
  end
17
- def split(secret:, threshold:, shares:, token:nil, level:nil, hexmode:false) =
18
- SSSS._split(secret:secret, threshold:threshold, shares:shares, token:token, level:level, hexmode:hexmode)
19
-
17
+ def split(
18
+ secret:, threshold:,
19
+ shares:, token:nil,
20
+ level:nil,
21
+ hexmode:false
22
+ ) = SSSS._split(
23
+ secret:secret,
24
+ threshold:threshold,
25
+ shares:shares,
26
+ token:token,
27
+ level:level,
28
+ hexmode:hexmode)
20
29
  SSSS.define_command(:_combine,
21
30
  cmd: 'ssss-combine', v: SSSS.version,
22
31
  usage: {Q:true,t:2,x:false}, synonyms: {threshold: :t, hexmode: :x},
data/lib/helpema.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  module Helpema
2
- VERSION = '3.0.210706'
2
+ VERSION = '3.1.210909'
3
3
 
4
4
  require_relative 'helpema/helpema'
5
5
 
6
6
  autoload :SSSS, 'helpema/ssss.rb'
7
7
  autoload :YouTubeDL, 'helpema/youtubedl.rb'
8
8
  autoload :ZBar, 'helpema/zbar.rb'
9
+ autoload :GPG, 'helpema/gpg.rb'
9
10
  end
10
11
 
11
12
  # Requires:
@@ -16,3 +17,4 @@ end
16
17
  #`zbarcam`
17
18
  #`zbarimg`
18
19
  #`gnome-screenshot`
20
+ #`gpg`
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helpema
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.210706
4
+ version: 3.1.210909
5
5
  platform: ruby
6
6
  authors:
7
- - carlosjhr64
7
+ - CarlosJHR64
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-06 00:00:00.000000000 Z
11
+ date: 2021-09-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  Meant to be an eclectic collection of useful single functions and wrappers.
@@ -21,6 +21,7 @@ extra_rdoc_files: []
21
21
  files:
22
22
  - README.md
23
23
  - lib/helpema.rb
24
+ - lib/helpema/gpg.rb
24
25
  - lib/helpema/helpema.rb
25
26
  - lib/helpema/ssss.rb
26
27
  - lib/helpema/youtubedl.rb
@@ -44,14 +45,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
44
45
  - !ruby/object:Gem::Version
45
46
  version: '0'
46
47
  requirements:
47
- - 'ruby: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]'
48
+ - 'ruby: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]'
48
49
  - 'youtube-dl: 2021.06.06'
49
50
  - 'ssss-split: 0.5'
50
51
  - 'ssss-combine: 0.5'
51
52
  - 'zbarcam: 0.23'
52
53
  - 'zbarimg: 0.23'
53
54
  - 'gnome-screenshot: gnome-screenshot 40.0'
54
- rubygems_version: 3.2.15
55
+ - 'gpg: gpg (GnuPG) 2.2.27'
56
+ rubygems_version: 3.2.22
55
57
  signing_key:
56
58
  specification_version: 4
57
59
  summary: Meant to be an eclectic collection of useful single functions and wrappers.