Module: OpenID::CryptUtil
- Defined in:
- lib/openid/cryptutil.rb
Overview
This module contains everything needed to perform low-level cryptograph and data manipulation tasks.
Class Method Summary collapse
-
.base64_to_num(s) ⇒ Object
Decode a base64 byte string to a number.
-
.binary_to_num(s) ⇒ Object
Convert a string of bytes into a number.
- .const_eq(s1, s2) ⇒ Object
- .hmac_sha1(key, text) ⇒ Object
- .hmac_sha256(key, text) ⇒ Object
-
.num_to_base64(l) ⇒ Object
Encode a number as a base64-encoded byte string.
-
.num_to_binary(n) ⇒ Object
Convert a number to its binary representation; return a string of bytes.
-
.rand(max) ⇒ Object
Generate a random number, doing a little extra work to make it more likely that it’s suitable for cryptography.
-
.random_string(length, chars = nil) ⇒ Object
Generate a random string of the given length, composed of the specified characters.
- .sha1(text) ⇒ Object
- .sha256(text) ⇒ Object
Class Method Details
.base64_to_num(s) ⇒ Object
Decode a base64 byte string to a number.
100 101 102 |
# File 'lib/openid/cryptutil.rb', line 100 def CryptUtil.base64_to_num(s) return binary_to_num(OpenID::Util.from_base64(s)) end |
.binary_to_num(s) ⇒ Object
Convert a string of bytes into a number.
83 84 85 86 87 88 89 90 91 92 |
# 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 |
.const_eq(s1, s2) ⇒ Object
104 105 106 107 108 109 110 111 112 113 |
# 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 |
.hmac_sha1(key, text) ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/openid/cryptutil.rb', line 39 def CryptUtil.hmac_sha1(key, text) if Digest.const_defined? :HMAC Digest::HMAC.new(key,Digest::SHA1).update(text).digest else return HMAC::SHA1.digest(key, text) end end |
.hmac_sha256(key, text) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/openid/cryptutil.rb', line 51 def CryptUtil.hmac_sha256(key, text) if Digest.const_defined? :HMAC Digest::HMAC.new(key,Digest::SHA256).update(text).digest else return HMAC::SHA256.digest(key, text) end end |
.num_to_base64(l) ⇒ Object
Encode a number as a base64-encoded byte string.
95 96 97 |
# File 'lib/openid/cryptutil.rb', line 95 def CryptUtil.num_to_base64(l) return OpenID::Util.to_base64(num_to_binary(l)) end |
.num_to_binary(n) ⇒ Object
Convert a number to its binary representation; return a string of bytes.
75 76 77 78 79 80 |
# 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 |
.rand(max) ⇒ Object
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.
30 31 32 33 |
# File 'lib/openid/cryptutil.rb', line 30 def CryptUtil.rand(max) Kernel.srand() return Kernel.rand(max) end |
.random_string(length, chars = nil) ⇒ Object
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.
62 63 64 65 66 67 68 69 70 71 |
# 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 |
.sha1(text) ⇒ Object
35 36 37 |
# File 'lib/openid/cryptutil.rb', line 35 def CryptUtil.sha1(text) return Digest::SHA1.digest(text) end |
.sha256(text) ⇒ Object
47 48 49 |
# File 'lib/openid/cryptutil.rb', line 47 def CryptUtil.sha256(text) return Digest::SHA256.digest(text) end |