lib/securer_randomer.rb in securer_randomer-0.1.4 vs lib/securer_randomer.rb in securer_randomer-0.1.5
- old
+ new
@@ -1,69 +1,11 @@
# frozen_string_literal: true
+require 'securerandom'
+
require 'rbnacl/sodium'
require 'rbnacl/util'
require 'rbnacl/random'
require 'securer_randomer/version'
+require 'securer_randomer/rand'
require 'securer_randomer/monkeypatch/secure_random'
-
-module SecurerRandomer
- def self.kernel_rand(max = 0)
- rand(max, true)
- end
-
- def self.rand(n = 0, emulate_kernel = false)
- if n.is_a?(Range)
- raise TypeError, 'no implicit conversion of Range into Fixnum' \
- unless n.begin.is_a?(Numeric) and n.end.is_a?(Numeric)
-
- if n.end < n.begin
- if emulate_kernel
- nil
- else
- m = Range.new(n.end, n.begin, false)
-
- while true # TODO: better way to do this than looping?
- q = _rand_range(m)
-
- break q unless n.exclude_end? and q == n.end
- end
- end
- elsif n.begin == n.end and n.exclude_end?
- nil
- else
- _rand_range(n)
- end
- else
- raise TypeError, "no implicit conversion of #{n.class} into Fixnum" \
- unless n.nil? or n.is_a?(Numeric)
-
- if n.nil? or n.zero?
- _randex
- elsif emulate_kernel
- _rand_range(Range.new(0, n.to_i.abs, true))
- else
- _rand_range(Range.new(0, n.abs, true)) * (n < 0 ? -1 : 1)
- end
- end
- end
-
- def self._randex
- i64 = RbNaCl::Random.random_bytes(8).unpack('Q').first
- Math.ldexp(i64 >> (64 - Float::MANT_DIG), -Float::MANT_DIG)
- end
-
- def self._randin
- _randex >= 0.5 ? 1 - _randex : _randex
- end
-
- def self._rand_range(n)
- n.begin + if n.end.is_a?(Float) or n.begin.is_a?(Float)
- (n.exclude_end? ? _randex : _randin) * (n.end - n.begin)
- else
- (_randex * (n.end - n.begin + (n.exclude_end? ? 0 : 1))).to_i
- end
- end
-
- private_class_method(:_randex, :_randin, :_rand_range) if respond_to?(:private_class_method)
-end