safedb 0.01.0001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.yardopts +3 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +21 -0
  6. data/README.md +793 -0
  7. data/Rakefile +16 -0
  8. data/bin/safe +5 -0
  9. data/lib/configs/README.md +58 -0
  10. data/lib/extension/array.rb +162 -0
  11. data/lib/extension/dir.rb +35 -0
  12. data/lib/extension/file.rb +123 -0
  13. data/lib/extension/hash.rb +33 -0
  14. data/lib/extension/string.rb +572 -0
  15. data/lib/factbase/facts.safedb.net.ini +38 -0
  16. data/lib/interprete.rb +462 -0
  17. data/lib/keytools/PRODUCE_RAND_SEQ_USING_DEV_URANDOM.txt +0 -0
  18. data/lib/keytools/kdf.api.rb +243 -0
  19. data/lib/keytools/kdf.bcrypt.rb +265 -0
  20. data/lib/keytools/kdf.pbkdf2.rb +262 -0
  21. data/lib/keytools/kdf.scrypt.rb +190 -0
  22. data/lib/keytools/key.64.rb +326 -0
  23. data/lib/keytools/key.algo.rb +109 -0
  24. data/lib/keytools/key.api.rb +1391 -0
  25. data/lib/keytools/key.db.rb +330 -0
  26. data/lib/keytools/key.docs.rb +195 -0
  27. data/lib/keytools/key.error.rb +110 -0
  28. data/lib/keytools/key.id.rb +271 -0
  29. data/lib/keytools/key.ident.rb +243 -0
  30. data/lib/keytools/key.iv.rb +107 -0
  31. data/lib/keytools/key.local.rb +259 -0
  32. data/lib/keytools/key.now.rb +402 -0
  33. data/lib/keytools/key.pair.rb +259 -0
  34. data/lib/keytools/key.pass.rb +120 -0
  35. data/lib/keytools/key.rb +585 -0
  36. data/lib/logging/gem.logging.rb +132 -0
  37. data/lib/modules/README.md +43 -0
  38. data/lib/modules/cryptology/aes-256.rb +154 -0
  39. data/lib/modules/cryptology/amalgam.rb +70 -0
  40. data/lib/modules/cryptology/blowfish.rb +130 -0
  41. data/lib/modules/cryptology/cipher.rb +207 -0
  42. data/lib/modules/cryptology/collect.rb +138 -0
  43. data/lib/modules/cryptology/crypt.io.rb +225 -0
  44. data/lib/modules/cryptology/engineer.rb +99 -0
  45. data/lib/modules/mappers/dictionary.rb +288 -0
  46. data/lib/modules/storage/coldstore.rb +186 -0
  47. data/lib/modules/storage/git.store.rb +399 -0
  48. data/lib/session/fact.finder.rb +334 -0
  49. data/lib/session/require.gem.rb +112 -0
  50. data/lib/session/time.stamp.rb +340 -0
  51. data/lib/session/user.home.rb +49 -0
  52. data/lib/usecase/cmd.rb +487 -0
  53. data/lib/usecase/config/README.md +57 -0
  54. data/lib/usecase/docker/README.md +146 -0
  55. data/lib/usecase/docker/docker.rb +49 -0
  56. data/lib/usecase/edit/README.md +43 -0
  57. data/lib/usecase/edit/delete.rb +46 -0
  58. data/lib/usecase/export.rb +40 -0
  59. data/lib/usecase/files/README.md +37 -0
  60. data/lib/usecase/files/eject.rb +56 -0
  61. data/lib/usecase/files/file_me.rb +78 -0
  62. data/lib/usecase/files/read.rb +169 -0
  63. data/lib/usecase/files/write.rb +89 -0
  64. data/lib/usecase/goto.rb +57 -0
  65. data/lib/usecase/id.rb +36 -0
  66. data/lib/usecase/import.rb +157 -0
  67. data/lib/usecase/init.rb +63 -0
  68. data/lib/usecase/jenkins/README.md +146 -0
  69. data/lib/usecase/jenkins/jenkins.rb +208 -0
  70. data/lib/usecase/login.rb +71 -0
  71. data/lib/usecase/logout.rb +28 -0
  72. data/lib/usecase/open.rb +71 -0
  73. data/lib/usecase/print.rb +40 -0
  74. data/lib/usecase/put.rb +81 -0
  75. data/lib/usecase/set.rb +44 -0
  76. data/lib/usecase/show.rb +138 -0
  77. data/lib/usecase/terraform/README.md +91 -0
  78. data/lib/usecase/terraform/terraform.rb +121 -0
  79. data/lib/usecase/token.rb +35 -0
  80. data/lib/usecase/update/README.md +55 -0
  81. data/lib/usecase/update/rename.rb +180 -0
  82. data/lib/usecase/use.rb +41 -0
  83. data/lib/usecase/verse.rb +20 -0
  84. data/lib/usecase/view.rb +71 -0
  85. data/lib/usecase/vpn/README.md +150 -0
  86. data/lib/usecase/vpn/vpn.ini +31 -0
  87. data/lib/usecase/vpn/vpn.rb +54 -0
  88. data/lib/version.rb +3 -0
  89. data/safedb.gemspec +34 -0
  90. metadata +193 -0
