internal void EstableceSecreto(Buzon secreto) { Depuracion.Asevera(Seguridad.longitud_secreto == CifradoAES.BytesClave); Depuracion.Asevera(CifradoAES.BytesClave == CalculoHMAC.BytesValor); // if (cifrado_AES_local != null) { cifrado_AES_local.Termina(); } cifrado_AES_local = new CifradoAES(); if (cifrado_AES_remoto != null) { cifrado_AES_remoto.Termina(); } cifrado_AES_remoto = new CifradoAES(); if (calculo_HMAC_local != null) { calculo_HMAC_local.Termina(); } calculo_HMAC_local = new CalculoHMAC(); if (calculo_HMAC_remoto != null) { calculo_HMAC_remoto.Termina(); } calculo_HMAC_remoto = new CalculoHMAC(); // EstableceSecreto(secreto, true, true, "clave_encripta_cliente"); EstableceSecreto(secreto, true, false, "clave_encripta_servicio"); EstableceSecreto(secreto, false, true, "clave_autentica_cliente"); EstableceSecreto(secreto, false, false, "clave_autentica_servicio"); }
private void EstableceSecreto(Buzon secreto, bool encripta, bool cliente, string funcion) { Buzon mensaje = new Buzon(); mensaje.ReservaYCopia(funcion); Buzon clave = new Buzon(); clave.Reserva(Seguridad.longitud_secreto); // CalculoHMAC calculo_HMAC = new CalculoHMAC(); try { calculo_HMAC.Inicia(secreto); calculo_HMAC.Calcula(mensaje, clave); } finally { calculo_HMAC.Termina(); } // if (encripta) { if (cliente) { if (de_cliente) { cifrado_AES_local.Inicia(clave); } if (de_servicio) { cifrado_AES_remoto.Inicia(clave); } } else { if (de_cliente) { cifrado_AES_remoto.Inicia(clave); } if (de_servicio) { cifrado_AES_local.Inicia(clave); } } } else { if (cliente) { if (de_cliente) { calculo_HMAC_local.Inicia(clave); } if (de_servicio) { calculo_HMAC_remoto.Inicia(clave); } } else { if (de_cliente) { calculo_HMAC_remoto.Inicia(clave); } if (de_servicio) { calculo_HMAC_local.Inicia(clave); } } } }