Class: U2F::SignResponse
- Inherits:
-
Object
- Object
- U2F::SignResponse
- Defined in:
- lib/u2f/sign_response.rb
Instance Attribute Summary collapse
-
#client_data ⇒ Object
Returns the value of attribute client_data.
-
#client_data_json ⇒ Object
Returns the value of attribute client_data_json.
-
#key_handle ⇒ Object
Returns the value of attribute key_handle.
-
#signature_data ⇒ Object
Returns the value of attribute signature_data.
Class Method Summary collapse
Instance Method Summary collapse
-
#counter ⇒ Object
Counter value that the U2F token increments every time it performs an authentication operation.
-
#signature ⇒ Object
signature is to be verified using the public key obtained during registration.
-
#user_present? ⇒ Boolean
If user presence was verified.
-
#verify(app_id, public_key_pem) ⇒ Object
Verifies the response against an app id and the public key of the registered device.
Instance Attribute Details
#client_data ⇒ Object
Returns the value of attribute client_data.
3 4 5 |
# File 'lib/u2f/sign_response.rb', line 3 def client_data @client_data end |
#client_data_json ⇒ Object
Returns the value of attribute client_data_json.
3 4 5 |
# File 'lib/u2f/sign_response.rb', line 3 def client_data_json @client_data_json end |
#key_handle ⇒ Object
Returns the value of attribute key_handle.
3 4 5 |
# File 'lib/u2f/sign_response.rb', line 3 def key_handle @key_handle end |
#signature_data ⇒ Object
Returns the value of attribute signature_data.
3 4 5 |
# File 'lib/u2f/sign_response.rb', line 3 def signature_data @signature_data end |
Class Method Details
.load_from_json(json) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/u2f/sign_response.rb', line 5 def self.load_from_json(json) data = ::JSON.parse(json) instance = new instance.client_data_json = ::U2F.urlsafe_decode64(data['clientData']) instance.client_data = ClientData.load_from_json(instance.client_data_json) instance.key_handle = data['keyHandle'] instance.signature_data = ::U2F.urlsafe_decode64(data['signatureData']) instance end |
Instance Method Details
#counter ⇒ Object
Counter value that the U2F token increments every time it performs an authentication operation
21 22 23 |
# File 'lib/u2f/sign_response.rb', line 21 def counter signature_data[1..4].unpack('N').first end |
#signature ⇒ Object
signature is to be verified using the public key obtained during registration.
28 29 30 |
# File 'lib/u2f/sign_response.rb', line 28 def signature signature_data.byteslice(5..-1) end |
#user_present? ⇒ Boolean
If user presence was verified
34 35 36 |
# File 'lib/u2f/sign_response.rb', line 34 def user_present? signature_data[0].unpack('C').first == 1 end |
#verify(app_id, public_key_pem) ⇒ Object
Verifies the response against an app id and the public key of the registered device
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/u2f/sign_response.rb', line 41 def verify(app_id, public_key_pem) data = [ Digest::SHA256.digest(app_id), signature_data.byteslice(0, 5), Digest::SHA256.digest(client_data_json) ].join public_key = OpenSSL::PKey.read(public_key_pem) public_key.verify(OpenSSL::Digest::SHA256.new, signature, data) end |