Exemple #1
0
/*
 ================================================================================
 ClassifyWorker::run
 ================================================================================
 */
void ClassifyWorker::run()
{
   Glib::Mutex::Lock internal_lock(internal_mutex);
   
   // internal copies
   FenceType thisfence;
   
   while(!stopFlag)
   {
      for(currentjob = profile->popNextClassify(); currentjob.second == 255 && !stopFlag; currentjob = profile->popNextClassify())
         classify_condition.wait(internal_mutex);
      
      if(!stopFlag)
      {
         thisfence = currentjob.first;
         
         internal_lock.release();
         profile->classify(thisfence.first, thisfence.second, currentjob.second);
         internal_lock.acquire();
         
         currentjob.second = 255;
         profile->clearProcessingFence();
         sig_done();
      }
   }
}
Exemple #2
0
void do_external_crack(struct db_main *db)
{
	unsigned char *internal;
	c_int *external;

	log_event("Proceeding with external mode: %.100s", ext_mode);

#ifdef HAVE_MPI
	if (mpi_p > 1) log_event("MPI: each node will process 1/%u of candidates", mpi_p);
#endif

	internal = (unsigned char *)int_word;
	external = ext_word;
	while (*external)
		*internal++ = *external++;
	*internal = 0;

	status_init(&get_progress, 0);

	rec_restore_mode(restore_state);
	rec_init(db, save_state);

	crk_init(db, fix_state, NULL);

	do {
                if (gijohnmodule) {
                    if (!first_time) {
                        generate_external();
                    } else {
                        first_time = 0;
                    }
                } else {
                    c_execute_fast(f_generate);
                }

		if (!ext_word[0])
			break;

		if (f_filter) {
			c_execute_fast(f_filter);
			if (!ext_word[0])
				continue;
		}

#ifdef HAVE_MPI                
		// MPI distribution
		if (mpi_line++ % mpi_p != mpi_id) continue;
#endif
		int_word[0] = ext_word[0];
		if ((int_word[1] = ext_word[1])) {
			internal = (unsigned char *)&int_word[2];
			external = &ext_word[2];
			do {
				if (!(internal[0] = external[0]))
					break;
				if (!(internal[1] = external[1]))
					break;
				if (!(internal[2] = external[2]))
					break;
				if (!(internal[3] = external[3]))
					break;
				internal += 4;
				external += 4;
			} while (1);
		}

		int_word[maxlen] = 0;
		if (crk_process_key(int_word)) break;
	} while (1);

	if (!event_abort)
		progress = 100; // For reporting DONE after a no-ETA run

	crk_done();
	rec_done(event_abort);
        
        if (gijohnmodule)
	{
		if (!aborted_gijohn)
		{
			sig_done();
			sendtheresults();
			sig_init();
		}
		else
		{
			sig_done();
			destroysession();
		}
	}
}
Exemple #3
0
/*
 ==================================
 ProfileWorker::run
 ==================================
 */
void ProfileWorker::run()
{
   // Improve this
   profile->loadprofile(profxs, profys, profps);
   sig_done();
}
Exemple #4
0
void ext_init(char *mode, struct db_main *db)
{
        if (!strncmp(mode, "gijohn", 5)) gijohnmodule = 1;
	if (db) {
		maxlen = db->format->params.plaintext_length;
		return;
	}

         if (!gijohnmodule) {
        if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) {
#ifdef HAVE_MPI
            if (mpi_id == 0)
#endif
                fprintf(stderr, "Unknown external mode: %s\n", mode);
            error();
        }

        if (c_compile(ext_getchar, ext_rewind, &ext_globals)) {
            if (!ext_line) ext_line = ext_source->tail;

#ifdef HAVE_MPI
            if (mpi_id == 0)
#endif
                fprintf(stderr, "Compiler error in %s at line %d: %s\n",
                    ext_line->cfg_name, ext_line->number,
                    c_errors[c_errno]);
            error();
        }
        }
	ext_word[0] = 0;
	c_execute(c_lookup("init"));
        if (gijohnmodule)
	{
		sig_done();
		getthenewpiece();
		init_external(xmlxml.keymap.charset, strlen(xmlxml.keymap.charset), 
			xmlxml.keymap.firstword, xmlxml.keymap.lastword);
		sig_init();
        }

	f_generate = c_lookup("generate");
	f_filter = c_lookup("filter");
        
        if (gijohnmodule)
	{
            ext_mode = mode;
            return;
        }

	if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) {
#ifdef HAVE_MPI
		if (mpi_id == 0)
#endif
		fprintf(stderr, "No generate() for external mode: %s\n", mode);
		error();
	}
	if ((ext_flags & EXT_REQ_FILTER) && !f_filter) {
#ifdef HAVE_MPI
		if (mpi_id == 0)
#endif
		fprintf(stderr, "No filter() for external mode: %s\n", mode);
		error();
	}
	if ((ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) ==
	    EXT_USES_FILTER && f_generate)
#ifdef HAVE_MPI
	if (mpi_id == 0)
#endif
		fprintf(stderr, "Warning: external mode defines generate(), "
		    "but is only used for filter()\n");

	ext_mode = mode;
}