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