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 +4 -4
- data/README.md +18 -1
- data/lib/base_convert/entropia.rb +27 -0
- data/lib/base_convert/from_to.rb +3 -1
- data/lib/base_convert/number.rb +6 -4
- data/lib/base_convert.rb +8 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e62555a1cac5c3cc428ae0f52eb84cbbd70fc787ab993f8701da0afbef33e294
|
4
|
+
data.tar.gz: e6aa7f64c059deaffea59fe4afb4b5451528e12647faeedfac3cc6dad4209075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
data/lib/base_convert/from_to.rb
CHANGED
@@ -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
|
-
|
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
|
|
data/lib/base_convert/number.rb
CHANGED
@@ -35,7 +35,7 @@ class Number
|
|
35
35
|
when String
|
36
36
|
string = counter
|
37
37
|
if base.nil? and digits.nil?
|
38
|
-
base,
|
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
|
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
|
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,
|
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.
|
3
|
-
autoload :Methods,
|
4
|
-
autoload :Chars,
|
5
|
-
autoload :DIGITS,
|
6
|
-
autoload :BASE,
|
7
|
-
autoload :FromTo,
|
8
|
-
autoload :Number,
|
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.
|
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-
|
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
|