Exemple #1
0
Var
compare_numbers(Var a, Var b)
{
    Var ans;

    if (a.type != b.type) {
	ans.type = TYPE_ERR;
	ans.v.err = E_TYPE;
    } else if (a.type == TYPE_INT) {
	ans.type = TYPE_INT;
	ans.v.num = compare_integers(a.v.num, b.v.num);
    } else {
	double aa = *a.v.fnum, bb = *b.v.fnum;

	ans.type = TYPE_INT;
	if (aa < bb)
	    ans.v.num = -1;
	else if (aa == bb)
	    ans.v.num = 0;
	else
	    ans.v.num = 1;
    }

    return ans;
}
void mod_integer(integer left, integer right, integer result) {
    integer mod_two_power = create_integer(right.num_components + 1);
    int i, bit;
    set_zero_integer(result);
    set_zero_integer(mod_two_power);
    mod_two_power.c[0] = 1;
    for(i=0; i<left.num_components; i++) {
        for(bit=0; bit<COMPONENT_BITS; bit++) {
            if ((left.c[i] & (1 << bit)) != 0) {
                add_integer(result, mod_two_power, result);
                if (compare_integers(result, right) >= 0) {
                    subtract_integer(result, right, result);
                }
            }
            shift_left_one_integer(mod_two_power);
            if (compare_integers(mod_two_power, right) >= 0) {
                subtract_integer(mod_two_power, right, mod_two_power);
            }
        }
    }
    free_integer(mod_two_power);
}
Exemple #3
0
unsigned int integer_to_binary(unsigned char** result,integer data,int keyLenBytes){
	integer base=string_to_integer("256");

	integer div=create_integer(data.num_components);
	copy_integer(data,div);

	integer zero=create_integer(1);
	zero.c[0]=0;


	unsigned char* pf=new unsigned char[data.num_components];

	for(int i=0; i<data.num_components; i++){
		pf[i]=0;
	}

	int tpos=data.num_components-1;

	pf[tpos]=div.c[0];
	tpos--;

	while(compare_integers(div,zero)==1){
		integer mod=create_integer(div.num_components+1+1);
		mod_integer(div,base,mod);

		integer div_temp=create_integer(div.num_components);
		copy_integer(div,div_temp);
		divide_small_integer(div_temp,256,div);

		pf[tpos]=div.c[0];
		tpos--;

	}

	int startpos=div.num_components-keyLenBytes;

	*result=new unsigned char[keyLenBytes];

	for(int i=0; i<keyLenBytes; i++){
		(*result)[i]=pf[i+startpos];
	}

	return keyLenBytes;
}
Exemple #4
0
int problem263()
{
  integer testnum = string_to_integer("5");
  integer testnum_helper = string_to_integer("5");
  integer two = string_to_integer("2");
  integer total_src = string_to_integer("0");
  integer total_tar = string_to_integer("0");
  integer target_dif = string_to_integer("6");
  integer dif = string_to_integer("0");

  int found = 0;
  integer lastprime = string_to_integer("5");
  //int sexy_count = 0;
  printf("text here\n");
  while (found < 4) {
    //printf("gets 1\n");
    if (miller_rabin(testnum) == PRIME) {
      subtract_integer(testnum, lastprime, dif);
      if (compare_integers(dif, target_dif) == 0) {
        printf("difference between %s and %s is six\n", 
                integer_to_string(testnum), integer_to_string(lastprime));
        found++;
      }else {
        found = 1;
      }
      copy_integer(testnum, lastprime);
      add_integer(total_src, testnum, total_tar);
      copy_integer(total_tar, total_src);
      printf("Total is %s\n", integer_to_string(total_tar));
    }
    add_integer(testnum_helper, two, testnum);
    copy_integer(testnum, testnum_helper);
    printf("Tested %s\n", integer_to_string(testnum));
  }
  return 0;
}
Exemple #5
0
int pow_mod(unsigned char** result,unsigned char* p,unsigned  char* q, unsigned char* r,unsigned int keyLengthBytes){

	std::set_new_handler(newh);

	Array<integer> factors;

	integer div=hex_to_integer(q,keyLengthBytes,0);

	int siz=keyLengthBytes;

	integer power_of_two=create_integer(siz);
	set_zero_integer(power_of_two);

	integer zero=create_integer(1);
	set_zero_integer(zero);

	integer two=string_to_integer("2");
	integer one=string_to_integer("1");

	int i=0;
	integer div_temp=create_integer(div.num_components);
	integer rem=create_integer(div.num_components+2);
	while(compare_integers(div, zero) == 1){
		set_zero_integer(rem);
		mod_integer(div, two,rem);

		copy_integer(div,div_temp);
		divide_small_integer(div_temp,2,div);
		
		if(compare_integers(rem, zero) == 1){
			integer ptt=create_integer(power_of_two.num_components);
			copy_integer(power_of_two,ptt);
			factors.pushBack(ptt);
		}
		
		add_integer(power_of_two,one,power_of_two);
		
		i++;
	}
	free_integer(rem);
	free_integer(div_temp);

	Array<integer> partial_results;

	integer part_res=hex_to_integer(p,keyLengthBytes,2);
	integer ri=hex_to_integer(r,keyLengthBytes,1);
	integer idx = create_integer(part_res.num_components);
	
	set_zero_integer(idx);

	integer part_res_temp1=create_integer(part_res.num_components);
	integer part_res_temp2=create_integer(part_res.num_components);
	integer part_res_temp3=create_integer(part_res.num_components);

	for(int i=0; i<factors.size(); i++){

		while(compare_integers(factors[i],idx)==1){
			copy_integer(part_res,part_res_temp1);
			copy_integer(part_res,part_res_temp2);

			multiply_integer(part_res_temp1,part_res_temp2,part_res);
			
			copy_integer(part_res,part_res_temp3);

			mod_integer(part_res_temp3,ri,part_res);

			add_integer(idx,one,idx);
		}

		integer ptt=create_integer(part_res.num_components);
		copy_integer(part_res,ptt);
		partial_results.pushBack(ptt);
	}

	free_integer(part_res_temp1);
	free_integer(part_res_temp2);
	free_integer(part_res_temp3);

	integer resulti=create_integer(ri.num_components+1);
	set_zero_integer(resulti);
	resulti.c[0]=1;

	integer resulti_temp=create_integer(resulti.num_components);
	integer resulti_temp2=create_integer(resulti.num_components);
	for(int i=0; i<partial_results.size(); i++){
		
		copy_integer(resulti,resulti_temp);

		multiply_integer(resulti_temp,partial_results[i],resulti);

		copy_integer(resulti,resulti_temp2);

		mod_integer(resulti_temp2,ri,resulti);
	}


	free_integer(resulti_temp);
	free_integer(resulti_temp2);

	int lol=integer_to_binary(result,resulti,keyLengthBytes);

	return lol;

}