class WebAuthn::AuthenticatorData

Constants

FLAGS_LENGTH
RP_ID_HASH_LENGTH
SIGN_COUNT_LENGTH

Public Class Methods

deserialize(data) click to toggle source
# File lib/webauthn/authenticator_data.rb, line 33
def self.deserialize(data)
  read(data)
rescue EOFError
  raise AuthenticatorDataFormatError
end

Public Instance Methods

aaguid() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 86
def aaguid
  raw_aaguid = attested_credential_data.raw_aaguid

  unless raw_aaguid == WebAuthn::AuthenticatorData::AttestedCredentialData::ZEROED_AAGUID
    attested_credential_data.aaguid
  end
end
attested_credential_data() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 75
def attested_credential_data
  @attested_credential_data ||=
    AttestedCredentialData.deserialize(trailing_bytes)
rescue AttestedCredentialDataFormatError
  raise AuthenticatorDataFormatError
end
attested_credential_data_included?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 61
def attested_credential_data_included?
  flags.attested_credential_data_included == 1
end
credential() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 69
def credential
  if attested_credential_data_included?
    attested_credential_data.credential
  end
end
data() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 39
def data
  to_binary_s
end
extension_data() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 82
def extension_data
  @extension_data ||= CBOR.decode(raw_extension_data)
end
extension_data_included?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 65
def extension_data_included?
  flags.extension_data_included == 1
end
user_flagged?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 49
def user_flagged?
  user_present? || user_verified?
end
user_present?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 53
def user_present?
  flags.user_present == 1
end
user_verified?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 57
def user_verified?
  flags.user_verified == 1
end
valid?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 43
def valid?
  (!attested_credential_data_included? || attested_credential_data.valid?) &&
    (!extension_data_included? || extension_data) &&
    valid_length?
end

Private Instance Methods

attested_credential_data_length() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 110
def attested_credential_data_length
  if attested_credential_data_included?
    attested_credential_data.length
  else
    0
  end
end
base_length() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 126
def base_length
  RP_ID_HASH_LENGTH + FLAGS_LENGTH + SIGN_COUNT_LENGTH
end
extension_data_length() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 118
def extension_data_length
  if extension_data_included?
    raw_extension_data.length
  else
    0
  end
end
raw_extension_data() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 100
def raw_extension_data
  if extension_data_included?
    if attested_credential_data_included?
      trailing_bytes[attested_credential_data.length..-1]
    else
      trailing_bytes.snapshot
    end
  end
end
valid_length?() click to toggle source
# File lib/webauthn/authenticator_data.rb, line 96
def valid_length?
  data_length == base_length + attested_credential_data_length + extension_data_length
end