base_convert 7.0.221226 → 7.1.221229

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: '0468363560e386197373265ab15994e9f75b97965f01fd7c7d039ba659fb9e5d'
4
- data.tar.gz: e22bdb75673cb9e2bedc6edd7c7dd1349234ff8709b77b7e1159e74b79b37975
3
+ metadata.gz: e62555a1cac5c3cc428ae0f52eb84cbbd70fc787ab993f8701da0afbef33e294
4
+ data.tar.gz: e6aa7f64c059deaffea59fe4afb4b5451528e12647faeedfac3cc6dad4209075
5
5
  SHA512:
6
- metadata.gz: 6dfa9704f01b5145bdb9ad4070d59aa4027dafcb8431fd24c42134d861475f33c97a3db30549c606dffd60acdca15768211abac2b648ee6de147481038f405cc
7
- data.tar.gz: '0948eea3537cc52a521d633c68aa6a4121646bfe20af41e3d11ca902a8cb3f814468ad022c8b5879726de4c24bf4433dbb88b9fc690f53d03d33a0a4bc0c1e52'
6
+ metadata.gz: afcde575138364982a1f4fd77a677434bbf5e1fc54d035d11386cd28d271c664a05e02dc24c3faea0b60b07c4dfaa6a01c1a6e8ea3bce90ccd84f9da4050a9b9
7
+ data.tar.gz: 2efec8ea4e321658c83416f68de75e37b13ae1d341f4a762645808eba08c02e2c1edf90082404a596983149c90d60c4950388588b0b5ee365f027c8d9e62a121
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # BaseConvert
2
2
 
