示例#1
0
        public static void Start()
        {
            string xmlFile       = "Baza.xml";          //source bitmap file
            string cipherFile    = "Ciphered_EBC.xml";  //result of encryption
            string plaintextFile = "Plainxml_EBC.xml";  //result of decryption
            string keyFile       = "SecretKey_EBC.txt"; //secret key storage

            Console.WriteLine("Symmetric Encryption Example - ECB mode");

            ///Generate secret key for appropriate symmetric algorithm and store it to 'keyFile' for further usage
            string secretKey = SecretKey.GenerateKey(AlgorithmType.DES);

            SecretKey.StoreKey(secretKey, keyFile);
            string eSecretKey = SecretKey.LoadKey(keyFile);

            Test_DES_Encrypt(xmlFile, cipherFile, eSecretKey);
            ///Test_AES_Encrypt(imgFile, cipherFile, eSecretKey);
            ///Test_3DES_Encrypt(imgFile, cipherFile, eSecretKey);
            Console.WriteLine("Encryption is done.");
            Console.ReadLine();

            Test_DES_Decrypt(cipherFile, plaintextFile, eSecretKey);
            ///Test_AES_Decrypt(cipherFile, plaintextFile, SecretKey.LoadKey(keyFile));
            ///Test_3DES_Decrypt(cipherFile, plaintextFile, SecretKey.LoadKey(keyFile));
            Console.WriteLine("Decryption is done.");
        }
示例#2
0
        public void PushTopic(Dictionary <byte[], byte[]> signedEncryptedAlarms)
        {
            /*
             * Dictionary<byte[], Alarm> alarms = new Dictionary<byte[], Alarm>();
             *
             *
             * foreach (byte[] sign in signedEncryptedAlarms.Keys)
             * {
             *  alarms.Add(AESInECB.DecryptAlarm(signedEncryptedAlarms[sign], SecretKey.LoadKey(secretKeyPath)));
             * }
             */


            foreach (var signedAlarmPair in signedEncryptedAlarms)
            {
                byte[] encryptedAlarm = signedAlarmPair.Value;
                byte[] signature      = signedAlarmPair.Key;
                Alarm  alarm          = AESInECB.DecryptAlarm(encryptedAlarm, SecretKey.LoadKey(secretKeyPath));


                if (AlarmValidator.Validate(alarm, encryptedAlarm, signature))
                {
                    _alarms.Add(alarm);
                    Console.WriteLine($"Subscriber received {alarm.ToString()}");
                    //string sign = Encoding.Unicode.GetString(signature);
                    string sign = Convert.ToBase64String(signature);
                    string id   = Guid.NewGuid().ToString();
                    writer.Write(alarm.ToString(), id, sign, AlarmValidator.GetSignatureCertificate().GetPublicKeyString());
                }
                else
                {
                    Console.WriteLine($"Alarm: {alarm} ; rejected.");
                }
            }
        }
示例#3
0
        public HttpResponseMessage GetDocumentPicture(string path)
        {
            if (path == null)
            {
                path = "default-placeholderCrypt.png";
            }

            var filePath = HttpContext.Current.Server.MapPath("~/Images/" + path);

            if (!File.Exists(filePath))
            {
                path     = "default-placeholderCrypt.png";
                filePath = HttpContext.Current.Server.MapPath("~/Images/" + path);
            }
            var ext = Path.GetExtension(filePath);


            byte[] contents = null;

            string eSecretKey = SecretKey.LoadKey(HttpRuntime.AppDomainAppPath + "Images\\SecretKey.txt");

            AES_Symm_Algorithm.DecryptFile(filePath, out contents, eSecretKey);


            MemoryStream ms = new MemoryStream(contents);

            var response = Request.CreateResponse(HttpStatusCode.OK);

            response.Content = new StreamContent(ms);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/" + ext);

            return(response);
        }
示例#4
0
        internal void StartPublishing()
        {
            Alarm alarm;

            while (true)
            {
                int risk = GenerateRisk();
                AlarmMessagesTypes msg = GenerateMessageType(risk);
                alarm = new Alarm(DateTime.Now, risk, msg);

                //this.Publish(alarm,CreateSignature(alarm.Message,signCertCN));
                try
                {
                    byte[] encrytpedAlarm = AESInECB.EncryptAlarm(alarm, SecretKey.LoadKey(secretKeyPath));
                    byte[] signature      = CreateSignature(encrytpedAlarm, signCertCN);

                    this.Publish(encrytpedAlarm, signature);
                    Console.WriteLine($"Published: {alarm}");
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }



                Thread.Sleep(PublishingInterval);
            }
        }
