module OpenID::CryptUtil
This module contains everything needed to perform low-level cryptograph and data manipulation tasks.
Public Class Methods
Decode a base64 byte string to a number.
# File lib/openid/cryptutil.rb, line 100 def CryptUtil.base64_to_num(s) return binary_to_num(OpenID::Util.from_base64(s)) end
Convert a string of bytes into a number.
# File lib/openid/cryptutil.rb, line 83 def CryptUtil.binary_to_num(s) # taken from openid-ruby 0.0.1 s = "\000" * (4 - (s.length % 4)) + s num = 0 s.unpack('N*').each do |x| num <<= 32 num |= x end return num end
# File lib/openid/cryptutil.rb, line 104 def CryptUtil.const_eq(s1, s2) if s1.length != s2.length return false end result = true s1.length.times do |i| result &= (s1[i] == s2[i]) end return result end
# File lib/openid/cryptutil.rb, line 39 def CryptUtil.hmac_sha1(key, text) if defined? OpenSSL OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, key, text) else return HMAC::SHA1.digest(key, text) end end
# File lib/openid/cryptutil.rb, line 51 def CryptUtil.hmac_sha256(key, text) if defined? OpenSSL OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, key, text) else return HMAC::SHA256.digest(key, text) end end
Encode a number as a base64-encoded byte string.
# File lib/openid/cryptutil.rb, line 95 def CryptUtil.num_to_base64(l) return OpenID::Util.to_base64(num_to_binary(l)) end
Convert a number to its binary representation; return a string of bytes.
# File lib/openid/cryptutil.rb, line 75 def CryptUtil.num_to_binary(n) bits = n.to_s(2) prepend = (8 - bits.length % 8) bits = ('0' * prepend) + bits return [bits].pack('B*') end
Generate a random number, doing a little extra work to make it more likely that it's suitable for cryptography. If your system doesn't have /dev/urandom then this number is not cryptographically safe. See <www.cosine.org/2007/08/07/security-ruby-kernel-rand/> for more information. max is the largest possible value of such a random number, where the result will be less than max.
# File lib/openid/cryptutil.rb, line 30 def CryptUtil.rand(max) Kernel.srand() return Kernel.rand(max) end
Generate a random string of the given length, composed of the specified characters. If chars is nil, generate a string composed of characters in the range 0..255.
# File lib/openid/cryptutil.rb, line 62 def CryptUtil.random_string(length, chars=nil) s = "" unless chars.nil? length.times { s << chars[rand(chars.length)] } else length.times { s << rand(256).chr } end return s end
# File lib/openid/cryptutil.rb, line 35 def CryptUtil.sha1(text) return Digest::SHA1.digest(text) end
# File lib/openid/cryptutil.rb, line 47 def CryptUtil.sha256(text) return Digest::SHA256.digest(text) end