All pastes #2094360 Raw Edit

Mine

public text v1 · immutable
#2094360 ·published 2011-11-22 18:23 UTC
rendered paste body
num_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;

}