class OmniAuth::Strategies::Trezor
Public Instance Methods
callback_phase()
click to toggle source
Calls superclass method
# File lib/omniauth/strategies/trezor.rb, line 54 def callback_phase verified = verify_signature( extra[:public_key], extra[:signature], extra[:hidden_challenge], extra[:visual_challenge] ) if verified super else fail!(:invalid_credentials) end end
request_phase()
click to toggle source
# File lib/omniauth/strategies/trezor.rb, line 16 def request_phase session['omniauth.trezor_visual_challenge'] = options[:visual_challenge] session['omniauth.trezor_hidden_challenge'] = options[:hidden_challenge] OmniAuth::Form.build( title: "Trezor Login", url: callback_path, header_info: <<-HTML <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js" type="text/javascript"></script> <script src="https://trezor.github.io/connect/login.js"></script> <script type='text/javascript'> function trezorLogin() { TrezorConnect.requestLogin('#{options[:hosticon]}', '#{options[:hidden_challenge]}', '#{options[:visual_challenge]}', function (result) { if (result.success) { $('input[name=public_key]').val(result.public_key); $('input[name=signature]').val(result.signature); $('form').submit(); } else { console.log('Error:', result.error); } }); } $(function() { $('button').click(function() { trezorLogin(); return false; }); }); </script> HTML ) do |f| f.input_field('hidden', 'public_key') f.input_field('hidden', 'signature') f.html "<p>Logging in at: #{options[:visual_challenge]}</p>" end.to_response end
skip_info?()
click to toggle source
# File lib/omniauth/strategies/trezor.rb, line 81 def skip_info? true end
Private Instance Methods
verify_signature(pubkey, signature, challenge_hidden='', challenge_visual='')
click to toggle source
# File lib/omniauth/strategies/trezor.rb, line 86 def verify_signature(pubkey, signature, challenge_hidden='', challenge_visual='') address = Bitcoin.pubkey_to_address(pubkey) sha256 = Digest::SHA256.new signature = [signature.htb].pack('m0') message = sha256.digest(challenge_hidden.htb) + sha256.digest(challenge_visual) Bitcoin.verify_message(address, signature, message) end