Exemple #1
0
int init_smt(struct s_smc *smc, u_char *mac_addr)

{
	int	p ;

#if defined(DEBUG) && !defined(DEBUG_BRD)
	debug.d_smt = 0 ;
	debug.d_smtf = 0 ;
	debug.d_rmt = 0 ;
	debug.d_ecm = 0 ;
	debug.d_pcm = 0 ;
	debug.d_cfm = 0 ;

	debug.d_plc = 0 ;
#ifdef	ESS
	debug.d_ess = 0 ;
#endif
#ifdef	SBA
	debug.d_sba = 0 ;
#endif
#endif	

	
	for ( p = 0; p < NUMPHYS; p ++ ) {
		smc->y[p].mib = & smc->mib.p[p] ;
	}

	set_oem_spec_val(smc) ;	
	(void) smt_set_mac_opvalues(smc) ;
	init_fddi_driver(smc,mac_addr) ;	
	smt_fixup_mib(smc) ;		

	ev_init(smc) ;			
#ifndef	SLIM_SMT
	smt_init_evc(smc) ;		
#endif	
	smt_timer_init(smc) ;		
	smt_agent_init(smc) ;		

	pcm_init(smc) ;			
	ecm_init(smc) ;			
	cfm_init(smc) ;			
	rmt_init(smc) ;			

	for (p = 0 ; p < NUMPHYS ; p++) {
		pcm(smc,p,0) ;		
	}
	ecm(smc,0) ;			
	cfm(smc,0) ;			
	rmt(smc,0) ;			

	smt_agent_task(smc) ;		

        PNMI_INIT(smc) ;                

	return(0) ;
}
Exemple #2
0
/*
 * Init SMT
 */
int init_smt(struct s_smc *smc, u_char *mac_addr)
/* u_char *mac_addr;	canonical address or NULL */
{
	int	p ;

#if defined(DEBUG) && !defined(DEBUG_BRD)
	debug.d_smt = 0 ;
	debug.d_smtf = 0 ;
	debug.d_rmt = 0 ;
	debug.d_ecm = 0 ;
	debug.d_pcm = 0 ;
	debug.d_cfm = 0 ;

	debug.d_plc = 0 ;
#ifdef	ESS
	debug.d_ess = 0 ;
#endif
#ifdef	SBA
	debug.d_sba = 0 ;
#endif
#endif	/* DEBUG && !DEBUG_BRD */

	/* First initialize the ports mib->pointers */
	for ( p = 0; p < NUMPHYS; p ++ ) {
		smc->y[p].mib = & smc->mib.p[p] ;
	}

	set_oem_spec_val(smc) ;	
	(void) smt_set_mac_opvalues(smc) ;
	init_fddi_driver(smc,mac_addr) ;	/* HW driver */
	smt_fixup_mib(smc) ;		/* update values that depend on s.sas */

	ev_init(smc) ;			/* event queue */
#ifndef	SLIM_SMT
	smt_init_evc(smc) ;		/* evcs in MIB */
#endif	/* no SLIM_SMT */
	smt_timer_init(smc) ;		/* timer package */
	smt_agent_init(smc) ;		/* SMT frame manager */

	pcm_init(smc) ;			/* PCM state machine */
	ecm_init(smc) ;			/* ECM state machine */
	cfm_init(smc) ;			/* CFM state machine */
	rmt_init(smc) ;			/* RMT state machine */

	for (p = 0 ; p < NUMPHYS ; p++) {
		pcm(smc,p,0) ;		/* PCM A state machine */
	}
	ecm(smc,0) ;			/* ECM state machine */
	cfm(smc,0) ;			/* CFM state machine */
	rmt(smc,0) ;			/* RMT state machine */

	smt_agent_task(smc) ;		/* NIF FSM etc */

        PNMI_INIT(smc) ;                /* PNMI initialization */

	return(0) ;
}
Exemple #3
0
// Liefert die Primfaktorzerlegung einer Zahl als String.
char *factorize(mpz_t number)
{
	// Primtest (Miller-Rabin).
	if (mpz_probab_prime_p(number, 10) > 0)
		return mpz_get_str(NULL, 10, number);

	mpz_t factor, cofactor;
	mpz_init(factor);
	mpz_init(cofactor);
	char *str1, *str2, *result;
	int B1 = INITB1, B2 = INITB2, curves = INITCURVES;

	// Zunaechst eine einfache Probedivision.
	trial(number, factor, 3e3);
	if (mpz_cmp_si(factor, 1) == 0)
	{
		// Zweite Strategie: Pollard-Rho.
		do
		{
			rho(number, factor, 4e4);
		} while (mpz_cmp(factor, number) == 0);
		// Falls immer noch kein Faktor gefunden wurde, mit ECM fortfahren.
		while (mpz_cmp_si(factor, 1) == 0)
		{
			ecm(number, factor, B1, B2, curves);
			if (mpz_cmp(factor, number) == 0)
			{
				mpz_set_si(factor, 1);
				B1 = INITB1;
				B2 = INITB2;
				curves = INITCURVES;
				continue;
			}
			// Anpassung der Parameter.
			B1 *= 4;
			B2 *= 5;
			curves = (curves * 5) / 2;
		}
	}

	mpz_divexact(cofactor, number, factor);
	str1 = factorize(factor);
	str2 = factorize(cofactor);
	result = (char *) malloc(strlen(str1) + strlen(str2) + 4);
	strcpy(result, str1);
	strcat(result, " * ");
	strcat(result, str2);

	mpz_clear(factor);
	mpz_clear(cofactor);
	return result;
}
Exemple #4
0
/* !	適当です	!
 * 素因数が見つからなかった    : 0
 * エラー終了                  : 1
 * 因数が素数で余因数が素数    : 2
 * 因数が素数で余因数が合成数  : 4
 * 因数が合成数で余因数が素数  : 8
 * 因数が合成数で余因数が合成数: 16
 */
