code: public function calculateNtResponse(
          HashCredentialInterface $hash_credential,
          $client_challenge = null,
          $server_challenge_nonce = null
      ) {
          // By default, our encryption data is our server challenge nonce
          $encryption_data = $server_challenge_nonce;
  
          // If we have a client challenge, extended session security must be negotiated
          if (null !== $client_challenge) {
              // Grab a hasher
              $extended_security_hasher = $this->crypt_hasher_factory->build(
                  static::EXTENDED_SESSION_SECURITY_HASHER_ALGORITHM
              );
  
              // Concat the two challenge strings
              $nt_extended_security_challenge_source = $server_challenge_nonce . $client_challenge;
  
              $nt_extended_security_hash = $extended_security_hasher
                  ->update($nt_extended_security_challenge_source)
                  ->digest();
  
              // Our challenge is a substring of the resulting hash
              $nt_extended_security_challenge = substr(
                  $nt_extended_security_hash,
                  0,
                  static::EXTENDED_SESSION_SECURITY_CHALLENGE_LENGTH
              );
  
              $encryption_data = $nt_extended_security_challenge;
          }
  
          return $this->calculateChallengeResponseData($hash_credential, $encryption_data);
      }
docs: Calculates the NT response.
  
  @param HashCredentialInterface $hash_credential The user's authentication
  NT hash credential.
  @param string|null $client_challenge A randomly generated 64-bit (8-byte)
  unsigned client-generated binary string.
  @param string|null $server_challenge_nonce The 64-bit (8-byte) unsigned
  server-sent "nonce" (number used once) represented as a binary string.
  @return string The calculated response as a binary string.