// recibe el mensaje (en el cliente) internal void Recibe() { conexion.RecibeSocket(buzon_mensaje, 0, buzon_mensaje.Longitud); // seguridad.ImprimeRecibe( buzon_billete, buzon_indice, buzon_longitud, "RSA ( S1 | protocolo )"); // // se valida el mensaje if (buzon_billete.TomaInt(0) != 0 || buzon_indice.TomaInt(0) != 0 || buzon_longitud.TomaInt(0) != buzon_mensaje.Longitud) { throw new ErrorConexion("Violación del protocolo de seguridad."); } // CifradoRSA cifrado_RSA = new CifradoRSA(); try { cifrado_RSA.IniciaPrivada(seguridad.seguridad_servidor.clave_privada); cifrado_RSA.DescifraPrivada(buzon_cifrado, buzon_texto); } finally { cifrado_RSA.Termina(); } // if (!Buzon.DatosIguales(this.buzon_protocolo, Seguridad.protocolo)) { throw new ErrorConexion("Protocolo de seguridad inconsistente."); } // seguridad.EstableceSecreto(this.buzon_secreto); }
// envia el mensaje (desde el servicio) internal void Envia() { buzon_billete.PonLong(0, 0); buzon_indice.PonInt(0, 0); buzon_longitud.PonInt(0, buzon_mensaje.Longitud); // Buzon secreto = seguridad.GeneraSecreto(); // Buzon.CopiaDatos(secreto, this.buzon_secreto); Buzon.CopiaDatos(Seguridad.protocolo, this.buzon_protocolo); // CifradoRSA cifrado_RSA = new CifradoRSA(); try { cifrado_RSA.IniciaPublica(seguridad.clave_publica); cifrado_RSA.CifraPublica(buzon_texto, buzon_cifrado); } finally { cifrado_RSA.Termina(); } // conexion.EnviaSocket(buzon_mensaje, buzon_mensaje.Longitud); // seguridad.ImprimeEnvia( buzon_billete, buzon_indice, buzon_longitud, "RSA ( S1 | protocolo )"); // seguridad.EstableceSecreto(secreto); }