module Steam::Totp

Constants

CHARS
VERSION

Public Class Methods

generate_auth_code(shared_secret, time) click to toggle source
# File lib/steam/totp.rb, line 11
def self.generate_auth_code(shared_secret, time)
  signature = [time / 30].pack('Q>')
  digest = OpenSSL::HMAC.digest('sha1', Base64.decode64(shared_secret), signature)
  digest = digest.unpack('C*')

  start = digest[19] & 0x0f
  digest = digest[start, 4]

  full_code = digest.pack('C*').unpack('L>').first & 0x7fffffff

  5.times.map do
    char = CHARS[full_code % CHARS.size]
    full_code /= CHARS.size
    char
  end.join
end
generate_confirmation_key(identity_secret, time, tag) click to toggle source
# File lib/steam/totp.rb, line 28
def self.generate_confirmation_key(identity_secret, time, tag)
  signature = [time].pack('Q>') + tag[0..31]
  digest = OpenSSL::HMAC.digest('sha1', Base64.decode64(identity_secret), signature)
  Base64.encode64(digest).chomp
end
mobile_device_id(steam_id) click to toggle source
# File lib/steam/totp.rb, line 34
def self.mobile_device_id(steam_id)
  digest = Digest::SHA1.hexdigest steam_id
  "android:#{digest[0..7]}-#{digest[8..11]}-#{digest[12..15]}-#{digest[16..19]}-#{digest[20..31]}"
end