rendered paste bodynum_grande Crsa :: Teorema_resto_chino ( num_grande val_num_mensaje )
{
// el mensaje se tomará para poder armas de forma directa la descomposicion en P y Q
num_grande clave_d = m_d; //modificado m_d
num_grande clave_n = m_n; //modificado m_n
num_grande val_p = m_p; //modificado m_p
num_grande val_q = m_q; // modficado m_q
// descomposicion en funcion de P y Q
num_grande temp_1, temp_2;
temp_1 = clave_d % (val_p - 1);
// cout << "valor temp_1: " << temp_1 << endl;
temp_2 = clave_d % ( val_q - 1);
//cout << "calor temp_2: " << temp_2 << endl;
//ahora las ecuaciones se armaran de forma que pueda concluir en dos ecuaciones
// ahora el mensaje se pondrá con respecto de P y Q junto con los valores encontrados
/* ENCONTRANDO LOS VALORES DE A PARA CADA CASO */
num_grande val_a_1 , val_a_2;
val_a_1 = exponenciacion_modular_binaria ( val_num_mensaje , temp_1 , val_p );
//cout << "valor de val_a_1: " << val_a_1 << endl;
val_a_2 = exponenciacion_modular_binaria ( val_num_mensaje , temp_2 , val_q );
//cout << "valor de val_a_2: " << val_a_2 << endl;
//ENCONTRANDO EL VALOR DE P GENERAL
num_grande P_general = val_p * val_q;
num_grande val_p_1 , val_p_2, val_q_1 , val_q_2;
val_p_1 = clave_n / val_p;
//cout << "valor de val_p_1: " << val_p_1 << endl;
val_p_2 = clave_n / val_q;
//cout << "valor de val_p_2: " << val_p_2 << endl;
val_q_1 = euclides_extendido_vectores ( val_p_1 , val_p );
//cout << "valor de val_q_1: " << val_q_1 << endl;
val_q_2 = euclides_extendido_vectores ( val_p_2 , val_q );
//cout << "valor de val_q_2: " << val_q_2 << endl;
//encontrando el valor de el cifrado en general
num_grande resultado_1 = exponenciacion_modular_binaria ( val_num_mensaje , temp_1 , clave_n ) * ((val_p_1 * val_q_1)%clave_n);
num_grande resultado_2 = exponenciacion_modular_binaria ( val_num_mensaje , temp_2 , clave_n ) * ((val_p_2 * val_q_2)%clave_n);
resultado_1 = resultado_1 % clave_n;
resultado_2 = resultado_2 % clave_n;
//cout << "resultados previos: " << resultado_1 << " - " << resultado_2 << endl;
num_grande resultado_final = (resultado_1 + resultado_2) % clave_n;
return resultado_final;
}