Exemplo n.º 1
0
void evaluate_error(unsigned int *error_magnitudes, 
			unsigned int *error_locator_poly_derivative, 
			unsigned int *error_evaluator_poly, 
			unsigned int *locators, 
			int length_of_locators){
	int i = 0, j = 0, k = 0;
	unsigned int poly_evaluation = 0;
	unsigned int power = 1;
	unsigned int inverse_locator = 0 ;
	int temp = 0;// temp is the power of locator[i], also the error location,
	//ranges from 1 to N 

	for(i = 0; i < length_of_locators; i++){
		inverse_locator = galois_inverse(locators[i], w);
		//nominator computing
		poly_evaluation = 0;		
		for(j = N - 1; j >= K - 1; j--){//?
			power = 1;
			for(k = 0; k < N - 1 - j; k++)
				power = galois_single_multiply(power, inverse_locator, w);
			poly_evaluation ^= galois_single_multiply(power, error_evaluator_poly[j], w); 
		//	printf("test %d	\n", poly_evaluation);
		}		
		error_magnitudes[i] = galois_single_multiply(poly_evaluation, locators[i], w);
		//denominator computing
		poly_evaluation = 0;
		for(j = (N - K)/2; j >= 0; j--){
			power = 1;
			for(k = 0; k < (N - K)/2 - j; k++)
				power = galois_single_multiply(power, inverse_locator, w);
			poly_evaluation ^= galois_single_multiply(power, error_locator_poly_derivative[j], w); 
		}
		// error magnitudes  computing		
		error_magnitudes[i] = galois_single_divide(error_magnitudes[i], poly_evaluation, w);
		//if decode GRS, then we will have to divide error_magnitudes by parity
		//check matrix's corresponding column multipliers, otherwise we have to
		//comment this function or set multipliers vector to all ones.
		temp = galois_log(locators[i], w);

		error_magnitudes[i] = galois_single_divide(error_magnitudes[i],
		                                            multiplier[temp], w);
	}
	printf("The error magnitudes are:\n");
	for(i = 0; i < length_of_locators; i ++){
		printf("%d	", error_magnitudes[i]);
	}
	printf("\n");
}
Exemplo n.º 2
0
/*
* Class:     eu_vandertil_jerasure_jni_Galois
* Method:    galois_inverse
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_eu_vandertil_jerasure_jni_Galois_galois_1inverse
	(JNIEnv *env, jclass clazz, jint x, jint w)
{
	return galois_inverse(x, w);
}