示例#1
0
char* integer_to_string(integer x) {
    int i, result_len;
    char* result =
        (char*)malloc((int)ceil(COMPONENT_BITS*x.num_components/LOG_2_10) + 2);
    integer ten = create_integer(1);
    ten.c[0] = 10;

    if (is_zero_integer(x)) {
        strcpy(result, "0");
    } else {
        for (i = 0; !is_zero_integer(x); i++) {
            result[i] = (char)mod_small_integer(x, 10) + '0';
            divide_small_integer(x, 10, x);
        }
        result[i] = '\0';
    }

    result_len = strlen(result);
    for(i=0; i < result_len/2; i++) {
        char temp = result[i];
        result[i] = result[result_len - i - 1];
        result[result_len - i - 1] = temp;
    }

    free_integer(ten);
    return result;
}
示例#2
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;
}
示例#3
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;

}