@@ -0,0 +1,572 @@
1
+ #!/usr/bin/ruby
2
+
3
+
4
+ # Reopen the core ruby String class and add the below methods to it.
5
+ #
6
+ # Case Sensitivity rules for [ALL] the below methods that are
7
+ # added to the core Ruby string class.
8
+ #
9
+ # For case insensitive behaviour make sure you downcase both the
10
+ # string object and the parameter strings (or strings within
11
+ # other parameter objects, like arrays and hashes).
12
+ class String
13
+
14
+ ## ################################################
15
+ ## ################################################
16
+ ## ################################################
17
+ ## ################################################
18
+ ## https://www.di-mgt.com.au/cryptokeys.html
19
+ ## ################################################
20
+ ## ################################################
21
+ ## ################################################
22
+ ## ################################################
23
+ ## ################################################
24
+
25
+ # Encrypt this string with the parameter symmetric encryption/decryption key
26
+ # and then return the Base64 (block mode) encoded result.
27
+ #
28
+ # @example
29
+ # cipher_text = "Hello crypt world".encrypt_block_encode "ABC123XYZ"
30
+ # original_txt = cipher_text.block_decode_decrypt "ABC123XYZ"
31
+ # puts original_txt # "Hello crypt world"
32
+ #
33
+ # @param crypt_key [String]
34
+ # a strong long encryption key that is used to encrypt this string before
35
+ # applying the Base64 block encoding.
36
+ def encrypt_block_encode crypt_key
37
+ encrypted_text = SafeDb::ToolBelt::Blowfish.encryptor( self, crypt_key )
38
+ return Base64.encode64( encrypted_text )
39
+ end
40
+
41
+
42
+
43
+ # First apply a base64 (block mode) decode to this string and then use the
44
+ # parameter symmetric decryption key to decrypt the result. The output is then
45
+ # returned within a new string.
46
+ #
47
+ # @example
48
+ # cipher_text = "Hello crypt world".decrypt_block_encode "ABC123XYZ"
49
+ # original_txt = cipher_text.block_decode_decrypt "ABC123XYZ"
50
+ # puts original_txt # "Hello crypt world"
51
+ #
52
+ # @param crypt_key [String]
53
+ # a strong long decryption key that is used to decrypt this string after
54
+ # the Base64 block decoding has been applied.
55
+ def block_decode_decrypt crypt_key
56
+ the_ciphertxt = Base64.decode64( self )
57
+ return SafeDb::ToolBelt::Blowfish.decryptor( the_ciphertxt, crypt_key )
58
+ end
59
+
60
+
61
+
62
+ # Encrypt this string with the parameter symmetric encryption/decryption key
63
+ # and then return the Base64 (url safe mode) encoded result.
64
+ #
65
+ # The output will be a single line and differs from the block mode with
66
+ #
67
+ # - underscores printed instead of forward slash characters
68
+ # - hyphens printed instead of plus characters
69
+ # - no (blocked) carriage return or new line characters
70
+ #
71
+ # Note however that sometimes one or more equals characters will be printed at
72
+ # the end of the string by way of padding. In places like environment variables
73
+ # that are sensitive to the equals character this can be replaced by an <b>@</b>
74
+ # symbol.
75
+ #
76
+ # @example
77
+ # cipher_text = "Hello @:==:@ world".encrypt_url_encode "ABC123XYZ"
78
+ # original_txt = cipher_text.url_decode_decrypt "ABC123XYZ"
79
+ # puts original_txt # "Hello @:==:@ world"
80
+ #
81
+ # @param crypt_key [String]
82
+ # a strong long encryption key that is used to encrypt this string before
83
+ # applying the Base64 ul safe encoding.
84
+ def encrypt_url_encode crypt_key
85
+
86
+ ## ################################################
87
+ ## ################################################
88
+ ## ################################################
89
+ ## ################################################
90
+ ## https://www.di-mgt.com.au/cryptokeys.html
91
+ ## ################################################
92
+ ## ################################################
93
+ ## ################################################
94
+ ## ################################################
95
+ ## ################################################
96
+
97
+ log.info(x){ "Encrypt Length => [ #{self.length} ]" }
98
+ log.info(x){ "The Key Length => [ #{crypt_key.length} ]" }
99
+ log.info(x){ "Encrypt String => [ #{self} ]" }
100
+ log.info(x){ "Encryption Key => [ #{crypt_key} ]" }
101
+
102
+ encrypted_text = SafeDb::ToolBelt::Blowfish.encryptor( self, crypt_key )
103
+
104
+ log.info(x){ "Encrypt Result => [ #{encrypted_text} ]" }
105
+ log.info(x){ "Encrypted Text => [ #{Base64.urlsafe_encode64(encrypted_text)} ]" }
106
+
107
+ return Base64.urlsafe_encode64(encrypted_text)
108
+
109
+ end
110
+
111
+
112
+
113
+ # First apply a base64 (url safe mode) decode to this string and then use the
114
+ # parameter symmetric decryption key to decrypt the result. The output is then
115
+ # returned within a new string.
116
+ #
117
+ # The input must will be a single line and differs from the block mode with
118
+ #
119
+ # - underscores printed instead of forward slash characters
120
+ # - hyphens printed instead of plus characters
121
+ # - no (blocked) carriage return or new line characters
122
+ #
123
+ # @example
124
+ # cipher_text = "Hello @:==:@ world".encrypt_url_encode "ABC123XYZ"
125
+ # original_txt = cipher_text.url_decode_decrypt "ABC123XYZ"
126
+ # puts original_txt # "Hello @:==:@ world"
127
+ #
128
+ # @param crypt_key [String]
129
+ # a strong long decryption key that is used to decrypt this string after
130
+ # the Base64 url safe decoding has been applied.
131
+ def url_decode_decrypt crypt_key
132
+ the_ciphertxt = Base64.urlsafe_decode64( self )
133
+ return SafeDb::ToolBelt::Blowfish.decryptor( the_ciphertxt, crypt_key )
134
+ end
135
+
136
+
137
+
138
+
139
+ # Overtly long file paths (eg in logs) can hamper readability so this
140
+ # <b>human readable filepath converter</b> counters the problem by
141
+ # returning (only) the 2 immediate ancestors of the filepath.
142
+ #
143
+ # So this method returns the name of the grandparent folder then parent folder
144
+ # and then the most significant file (or folder) name.
145
+ #
146
+ # When this is not possible due to the filepath being colisively near the
147
+ # filesystem's root, it returns the parameter name.
148
+ #
149
+ # @example
150
+ # A really long input like
151
+ # => /home/joe/project/degrees/math/2020
152
+ # is reduced to
153
+ # => degrees/math/2020
154
+ #
155
+ # @return [String] the segmented 3 most significant path name elements.
156
+ def hr_path
157
+
158
+ object_name = File.basename self
159
+ parent_folder = File.dirname self
160
+ parent_name = File.basename parent_folder
161
+ granny_folder = File.dirname parent_folder
162
+ granny_name = File.basename granny_folder
163
+
164
+ return [granny_name,parent_name,object_name].join("/")
165
+
166
+ end
167
+
168
+
169
+ # Return a new string matching this one with every non alpha-numeric
170
+ # character removed. This string is left unchanged.
171
+ #
172
+ # Spaces, hyphens, underscores, periods are all removed. The only
173
+ # characters left standing belong to a set of 62 and are
174
+ #
175
+ # - a to z
176
+ # - A to Z
177
+ # - 0 to 9
178
+ #
179
+ # @return [String]
180
+ # Remove any character that is not alphanumeric, a to z, A to Z
181
+ # and 0 to 9 and return a new string leaving this one unchanged.
182
+ def to_alphanumeric
183
+ return self.delete("^A-Za-z0-9")
184
+ end
185
+
186
+
187
+ # Find the length of this string and return a string that is the
188
+ # concatenated union of this string and its integer length.
189
+ # If this string is empty a string of length one ie "0" will be
190
+ # returned.
191
+ #
192
+ # @return [String]
193
+ # Return this string with a cheeky integer tagged onto the end
194
+ # that represents the (pre-concat) length of the string.
195
+ def concat_length
196
+ return self + "#{self.length}"
197
+ end
198
+
199
+
200
+ # Get the text [in between] this and that delimiter [exclusively].
201
+ # Exclusively means the returned text [does not] include either of
202
+ # the matched delimiters (although an unmatched instance of [this]
203
+ # delimiter may appear in the in-between text).
204
+ #
205
+ # ### Multiple Delimiters
206
+ #
207
+ # When multiple delimiters exist, the text returned is in between the
208
+ #
209
+ # - first occurrence of [this] delimiter AND the
210
+ # - 1st occurrence of [that] delimiter [AFTER] the 1st delimiter
211
+ #
212
+ # Instances of [that] delimiter occurring before [this] are ignored.
213
+ # The text could contain [this] delimiter instances but is guaranteed
214
+ # not to contain a [that] delimiter.
215
+ #
216
+ # @throw an exception (error) will be thrown if
217
+ #
218
+ # - any nil (or empties) exist in the input parameters
219
+ # - **this** delimiter does not appear in the in_string
220
+ # - **that** delimiter does not appear after [this] one
221
+ #
222
+ # @param this_delimiter [String] begin delimiter (not included in returned string)
223
+ # @param that_delimiter [String] end delimiter (not included in returned string)
224
+ #
225
+ # @return [String] the text in between (excluding) the two parameter delimiters
226
+ def in_between this_delimiter, that_delimiter
227
+
228
+ raise ArgumentError, "This string is NIL or empty." if self.nil? || self.empty?
229
+ raise ArgumentError, "Begin delimiter is NIL or empty." if this_delimiter.nil? || this_delimiter.empty?
230
+ raise ArgumentError, "End delimiter is NIL or empty." if that_delimiter.nil? || that_delimiter.empty?
231
+
232
+ scanner_1 = StringScanner.new self
233
+ scanner_1.scan_until /#{this_delimiter}/
234
+ scanner_2 = StringScanner.new scanner_1.post_match
235
+ scanner_2.scan_until /#{that_delimiter}/
236
+
237
+ in_between_text = scanner_2.pre_match.strip
238
+ return in_between_text
239
+
240
+ end
241
+
242
+
243
+ # To hex converts this string to hexadecimal form and returns
244
+ # the result leaving this string unchanged.
245
+ # @return [String] hexadecimal representation of this string
246
+ def to_hex
247
+
248
+ return self.unpack("H*").first
249
+
250
+ end
251
+
252
+
253
+ # From hex converts this (assumed) hexadecimal string back into
254
+ # its normal string form and returns the result leaving this string
255
+ # unchanged.
256
+ # @return [String] string that matches the hexadecimal representation
257
+ def from_hex
258
+
259
+ return [self].pack("H*")
260
+
261
+ end
262
+
263
+
264
+ # Flatten (lower) a camel cased string and add periods to
265
+ # denote separation where the capital letters used to be.
266
+ #
267
+ # Example behaviour is illustrated
268
+ #
269
+ # - in => ObjectOriented
270
+ # - out => object.oriented
271
+ #
272
+ # Even when a capital letter does not lead lowercase characters
273
+ # the behaviour should resemble this.
274
+ #
275
+ # - in => SuperX
276
+ # - out => super.x
277
+ #
278
+ #
279
+ # And if every letter is uppercase, each one represents its
280
+ # own section like this.
281
+ #
282
+ # - in => BEAST
283
+ # - out => b.e.a.s.t
284
+ #
285
+ # == Flatten Class Names
286
+ #
287
+ # If the string comes in as a class name we can expect it to
288
+ # contain colons like the below examples.
289
+ # This::That
290
+ # ::That
291
+ # This::That::TheOther
292
+ #
293
+ # So we find the last index of a colon and then continue as per
294
+ # the above with flattening the string.
295
+ #
296
+ # @return [String] a flatten (period separated) version of this camel cased string
297
+ def do_flatten
298
+
299
+ to_flatten_str = self
300
+
301
+ last_colon_index = to_flatten_str.rindex ":"
302
+ ends_with_colon = to_flatten_str[-1].eql? ":"
303
+ unless ( last_colon_index.nil? || ends_with_colon )
304
+ to_flatten_str = to_flatten_str[ (last_colon_index+1) .. -1 ]
305
+ end
306
+
307
+ snapped_str = ""
308
+ to_flatten_str.each_char do |this_char|
309
+ is_lower = "#{this_char}".is_all_lowercase?
310
+ snapped_str += "." unless is_lower || snapped_str.empty?
311
+ snapped_str += this_char.downcase
312
+ end
313
+
314
+ return snapped_str
315
+
316
+ end
317
+
318
+
319
+
320
+ # Return true if every character in this string is lowercase.
321
+ # Note that if this string is empty this method returns true.
322
+ #
323
+ # @return true if every alpha character in this string is lowercase
324
+ def is_all_lowercase?
325
+ return self.downcase.eql? self
326
+ end
327
+
328
+
329
+
330
+ # Flatten (lower) a camel cased string and add periods to
331
+ # denote separation where the capital letters used to be.
332
+ # The inverse operation to [ do_flatten ] which resurrects
333
+ # this (expected) period separated string changing it back
334
+ # to a camel (mountain) cased string.
335
+ #
336
+ # Example behaviour is illustrated
337
+ #
338
+ # - in => object.oriented
339
+ # - out => ObjectOriented
340
+ #
341
+ # Even when a single character exists to the right of the period
342
+ # the behaviour should resemble this.
343
+ #
344
+ # - in => super.x
345
+ # - out => SuperX
346
+ #
347
+ #
348
+ # And if every letter is period separated
349
+ #
350
+ # - in => b.e.a.s.t
351
+ # - out => BEAST
352
+ #
353
+ # @return [String] camel cased version of this flattened (period separated) string
354
+ def un_flatten
355
+
356
+ segment_array = self.strip.split "."
357
+ resurrected_arr = Array.new
358
+
359
+ segment_array.each do |seg_word|
360
+ resurrected_arr.push seg_word.capitalize
361
+ end
362
+
363
+ undone_str = resurrected_arr.join
364
+ log.info(x){ "unflattening => [#{self}] and resurrecting to => [#{undone_str}]" }
365
+
366
+ return undone_str
367
+
368
+ end
369
+
370
+
371
+
372
+ # --
373
+ # Return true if the [little string] within this
374
+ # string object is both
375
+ # --
376
+ # a] topped by the parameter prefix AND
377
+ # b] tailed by the parameter postfix
378
+ # --
379
+ # -----------------------------------------
380
+ # In the below example [true] is returned
381
+ # -----------------------------------------
382
+ # --
383
+ # This [String] => "Hey [<-secrets->] are juicy."
384
+ # little string => "secrets"
385
+ # topped string => "[<-"
386
+ # tailed string => "->]"
387
+ # --
388
+ # Why true? Because the little string "secret" is
389
+ # (wrapped) topped by "[<-" and tailed by "->]"
390
+ # --
391
+ # -----------------------------------------
392
+ # Assumptions | Constraints | Boundaries
393
+ # -----------------------------------------
394
+ # --
395
+ # - all matches are [case sensitive]
396
+ # - this string must contain little_str
397
+ # - one strike and its true
398
+ # (if little string appears more than once)
399
+ # so => "all secrets, most [<-secrets->] r juicy"
400
+ # => true as long as (at least) one is wrapped
401
+ # --
402
+ # --
403
+ def has_wrapped? little_str, prefix, postfix
404
+
405
+ return self.include?( prefix + little_str + postfix )
406
+
407
+ end
408
+
409
+
410
+ # Sandwich the first occurrence of a substring in
411
+ # this string with the specified pre and postfix.
412
+ #
413
+ # This string contains the little string and an
414
+ # IN-PLACE change is performed with the first
415
+ # occurrence of the little string being prefixed
416
+ # and postfixed with the 2 parameter strings.
417
+ #
418
+ # Example of sandwiching [wrapping]
419
+ #
420
+ # - [String] => "Hey secrets are juicy."
421
+ # - [To_Wrap] => "secrets"
422
+ # - [Prefix] => "[<-"
423
+ # - [Postfix] => "->]"
424
+ #
425
+ # [String] => "Hey [<-secrets->] are juicy."
426
+ #
427
+ # This string IS changed in place.
428
+ def sandwich_substr to_wrap_str, prefix, postfix
429
+
430
+ occurs_index = self.downcase.index to_wrap_str.downcase
431
+ self.insert occurs_index, prefix
432
+ shifted_index = occurs_index + prefix.length + to_wrap_str.length
433
+ self.insert shifted_index, postfix
434
+
435
+ end
436
+
437
+
438
+ # The parameter is a list of character sequences and TRUE is returned
439
+ # if EVERY ONE of the character sequences is always found nestled somewhere
440
+ # within this string. The matching is case-sensitive.
441
+ #
442
+ # The parameter array can be [empty] but not nil. And the harboured
443
+ # character sequences can neither be nil nor empty.
444
+ #
445
+ # @param word_array [Array] array of string words for the inclusivity test
446
+ #
447
+ # @return [Boolean] true if EVERY ONE of the char sequences appear somewhere in this string
448
+ def includes_all? word_array
449
+
450
+ raise ArgumentError, "This string is NIL" if self.nil?
451
+ raise ArgumentError, "The parameter word array is NIL" if word_array.nil?
452
+
453
+ word_array.each do |word|
454
+
455
+ raise ArgumentError, "The word array #{word_array} contains a nil value." if word.nil?
456
+ return false unless self.include? word
457
+
458
+ end
459
+
460
+ return true
461
+
462
+ end
463
+
464
+
465
+ # The parameter is a list of character sequences and TRUE is returned
466
+ # if any one of the character sequences can be found nestled somewhere
467
+ # within this string. The matching is case-sensitive.
468
+ #
469
+ # The parameter array can be [empty] but not nil. And the harboured
470
+ # character sequences can neither be nil nor empty.
471
+ #
472
+ # @param word_array [Array] array of string words for the inclusivity test
473
+ #
474
+ # @return [Boolean] true if string includes ANY one of the character sequences in array
475
+ def includes_any? word_array
476
+
477
+ raise ArgumentError, "This string is NIL" if self.nil?
478
+ raise ArgumentError, "The parameter word array is NIL" if word_array.nil?
479
+
480
+ word_array.each do |word|
481
+
482
+ raise ArgumentError, "The word array #{word_array} contains a nil value." if word.nil?
483
+ return true if self.include? word
484
+
485
+ end
486
+
487
+ return false
488
+
489
+ end
490
+
491
+
492
+ # --
493
+ # Encrypt this string with the parameter encryption/decryption key
494
+ # and return the encrypted text as a new string.
495
+ # --
496
+ # decrypt_key => the key that will decrypt the output string
497
+ # --
498
+ # --
499
+ def encrypt decrypt_key
500
+
501
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
502
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
503
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
504
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
505
+
506
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
507
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
508
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
509
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
510
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
511
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
512
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
513
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
514
+
515
+ cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC').encrypt
516
+ cipher.key = Digest::SHA1.hexdigest decrypt_key
517
+ crypted = cipher.update(self) + cipher.final
518
+ encrypted_text = crypted.unpack('H*')[0].upcase
519
+
520
+ return encrypted_text
521
+
522
+ end
523
+
524
+
525
+ # --
526
+ # Decrypt this string with the parameter encryption/decryption key
527
+ # and return the decrypted text as a new string.
528
+ # --
529
+ # encrypt_key => the key the input string was encrypted with
530
+ # --
531
+ # --
532
+ def decrypt encrypt_key
533
+
534
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
535
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
536
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
537
+ ## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
538
+
539
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
540
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
541
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
542
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
543
+ ###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
544
+ ###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
545
+
546
+ cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC').decrypt
547
+ cipher.key = Digest::SHA1.hexdigest encrypt_key
548
+ uncrypted = [self].pack("H*").unpack("C*").pack("c*")
549
+ decrypted_text = cipher.update(uncrypted) + cipher.final
550
+
551
+ return decrypted_text
552
+
553
+ end
554
+
555
+
556
+ # Log the string which is expected to be delineated.
557
+ # If the string originated from a file it will be logged
558
+ # line by line. If no line delineation the string will be
559
+ # dumped just as a blob.
560
+ #
561
+ # The INFO log level is used to log the lines - if this is not
562
+ # appropriate create a (level) parameterized log lines method.
563
+ def log_lines
564
+
565
+ self.each_line do |line|
566
+ clean_line = line.chomp.gsub("\\n","")
567
+ log.info(x) { line } if clean_line.length > 0
568
+ end
569
+
570
+ end
571
+
572
+ end
@@ -0,0 +1,38 @@
1
+
2
+ [global]
3
+
4
+ name = safe
5
+ min.passwd.len = rb>> 6
6
+ root.domain = devopswiki.co.uk
7
+ env.var.name = SECRET_MATERIAL
8
+ ratio = rb>> 3
9
+ bit.key.size = rb>> 8192
10
+ key.cipher = rb>> OpenSSL::Cipher::AES256.new(:CBC)
11
+
12
+ domain.now.id = current.domain
13
+ front.path.id = frontend.path
14
+ machine.key.id = machine.p4ssk3y
15
+ time.stamp.id = domain.stamp
16
+ user.secret.id = user.secret
17
+
18
+ stamp.14 = rb>> OpenSession::Stamp.yyjjj_hhmm_sst
19
+ stamp.23 = rb>> OpenSession::Stamp.yyjjj_hhmm_ss_nanosec
20
+
21
+ separator.a = %$os$%
22
+
23
+ repo.name = material_data
24
+ config.file = ops.workstation.directive.ini
25
+ session.file = ops.session.configuration.ini
26
+
27
+ prompt.1 = Enter a Robust Password
28
+ prompt.2 = Re-enter that Password
29
+
30
+
31
+ [open]
32
+
33
+ open.name = session
34
+ open.idlen = rb>> 10
35
+ open.keylen = rb>> 56
36
+ open.idname = session.id
37
+ open.keyname = session.key
38
+ open.pathname = session.path