super_random 0.2.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: fe0ff8729b4ec1ccc1489a0e635af6ef4421eed3
4
- data.tar.gz: c0cff9c045171675ab1ef636ad8c8ff97ae19039
3
+ metadata.gz: e6d36ed17afa6309e19fc5f03562748be1916766
4
+ data.tar.gz: 897db2d0dace060590a2b7377589e1d8f9fc6dfc
5
5
  SHA512:
6
- metadata.gz: 94ccac76a408b124f551791936025a6337087681ebe75fd5e5144277c0327935c7adc03459e99573dc5b4c7e7761d816e7651b1448cbd1f6edd593bf02d108ac
7
- data.tar.gz: aeb3acbde5838334a4161cb0bde13cd32186e4ea3bd8bf9c039a00f20d66f55b1b08661b7af8ed27e8b3df0fd92e4f1d1d6440c197111fd25f2651d2eff7f0ef
6
+ metadata.gz: 012f6e01c1376b9731e0be3c92b623fd8ad23a5cbb17278c7892292a17979f1703135999f57e48957ca6c0df4dac338839b7f344016db8ec70af748182e0dc6d
7
+ data.tar.gz: 97f7b95fcf20cfb4288e22a1af2863bb0972b45b8736c293d84add8d4c9d41f84df142fd681e7d86c3298fab595832b8eb00dc35bee3e9edc8f10a2bd2efef76
@@ -6,7 +6,7 @@
6
6
 
7
7
  You can't get more random than random, but you can try really, really, really hard.
8
8
 
9
- SuperRandom combines RealRand's three online real random services to create a more perfect random byte.
9
+ SuperRandom combines four online real random services to create a more perfect random byte.
10
10
 
11
11
  == SYNOPSIS:
12
12
 
@@ -36,7 +36,7 @@ SuperRandom combines RealRand's three online real random services to create a mo
36
36
 
37
37
  (The MIT License)
38
38
 
39
- Copyright (c) 2014 carlosjhr64
39
+ Copyright (c) 2017 carlosjhr64
40
40
 
41
41
  Permission is hereby granted, free of charge, to any person obtaining