3
- * [VERSION 7.0.221226](https://github.com/carlosjhr64/base_convert/releases)
3
+ * [VERSION 7.1.221229](https://github.com/carlosjhr64/base_convert/releases)
4
4
  * [github](https://www.github.com/carlosjhr64/base_convert)
5
5
  * [rubygems](https://rubygems.org/gems/base_convert)
6
6
 
@@ -217,6 +217,23 @@ c = b.to_base(64, :B64)
217
217
  c #=> // 64:B64
218
218
  c.to_i #=> 4095
219
219
  ```
220
+ ### class Entropia
221
+
222
+ A quick way to generate passwords.
223
+ ```ruby
224
+ include BaseConvert
225
+ e = Entropia.new
226
+ e.inspect #~> ^.{39} 95:P95$
227
+ e.to_s #~> ^.{39}$
228
+ e.length #=> 39
229
+ e.bits #=> 256.224368724907
230
+ require 'securerandom'
231
+ e = Entropia.new base: 16, bits: 32, rng: SecureRandom
232
+ e.inspect #~> ^\h{8} 16:P95$
233
+ e.to_s #~> ^\h{8}$
234
+ e.length #=> 8
235
+ e.bits #=> 32.0
236
+ ```
220
237
  ## LICENSE:
221
238
 
222
239
  (The MIT License)
@@ -0,0 +1,27 @@
1
+ module BaseConvert
2
+ class Entropia < Number
3
+ def Entropia.bits_length_entropy(bits_request, base)
4
+ n,e,entropy = 0,1,2**bits_request
5
+ while e < entropy
6
+ n += 1
7
+ e *= base
8
+ end
9
+ b=Math.log(e,2)
10
+ # Actual bits, length, and entropy
11
+ return b,n,e
12
+ end
13
+
14
+ attr_reader :bits, :length, :entropy
15
+ def initialize(counter=nil, base: 95, digits: :P95, validate: true,
16
+ bits: 256, rng: Random)
17
+ @bits,@length,@entropy = Entropia.bits_length_entropy(bits,base)
18
+ counter = rng.random_number(@entropy) unless counter
19
+ super(counter, base:base, digits:digits, validate:validate)
20
+ end
21
+
22
+ def to_s
23
+ (@length - (string=tos).length).times{string.prepend self.digits[0]}
24
+ return string
25
+ end
26
+ end
27
+ end
@@ -7,7 +7,9 @@ class FromTo
7
7
  to_base = BASE[to_base]
8
8
  digits = DIGITS[digits]
9
9
  to_digits = DIGITS[to_digits]
10
- raise 'base must cover digits' if base > digits.length or to_base > to_digits.length
10
+ if base > digits.length or to_base > to_digits.length
11
+ raise 'base must cover digits'
12
+ end
11
13
  @base, @to_base, @digits, @to_digits = base, to_base, digits, to_digits
12
14
  end
13
15
 
@@ -35,7 +35,7 @@ class Number
35
35
  when String
36
36
  string = counter
37
37
  if base.nil? and digits.nil?
38
- base, digits = Number.infer(counter, error:'need digits to cover string')
38
+ base,digits = Number.infer(counter, error:'need digits to cover string')
39
39
  end
40
40
  when Integer
41
41
  @integer = counter
@@ -56,12 +56,12 @@ class Number
56
56
  raise 'digits must cover base' if @base > @digits.length
57
57
  unless string.nil? or string.empty?
58
58
  indeces = string.chars.map{@digits.index _1}
59
- if missing = indeces.any?{_1.nil?} or exceeding = indeces.any?{_1>=@base}
59
+ if missing=indeces.any?{_1.nil?} or exceeding=indeces.any?{_1>=@base}
60
60
  if @base <= INDEXa and DIGITS[:P95].start_with?(@digits)
61
61
  # User ignored case, so fix it...
62
62
  string = string.upcase
63
63
  indeces = string.chars.map{@digits.index _1}
64
- missing = indeces.any?{_1.nil?} or exceeding = indeces.any?{_1>=@base}
64
+ missing=indeces.any?{_1.nil?} or exceeding=indeces.any?{_1>=@base}
65
65
  end
66
66
  raise 'digits must cover string' if missing
67
67
  raise 'digits in string must be under base' if exceeding
@@ -84,7 +84,9 @@ class Number
84
84
  alias to_s tos
85
85
  def to_i = @integer
86
86
 
87
- def to_base(base, digits=(base.is_a?Symbol)? DIGITS[base] : @digits, validate=@validate)
87
+ def to_base(base,
88
+ digits = (base.is_a?Symbol)? DIGITS[base] : @digits,
89
+ validate = @validate)
88
90
  Number.new @integer, base: base, digits: digits, validate: validate
89
91
  end
90
92
 
data/lib/base_convert.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  module BaseConvert
2
- VERSION = '7.0.221226'
3
- autoload :Methods, 'base_convert/methods.rb'
4
- autoload :Chars, 'base_convert/chars.rb'
5
- autoload :DIGITS, 'base_convert/digits.rb'
6
- autoload :BASE, 'base_convert/base.rb'
7
- autoload :FromTo, 'base_convert/from_to.rb'
8
- autoload :Number, 'base_convert/number.rb'
2
+ VERSION = '7.1.221229'
3
+ autoload :Methods, 'base_convert/methods.rb'
4
+ autoload :Chars, 'base_convert/chars.rb'
5
+ autoload :DIGITS, 'base_convert/digits.rb'
6
+ autoload :BASE, 'base_convert/base.rb'
7
+ autoload :FromTo, 'base_convert/from_to.rb'
8
+ autoload :Number, 'base_convert/number.rb'
9
+ autoload :Entropia, 'base_convert/entropia.rb'
9
10
  end
10
11
  #`ruby`
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: base_convert
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.221226
4
+ version: 7.1.221229
5
5
  platform: ruby
6
6
  authors:
7
7
  - CarlosJHR64
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-26 00:00:00.000000000 Z
11
+ date: 2022-12-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  BaseConvert - Number base conversion.
@@ -27,6 +27,7 @@ files:
27
27
  - lib/base_convert/base.rb
28
28
  - lib/base_convert/chars.rb
29
29
  - lib/base_convert/digits.rb
30
+ - lib/base_convert/entropia.rb
30
31
  - lib/base_convert/from_to.rb
31
32
  - lib/base_convert/methods.rb
32
33
  - lib/base_convert/number.rb