class WebAuthn::AttestationStatement::Apple

def attestation_type

def attestation_type
  WebAuthn::AttestationStatement::ATTESTATION_TYPE_ANONCA
end

def cred_cert

def cred_cert
  attestation_certificate
end

def default_root_certificates

def default_root_certificates
  [ROOT_CERTIFICATE]
end

def valid?(authenticator_data, client_data_hash)

def valid?(authenticator_data, client_data_hash)
  valid_nonce?(authenticator_data, client_data_hash) &&
    matching_public_key?(authenticator_data) &&
    trustworthy? &&
    [attestation_type, attestation_trust_path]
end

def valid_nonce?(authenticator_data, client_data_hash)

def valid_nonce?(authenticator_data, client_data_hash)
  extension = cred_cert&.find_extension(NONCE_EXTENSION_OID)
  if extension
    sequence = OpenSSL::ASN1.decode(extension.value_der)
    sequence.tag == OpenSSL::ASN1::SEQUENCE &&
      sequence.value.size == 1 &&
      sequence.value[0].value[0].value ==
        OpenSSL::Digest::SHA256.digest(authenticator_data.data + client_data_hash)
  end
end