lib/compat/securerandom.rb in uuidtools-1.0.6 vs lib/compat/securerandom.rb in uuidtools-1.0.7

- old
+ new

@@ -158,16 +158,19 @@ def self.random_number(n=0) if 0 < n hex = n.to_s(16) hex = '0' + hex if (hex.length & 1) == 1 bin = [hex].pack("H*") - mask = bin[0].ord + first = bin[0..0] + mask = first.respond_to?(:ord) ? first.ord : first.sum(8) mask |= mask >> 1 mask |= mask >> 2 mask |= mask >> 4 begin rnd = SecureRandom.random_bytes(bin.length) - rnd[0] = (rnd[0].ord & mask).chr + first = rnd[0..0] + ordinal = first.respond_to?(:ord) ? first.ord : first.sum(8) + rnd[0..0] = (ordinal & mask).chr end until rnd < bin rnd.unpack("H*")[0].hex else # assumption: Float::MANT_DIG <= 64 i64 = SecureRandom.random_bytes(8).unpack("Q")[0]