docs: def verify1(self, credentials, session_pub_key, encrypted):
          """First verification step."""
          # No additional hashing used
          self._shared = self._verify_private.get_shared_key(
              curve25519.Public(session_pub_key), hashfunc=lambda x: x)
  
          session_key = hkdf_expand('Pair-Verify-Encrypt-Salt',
                                    'Pair-Verify-Encrypt-Info',
                                    self._shared)
  
          chacha = chacha20.Chacha20Cipher(session_key, session_key)
          decrypted_tlv = tlv8.read_tlv(
              chacha.decrypt(encrypted, nounce='PV-Msg02'.encode()))
  
          identifier = decrypted_tlv[tlv8.TLV_IDENTIFIER]
          signature = decrypted_tlv[tlv8.TLV_SIGNATURE]
  
          if identifier != credentials.atv_id:
              raise Exception('incorrect device response')  # TODO: new exception
  
          info = session_pub_key + \
              bytes(identifier) + self._verify_public.serialize()
          ltpk = VerifyingKey(bytes(credentials.ltpk))
          ltpk.verify(bytes(signature), bytes(info))  # throws if no match
  
          device_info = self._verify_public.serialize() + \
              credentials.client_id + session_pub_key
  
          device_signature = SigningKey(credentials.ltsk).sign(device_info)
  
          tlv = tlv8.write_tlv({tlv8.TLV_IDENTIFIER: credentials.client_id,
                                tlv8.TLV_SIGNATURE: device_signature})
  
          return chacha.encrypt(tlv, nounce='PV-Msg03'.encode())