示例#5
0
        public void Subscribe(byte[] encryptedFrom, byte[] encryptedTo)
        {
            Timestamp = DateTime.Now;
            int from = AESInECB.DecryptInteger(encryptedFrom, SecretKey.LoadKey(secretKeyPath));
            int to   = AESInECB.DecryptInteger(encryptedTo, SecretKey.LoadKey(secretKeyPath));

            From = from; To = to;
            //List<Alarm> data = Repository.alarms.FindAll(x => x.Risk > from && x.Risk < to);
            Console.WriteLine($"Subccriber XYZ subcribed to [{from}-{to}]");
            SendDelta();
        }
示例#6
0
 public void Publish(byte[] encryptedAlarm, byte[] sign)
 {
     if (DigitalSignature.Verify(encryptedAlarm, HashAlgorithm.SHA1, sign, GetSignatureCertificate()))
     {
         Alarm alarm = AESInECB.DecryptAlarm(encryptedAlarm, SecretKey.LoadKey(secretKeyPath));
         Repository.signedAlarms.Add(sign, alarm);
         Console.WriteLine(alarm);
     }
     else
     {
         Console.WriteLine("Signature is INVALID for");
     }
 }
示例#7
0
        static void Main(string[] args)
        {
            /// Define the expected service certificate. It is required to establish cmmunication using certificates.
            string srvCertCN = "PubSubService";


            NetTcpBinding binding = new NetTcpBinding();

            binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
            /// Use CertManager class to obtain the certificate based on the "srvCertCN" representing the expected service identity.
            X509Certificate2 srvCert = CertManager.GetCertificateFromStorage(StoreName.TrustedPeople, StoreLocation.LocalMachine, srvCertCN);

            EndpointAddress address = new EndpointAddress(new Uri("net.tcp://localhost:9999/Subscribers"),
                                                          new X509CertificateEndpointIdentity(srvCert));

            InstanceContext instanceContext = new InstanceContext(new SubscriberCallbackHandler());

            using (SubscriberCallbackProxy proxy = new SubscriberCallbackProxy(instanceContext, binding, address))
            {
                Console.WriteLine("Define minimum and maximum risk of iterest(integer_integer):");
                string   input = Console.ReadLine();
                string[] ints = input.Split(' ');
                int      minRisk, maxRisk;
                while (ints.Length != 2 || !Int32.TryParse(ints[0], out minRisk) || !Int32.TryParse(ints[1], out maxRisk))
                {
                    Console.WriteLine("Enter 2 proper integers separeted by a space: ");
                    input = Console.ReadLine();
                    ints  = input.Split(' ');
                }


                proxy.Subscribe(AESInECB.EncriptInteger(minRisk, SecretKey.LoadKey(secretKeyPath)),
                                AESInECB.EncriptInteger(maxRisk, SecretKey.LoadKey(secretKeyPath)));
                Console.WriteLine($"Subscribed to [{minRisk}-{maxRisk}]");

                Console.ReadLine();
                Console.ReadLine();
            }
        }
示例#8
0
        public static void StartCBC()
        {
            string imgFile       = "Baza.xml";          //source bitmap file
            string cipherFile    = "Ciphered_CBC.xml";  //result of encryption
            string plaintextFile = "Plaintext_CBC.xml"; //result of decryption
            string keyFile       = "SecretKey_CBC.txt"; //secret key storage

            Console.WriteLine("Symmetric Encryption Example - CBC mode");

            string secretKey = SecretKey.GenerateKey(AlgorithmType.DES);

            SecretKey.StoreKey(secretKey, keyFile);
            string eSecretKey = SecretKey.LoadKey(keyFile);


            Test_DES_Encrypt(imgFile, cipherFile, eSecretKey);

            Console.WriteLine(" CBC Encryption is done.");
            Console.ReadLine();

            Test_DES_Decrypt(cipherFile, plaintextFile, eSecretKey);

            Console.WriteLine(" CBC Decryption is done.");
        }
