class WebAuthn::AuthenticatorData::AttestedCredentialData

def self.deserialize(data)

def self.deserialize(data)
  read(data)
rescue EOFError
  raise AttestedCredentialDataFormatError
end

def aaguid

def aaguid
  raw_aaguid.unpack("H8H4H4H4H12").join("-")
end

def algorithm

def algorithm
  COSE::Algorithm.find(cose_key.alg).name
end

def cose_key

def cose_key
  @cose_key ||= COSE::Key.deserialize(public_key)
end

def credential

def credential
  @credential ||=
    if valid?
      Credential.new(id: id, public_key: public_key, algorithm: algorithm)
    end
end

def length

def length
  if valid?
    AAGUID_LENGTH + ID_LENGTH_LENGTH + id_length + public_key_length
  end
end

def public_key

def public_key
  trailing_bytes[0..public_key_length - 1]
end

def public_key_length

def public_key_length
  @public_key_length ||=
    CBOR.encode(CBOR::Unpacker.new(StringIO.new(trailing_bytes)).each.first).length
end

def valid?

def valid?
  valid_credential_public_key?
end

def valid_credential_public_key?

def valid_credential_public_key?
  !!cose_key.alg
end