Esempio n. 1
0
        internal ResponseEncryptAESKey EncryptAESKey(byte[] privateKey, string publicKey)
        {
            string filePublic = publicKey + ".xml";
            ResponseEncryptAESKey response = new ResponseEncryptAESKey();

            FileWriter.WriteOnEvents(EventLevel.Info, "Buscando llave publica en: " + filePublic);
            if (File.Exists(filePublic))
            {
                FileWriter.WriteOnEvents(EventLevel.Info, "Llave publica encontrada!!!.");
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                try
                {
                    FileWriter.WriteOnEvents(EventLevel.Info, "Leyendo contenido llave publica.");
                    FileWriter.WriteOnEvents(EventLevel.Info, "Importando llave para proceso de cifrado");
                    RSA.ImportParameters(GetParamsFromString(filePublic));
                    response.encryptedKey = RSA.Encrypt(privateKey, true);
                    FileWriter.WriteOnEvents(EventLevel.Info, "Llave simetrica cifrada de manera exitosa.!!");
                    response.resul = true;
                }
                catch (System.Exception ex)
                {
                    FileWriter.WriteOnEvents(EventLevel.Exception, "Error en el proceso de cifrado de llave AES. " + ex.Message);
                    response.resul = false;
                }
            }
            else
            {
                FileWriter.WriteOnEvents(EventLevel.Info, "No se encontro la llave publica para cifrado.");
                response.resul = false;
            }
            return(response);
        }
Esempio n. 2
0
        public IActionResult EncryptMessage(InteractionModel interactModel)
        {
            //Generate url's file
            string filePublicKey = parameters.Value.FilesOutput + parameters.Value.PubKeyFile + interactModel.userNameDestination + interactModel.userNameOrigin;
            //Initialize models and classes
            SendMessageModel      sendFirstMessage = new SendMessageModel();
            RSAEncryption         rsaEncrypt       = new RSAEncryption();
            RSASigning            rsaSigning       = new RSASigning(interactModel.userNameDestination + interactModel.userNameOrigin);
            AESEncryption         aesEncryption    = new AESEncryption(parameters.Value.KeyAESSize);
            ResponseSignData      responseSign     = new ResponseSignData();
            ResponseSignData      responseSignId   = new ResponseSignData();
            ResponseEncryptAES    responseAES      = new ResponseEncryptAES();
            ResponseEncryptAESKey responseAESKey   = new ResponseEncryptAESKey();

            // Looking for partner RSA public key
            if (rsaEncrypt.KeysPartnerExists(interactModel.userNameDestination + interactModel.userNameOrigin, filePublicKey))
            {
                FileWriter.WriteOnEvents(EventLevel.Info, "Llaves RSA para cifrado encontradas.");
                FileWriter.WriteOnEvents(EventLevel.Info, "Iniciando firmado de mensaje.");
                //Sign data with RSA Private Key
                responseSign = rsaSigning.signData(interactModel.mensaje);
                if (responseSign.result)
                {
                    //Encrypt Message
                    if (aesEncryption.generateProperties())
                    {
                        responseAES = aesEncryption.EncryptMessage(interactModel.mensaje);
                        if (!responseAES.result)
                        {
                            FileWriter.WriteOnEvents(EventLevel.Error, "Error en el proceso de cifrado de mensaje, verifique los eventos previos.");
                            return(BadRequest(sendFirstMessage));
                        }
                    }
                }
                else
                {
                    FileWriter.WriteOnEvents(EventLevel.Error, "Falla en intento de firma de mensaje, verificar logs anteriores.");
                    return(BadRequest(sendFirstMessage));
                }
            }
            else
            {
                FileWriter.WriteOnEvents(EventLevel.Error,
                                         "Imposible cifrar mensaje, llaves RSA para origen:" +
                                         interactModel.userNameOrigin + "\tdestino:" + interactModel.userNameDestination + " no encontradas");
                return(BadRequest(sendFirstMessage));
            }
            //Encrypt AES Key
            if (responseAES.privateKey != null)
            {
                FileWriter.WriteOnEvents(EventLevel.Info, "Iniciando proceso de cifrado llaves AES con RSA");
                responseAESKey = rsaEncrypt.EncryptAESKey(responseAES.privateKey, filePublicKey);
            }
            else
            {
                FileWriter.WriteOnEvents(EventLevel.Error, "Error en cifrado llave AES con RSA, no existe la llave de AES.");
                return(BadRequest(sendFirstMessage));
            }
            //Generate de sign for server identification
            //responseSignId = rsaSigning.signData(interactModel.userNameOrigin+interactModel.userNameDestination);
            //if(!responseSignId.result){
            //     FileWriter.WriteOnEvents(EventLevel.Error,"Falla en intento de firma de identificacion contra servidor, verificar logs anteriores.");

            //     return BadRequest(sendFirstMessage);
            // }
            //Call the server service and send the data model
            //ServerRequest server = new ServerRequest(parameters.Value.EndpointServer,parameters.Value.SendFirstMessage,parameters.Value.GetRequest);

            sendFirstMessage.encryptedMessage    = responseAES.encryptedData;
            sendFirstMessage.encryptSignature    = responseSign.signData;
            sendFirstMessage.encryptedKey        = responseAESKey.encryptedKey;
            sendFirstMessage.idSignature         = responseSignId.signData;
            sendFirstMessage.initVector          = responseAES.InitVector;
            sendFirstMessage.userNameOrigin      = interactModel.userNameOrigin;
            sendFirstMessage.userNameDestination = interactModel.userNameDestination;

            FileWriter.WriteOnEvents(EventLevel.Info, "Solicitud de envio de llave exitoso.");
            return(Ok(sendFirstMessage));
        }