示例#1
0
 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");
 }
示例#2
0
        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);
                    }
                }
            }
        }