42
42
  a copy of this software and associated documentation files (the
@@ -1,12 +1,14 @@
1
+ class SuperRandom
2
+ VERSION = '1.0.0'
3
+ end
4
+
1
5
  # Standard Libraries
2
6
  require 'timeout'
3
7
  require 'securerandom'
4
-
5
- # Helper Gem
6
- require 'random/online'
8
+ require 'net/http'
9
+ require 'json'
7
10
 
8
11
  # This Gem
9
- require 'super_random/version.rb'
10
12
  require 'super_random/super_random.rb'
11
13
 
12
14
  # Requires:
@@ -1,9 +1,49 @@
1
1
  class SuperRandom
2
2
 
3
- def self.randbyte(r,n,s='randbyte')
4
- return r.randbyte[0..n]
5
- rescue Exception
6
- warn "RealRand's #{s} failed."
3
+ def self.quantum(n)
4
+ s = Net::HTTP.get(URI(
5
+ "https://qrng.anu.edu.au/API/jsonI.php?length=#{n}&type=uint8"))
6
+ a = JSON.parse(s)['data']
7
+ raise unless a.is_a?(Array) and a.length==n
8
+ raise unless a.all?{|i| i.is_a?(Integer) and i>-1 and i<256}
9
+ return a
10
+ rescue StandardError
11
+ warn "quantum (qrng.anu.edu.au) failed."
12
+ return nil
13
+ end
14
+
15
+ def self.atmospheric(n)
16
+ s = Net::HTTP.get(URI(
17
+ "https://www.random.org/integers/?num=#{n}&min=0&max=255&col=1&base=10&format=plain&rnd=new"))
18
+ a = s.strip.split(/\s+/).map{|j|j.to_i}
19
+ raise unless a.length==n
20
+ raise unless a.all?{|i| i>-1 and i<256}
21
+ return a
22
+ rescue StandardError
23
+ warn "atmospheric (www.random.org) failed."
24
+ return nil
25
+ end
26
+
27
+ def self.entropy_pool(n)
28
+ s = Net::HTTP.get(URI(
29
+ "http://random.hd.org/getBits.jsp?numBytes=#{n}&type=bin"))
30
+ a = s.bytes
31
+ # As of the time of this writting, not guaranteed to get more than 8 bytes.
32
+ raise unless (n>8)? a.length.between?(8,n) : a.length==n
33
+ return a
34
+ rescue StandardError
35
+ warn "entropy_pool (random.hd.org) failed."
36
+ return nil
37
+ end
38
+
39
+ def self.hotbits(n, k='Pseudorandom')
40
+ s = Net::HTTP.get(URI(
41
+ "https://www.fourmilab.ch/cgi-bin/Hotbits.api?nbytes=#{n}&fmt=bin&apikey=#{k}"))
42
+ a = s.bytes
43
+ raise unless a.length==n
44
+ return a
45
+ rescue StandardError
46
+ warn "hotbits (www.fourmilab.ch) failed."
7
47
  return nil
8
48
  end
9
49
 
@@ -22,27 +62,25 @@ class SuperRandom
22
62
  @randomness = 0.0
23
63
  @services = 0
24
64
 
25
- r1 = RealRand::RandomOrg.new
26
- r2 = RealRand::EntropyPool.new
27
- r3 = RealRand::FourmiLab.new
28
-
29
- a1 = a2 = a3 = nil
65
+ a1 = a2 = a3 = a4 = nil
30
66
 
31
- t1 = Thread.new{ a1 = SuperRandom.randbyte(r1,n,'RandomOrg') }
32
- t2 = Thread.new{ a2 = SuperRandom.randbyte(r2,n,'EntropyPool') }
33
- t3 = Thread.new{ a3 = SuperRandom.randbyte(r3,n,'FourmiLab') }
67
+ t1 = Thread.new{ a1 = SuperRandom.quantum(n)}
68
+ t2 = Thread.new{ a2 = SuperRandom.atmospheric(n)}
69
+ t3 = Thread.new{ a3 = SuperRandom.entropy_pool(n)}
70
+ t4 = Thread.new{ a4 = SuperRandom.hotbits(n)}
34
71
 
35
72
  begin
36
73
  Timeout.timeout(@first_timeout) do
37
74
  # Initially, would like to get them all.
38
- t1.join and t2.join and t3.join
75
+ t1.join and t2.join and t3.join and t4.join
39
76
  end
40
77
  rescue Timeout::Error
41
78
  begin
42
79
  Timeout.timeout(@second_timeout) do
43
80
  # But at this point,
44
81
  # would like to get at least one.
45
- while a1.nil? and a2.nil? and a3.nil? and (t1.alive? or t2.alive? or t3.alive?)
82
+ while a1.nil? and a2.nil? and a3.nil? and a4.nil?
83
+ (t1.alive? or t2.alive? or t3.alive? or t4.alive?)
46
84
  Thread.pass
47
85
  end
48
86
  end
@@ -53,7 +91,7 @@ class SuperRandom
53
91
  end
54
92
 
55
93
  a = n.times.inject([]){|b,i|b.push(SecureRandom.random_number(256))}
56
- [a1, a2, a3].each do |b|
94
+ [a1, a2, a3, a4].each do |b|
57
95
  if b
58
96
  bl = b.length
59
97
  @randomness += bl.to_f/n.to_f
metadata CHANGED
@@ -1,39 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: super_random
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - carlosjhr64
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-13 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: realrand
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 2.0.2
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '2.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 2.0.2
11
+ date: 2017-08-22 00:00:00.000000000 Z
12
+ dependencies: []
33
13
  description: |
34
14
  You can't get more random than random, but you can try really, really, really hard.
35
15
 
36
- SuperRandom combines RealRand's three online real random services to create a more perfect random byte.
16
+ SuperRandom combines four online real random services to create a more perfect random byte.
37
17
  email: carlosjhr64@gmail.com
38
18
  executables: []
39
19
  extensions: []
@@ -43,7 +23,6 @@ files:
43
23
  - README.rdoc
44
24
  - lib/super_random.rb
45
25
  - lib/super_random/super_random.rb
46
- - lib/super_random/version.rb
47
26
  homepage: https://github.com/carlosjhr64/super_random
48
27
  licenses:
49
28
  - MIT
@@ -65,9 +44,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
44
  - !ruby/object:Gem::Version
66
45
  version: '0'
67
46
  requirements:
68
- - 'ruby: ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]'
47
+ - 'ruby: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]'
69
48
  rubyforge_project:
70
- rubygems_version: 2.5.2
49
+ rubygems_version: 2.6.11
71
50
  signing_key:
72
51
  specification_version: 4
73
52
  summary: You can't get more random than random, but you can try really, really, really
@@ -1,3 +0,0 @@
1
- class SuperRandom
2
- VERSION = '0.2.0'
3
- end