aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-08 06:12:49 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-08 06:12:49 +0000
commitbfe90639909626c30a81e8fcee209e341b57d3e2 (patch)
tree745233a001a793a5835c54e81d6dc0f9bda1bec6 /lib
parent4d436328524b23cfd446191cb391f17450a872a0 (diff)
downloadruby-bfe90639909626c30a81e8fcee209e341b57d3e2.tar.gz
documented.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/secrand.rb61
1 files changed, 60 insertions, 1 deletions
diff --git a/lib/secrand.rb b/lib/secrand.rb
index 8f7bbc6007..b0d71c6c77 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)