示例#9
0
        public void SendDelta()
        {
            while (true)
            {
                //TODO lock
                Dictionary <byte[], Alarm> data = Repository.signedAlarms.Where(
                    x => x.Value.Risk >= From && x.Value.Risk <= To && x.Value.CreationTime > Timestamp).ToDictionary(x => x.Key, x => x.Value);
                if (data.Count != 0)
                {
                    Timestamp = DateTime.Now;

                    // List<byte[]> encryptedAlarms = new List<byte[]>();
                    Dictionary <byte[], byte[]> signedEncryptedAlarms = new Dictionary <byte[], byte[]>();

                    foreach (byte[] key in data.Keys)
                    {
                        signedEncryptedAlarms.Add(key, AESInECB.EncryptAlarm(data[key], SecretKey.LoadKey(secretKeyPath)));
                    }

                    this.Callback.PushTopic(signedEncryptedAlarms);
                    data.Clear();
                }
                Thread.Sleep(50);
            }
        }
示例#10
0
        public IHttpActionResult EditUser()
        {
            var httpRequest = HttpContext.Current.Request;

            string imageName = null;


            AppUser appUser;

            try
            {
                var username = User.Identity.Name;

                var user = _unitOfWork.AppUsers.Find(u => u.Email == username).FirstOrDefault();
                if (user == null)
                {
                    return(BadRequest("Data could not be retrieved, try to relog."));
                }
                appUser = user;
            }
            catch
            {
                return(BadRequest("Data could not be retrieved, try to relog."));
            }


            var jsonObj = JsonConvert.SerializeObject(appUser, Formatting.None, setting);
            var eTag    = ETagHelper.GetETag(Encoding.UTF8.GetBytes(jsonObj));



            if (HttpContext.Current.Request.Headers.Get(ETagHelper.MATCH_HEADER) == null || HttpContext.Current.Request.Headers[ETagHelper.MATCH_HEADER].Trim('"') != eTag)
            {
                HttpContext.Current.Response.Headers.Add("Access-Control-Expose-Headers", ETagHelper.ETAG_HEADER);
                HttpContext.Current.Response.Headers.Add(ETagHelper.ETAG_HEADER, JsonConvert.SerializeObject(eTag));

                return(new StatusCodeResult(HttpStatusCode.PreconditionFailed, new HttpRequestMessage()));
            }

            appUser.FullName      = httpRequest["FullName"].Trim();
            appUser.BirthDate     = DateTime.Parse(httpRequest["BirthDate"]);
            appUser.Email         = httpRequest["Email"].Trim();
            appUser.ProfileEdited = true;

            if (appUser.DocumentPicture == null || appUser.DocumentPicture == "")
            {
                var postedFile = httpRequest.Files["Image"];
                if (postedFile != null)
                {
                    imageName = new string(Path.GetFileNameWithoutExtension(postedFile.FileName).Take(10).ToArray()).Replace(" ", "-");
                    imageName = imageName + DateTime.Now.ToString("yymmssfff") + Path.GetExtension(postedFile.FileName);
                    var filePath = HttpContext.Current.Server.MapPath("~/Images/" + imageName);

                    appUser.DocumentPicture = imageName;



                    byte[] fileData = null;
                    using (var binaryReader = new BinaryReader(postedFile.InputStream))
                    {
                        fileData = binaryReader.ReadBytes(postedFile.ContentLength);
                    }


                    string eSecretKey = SecretKey.LoadKey(HttpRuntime.AppDomainAppPath + "Images\\SecretKey.txt");
                    AES_Symm_Algorithm.EncryptFile(fileData, filePath, eSecretKey);
                }
            }

            jsonObj = JsonConvert.SerializeObject(appUser, Formatting.None, setting);
            eTag    = ETagHelper.GetETag(Encoding.UTF8.GetBytes(jsonObj));

            HttpContext.Current.Response.Headers.Add("Access-Control-Expose-Headers", ETagHelper.ETAG_HEADER);
            HttpContext.Current.Response.Headers.Add(ETagHelper.ETAG_HEADER, JsonConvert.SerializeObject(eTag));



            try
            {
                _unitOfWork.AppUsers.Update(appUser);
                _unitOfWork.Complete();
            }
            catch
            {
                return(BadRequest("Profile could not be edited."));
            }

            return(Ok(appUser));
        }