Module: Wampus::Protocols::WampCra

Includes:
Wamp
Included in:
Servers::WampCra
Defined in:
lib/wampus/protocols/wamp_cra.rb

Constant Summary collapse

URI_PROCEDURE =
Wampus::Protocols::Wamp::URI_BASE + 'procedure#'

Constants included from Wamp

Wampus::Protocols::Wamp::CALL_ERROR_MSG_ID, Wampus::Protocols::Wamp::CALL_MSG_ID, Wampus::Protocols::Wamp::CALL_RESULT_MSG_ID, Wampus::Protocols::Wamp::EVENT_MSG_ID, Wampus::Protocols::Wamp::PREFIX_MSG_ID, Wampus::Protocols::Wamp::PROTOCOL_VERSION, Wampus::Protocols::Wamp::PUBLISH_MSG_ID, Wampus::Protocols::Wamp::SUBSCRIBE_MSG_ID, Wampus::Protocols::Wamp::UNSUBSCRIBE_MSG_ID, Wampus::Protocols::Wamp::URI_BASE, Wampus::Protocols::Wamp::URI_ERROR, Wampus::Protocols::Wamp::URI_RPC, Wampus::Protocols::Wamp::URI_TOPIC, Wampus::Protocols::Wamp::WELCOME_MSG_ID

Instance Method Summary collapse

Methods included from Wamp

#call_error_msg, #call_msg, #call_result_msg, #event_msg, #prefix_msg, #publish_msg, #subscribe_msg, #unsubscribe_msg, #welcome_msg

Instance Method Details

#auth_signature(auth_challenge, auth_secret = nil, auth_extra = nil) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/wampus/protocols/wamp_cra.rb', line 27

def auth_signature(auth_challenge, auth_secret = nil, auth_extra = nil)
  auth_secret = '' if auth_secret.nil?
  auth_secret.encode! 'UTF-8' if auth_secret.encoding.name != 'UTF-8'
  auth_secret = derive_key auth_secret, auth_extra
  digest = OpenSSL::Digest::SHA256.new

  hmac = OpenSSL::HMAC.hexdigest(digest, auth_secret, auth_challenge)
  Base64.encode64(hmac).strip
end

#derive_key(secret, extra = nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/wampus/protocols/wamp_cra.rb', line 12

def derive_key(secret, extra = nil)
  if extra.is_a?(Hash) && extra.has_key?(:salt)

    salt = extra[:salt]
    iterations = extra.fetch(:iterations, 10000)
    key_length = extra.fetch(:keylen, 32)
    digest = OpenSSL::Digest::SHA256.new

    key = OpenSSL::PKCS5.pbkdf2_hmac(secret, salt, iterations, key_length, digest).unpack('H*').first
    Base64.encode64(key).strip
  else
    secret
  end
end