Module: Wampus::Protocols::WampCra
Constant Summary collapse
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
- #auth_signature(auth_challenge, auth_secret = nil, auth_extra = nil) ⇒ Object
- #derive_key(secret, extra = nil) ⇒ Object
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 |