diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-08 06:12:49 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-08 06:12:49 +0000 |
commit | ce652c27ebeb727ae4f6316efd3ca288ed44dea1 (patch) | |
tree | 745233a001a793a5835c54e81d6dc0f9bda1bec6 /lib | |
parent | 7c68fd2e8a71e3135f8af231be55795ddfdf523d (diff) | |
download | ruby-ce652c27ebeb727ae4f6316efd3ca288ed44dea1.tar.gz ruby-ce652c27ebeb727ae4f6316efd3ca288ed44dea1.tar.xz ruby-ce652c27ebeb727ae4f6316efd3ca288ed44dea1.zip |
documented.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@12478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/secrand.rb | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/lib/secrand.rb b/lib/secrand.rb index 8f7bbc600..b0d71c6c7 100644 --- a/lib/secrand.rb +++ b/lib/secrand.rb @@ -1,9 +1,48 @@ +# = Secure random number generator interface. +# +# This library is a interface for secure random number generator which is +# suitable for HTTP cookies, etc. +# +# It supports following secure random number generators. +# +# * openssl +# * /dev/urandom +# +# == Example +# +# # random hexadecimal string. +# p SecRand.hex(10) #=> "52750b30ffbc7de3b362" +# p SecRand.hex(10) #=> "92b15d6c8dc4beb5f559" +# p SecRand.hex(11) #=> "6aca1b5c58e4863e6b81b8" +# p SecRand.hex(12) #=> "94b2fff3e7fd9b9c391a2306" +# p SecRand.hex(13) #=> "39b290146bea6ce975c37cfc23" +# +# # random base64 string. +# p SecRand.base64(10) #=> "EcmTPZwWRAozdA==" +# p SecRand.base64(10) #=> "9b0nsevdwNuM/w==" +# p SecRand.base64(10) #=> "KO1nIU+p9DKxGg==" +# p SecRand.base64(11) #=> "l7XEiFja+8EKEtY=" +# p SecRand.base64(12) #=> "7kJSM/MzBJI+75j8" +# p SecRand.base64(13) #=> "vKLJ0tXBHqQOuIcSIg==" +# ... +# +# # random binary string. +# p SecRand.random_bytes(10) #=> "\016\t{\370g\310pbr\301" +# p SecRand.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337" +# ... + begin require 'openssl' rescue LoadError end module SecRand + # SecRand.random_bytes generates a random binary string. + # + # The argument n specifies the length of the result string. + # + # If secure random number generator is not available, + # NotImplementedError is raised. def self.random_bytes(n=nil) n ||= 16 if defined? OpenSSL::Random @@ -34,16 +73,36 @@ module SecRand raise NotImplementedError, "No random device" end + # SecRand.hex generates a random hex string. + # + # The argument n specifies the length of the random length. + # The length of the result string is twice of n. + # + # If secure random number generator is not available, + # NotImplementedError is raised. def self.hex(n=nil) random_bytes(n).unpack("H*")[0] end + # SecRand.base64 generates a random base64 string. + # + # The argument n specifies the length of the random length. + # The length of the result string is about 4/3 of n. + # + # If secure random number generator is not available, + # NotImplementedError is raised. def self.base64(n=nil) [random_bytes(n)].pack("m*").delete("\n") end - end +# SecRand() generates a random number. +# +# If an positive integer is given as n, +# SecRand() returns an integer: 0 <= SecRand(n) < n. +# +# If 0 is given or an argument is not given, +# SecRand() returns an float: 0.0 <= SecRand() < 1.0. def SecRand(n=0) if 0 < n hex = n.to_s(16) |