require_relative 'provider' module GcryptoJce module SecureRandom def generate(opts = { }) eng = opts[:type] || "SHA1PRNG" prov = GcryptoJce::Provider.handle_options(opts, nil) if prov.nil? sr = java.security.SecureRandom.getInstance(eng) else sr = java.security.SecureRandom.getInstance(eng, prov) end byteLen = opts[:byteLen] hexLen = opts[:hexLen] intLen = opts[:intLen] if not byteLen.nil? and byteLen.to_i > 0 b = Java::byte[byteLen].new sr.nextBytes(b) b elsif not hexLen.nil? and hexLen.to_i > 0 b = Java::byte[hexLen*2].new sr.nextBytes(b) String.from_java_bytes(org.bouncycastle.util.encoders.Hex.encode(b)) elsif not intLen.nil? and intLen.to_i > 0 sr.nextInt else b = Java::byte[32].new sr.nextBytes(b) b end end # end generate end # end SecureRandom class SecureRandomEngine extend SecureRandom end end