code: def get_password_authentication_key(self, username, password, server_b_value, salt):
          
          u_value = calculate_u(self.large_a_value, server_b_value)
          if u_value == 0:
              raise ValueError('U cannot be zero.')
          username_password = '%s%s:%s' % (self.pool_id.split('_')[1], username, password)
          username_password_hash = hash_sha256(username_password.encode('utf-8'))
  
          x_value = hex_to_long(hex_hash(pad_hex(salt) + username_password_hash))
          g_mod_pow_xn = pow(self.g, x_value, self.big_n)
          int_value2 = server_b_value - self.k * g_mod_pow_xn
          s_value = pow(int_value2, self.small_a_value + u_value * x_value, self.big_n)
          hkdf = compute_hkdf(bytearray.fromhex(pad_hex(s_value)),
                              bytearray.fromhex(pad_hex(long_to_hex(u_value))))
          return hkdf
docs: Calculates the final hkdf based on computed S value, and computed U value and the key
          :param {String} username Username.
          :param {String} password Password.
          :param {Long integer} server_b_value Server B value.
          :param {Long integer} salt Generated salt.
          :return {Buffer} Computed HKDF value.