int main (int argc, char *argv[])
{
	if (argc <= 1) {
		fprintf (stderr, "Error: Need two Argument\n");
		fprintf (stderr, "Usage: funecm [options] [k]\n");
		return 1;
	}

	/* オプション処理 */
	int opt;
	while ((opt = getopt (argc, argv, "h")) != -1) {
		switch (opt) {
			case 'h':
				fprintf(stdout, "Usage: funecm [options] [composite number] [k]\n");
				fprintf(stdout, "-h: help\n");
				return 0;
				break;
			default:
				fprintf(stderr, "No such option\n");
				fprintf(stdout, "Usage: funecm [options] [composite number] [k]\n");
				return 1;
		}
	}

	/* ARGUMENT CONVERSION */
	mpz_t N;
	mpz_init_set_str(N, argv[optind++], 10);
	unsigned long int k;
	k = (unsigned long int)strtol(argv[optind++], NULL, 10);

	/* 修正予定 */
	if (k <= 2)
		return 0;

	switch (mpz_probab_prime_p (N, 25)) {
		case 2:
			gmp_printf("%Zd is definitely prime\n", N);
			return 0;
			break;
		case 1:
			gmp_printf("%Zd is probably prime\n", N);
			return 0;
			break;
		case 0:
			gmp_printf("%Zd is definitely composite\n", N);
			break;
		default:
			break;
	}

	AFFINE_POINT P;
	affine_point_init(P);

	mpz_t factor;
	mpz_t cofactor;

	mpz_init(factor);
	mpz_init(cofactor);

	unsigned long int A;
	for (A = 1; A < A_LOOP; A++) {
		ecm(factor, N, A, k);
		mpz_divexact(cofactor, N, factor);
		/* 因数が1又はNだった場合係数を変えてやり直す */
		if (mpz_cmp_ui(factor, 1) == 0 || mpz_cmp(factor, N) == 0)
			continue;
		/* ToDo */
		/* 終了ステータス */
		switch (mpz_probab_prime_p(factor, 25)) {
			case 2:
				gmp_printf("factor found: %Zd input number: %Zd\n", factor, N);
				gmp_printf("cofactor is %Zd\n", cofactor);
				return 1;
				break;
			case 1:
				gmp_printf("factor found: %Zd input number: %Zd\n", factor, N);
				gmp_printf("cofactor is %Zd\n", cofactor);
				return 1;
				break;
			case 0:
				gmp_printf("factor found: %Zd input number: %Zd\n", factor, N);
				gmp_printf("cofactor is %Zd\n", cofactor);
				return 1;
				break;
			default:
				break;
		}
	}

	/* メモリの解放*/
	affine_point_clear(P);
	mpz_clear(factor);
	mpz_clear(cofactor);

	return 0;
}