base_convert 7.0.221226 → 7.1.221229

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