public Token Signin(LoginRequest loginRequest)
        {
            var password = CryptoTools.ComputeHashMd5(loginRequest.Password);
            var user     = _userService.Get(loginRequest.Username);

            if (user == null)
            {
                return(null);
            }

            if (user.Password == password)
            {
                //criado um token específico para ficar mais simples e performático
                //o mesmo será utilizado na validação das requisições
                var token = new Token
                {
                    Id       = user.Id,
                    Username = user.Username,
                    Password = user.Password
                };

                return(token);
            }

            return(null);
        }
        public async Task <ActionResult> Create(string deviceSessionId, string userName, string password)
        {
            //Create the Auth Server User
            var hash = CryptoTools.GenerateHash(password);
            var user = await DataContext.UserCollection.CreateAsync(userName, hash.Hash, hash.Salt).ConfigureAwait(false);

            //Generate Token for this User Authenticated
            var scheme = Request.Url.Scheme;
            var server = Request.Url.Host;
            var port   = Request.Url.Port;

            var content     = new StringContent(string.Format("grant_type=password&username={0}&password={1}&session_id={2}", userName, password, deviceSessionId), Encoding.UTF8, "application/x-www-form-urlencoded");
            var authRequest = new HttpClient();


            authRequest.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(Request.Headers["Authorization"]);
            var response = await authRequest.PostAsync(scheme + "://" + server + ":" + port + "/" + "/oauth2/token", content);

            if (response.IsSuccessStatusCode)
            {
                var resp = await response.Content.ReadAsStringAsync();

                JObject responseItems    = JObject.Parse(resp);
                var     accessTokenModel = new AccessToken()
                {
                    access_token = (string)responseItems["access_token"],
                    token_type   = (string)responseItems["token_type"],
                    expires_in   = (string)responseItems["expires_in"]
                };
                return(View(accessTokenModel));
            }

            throw new InvalidOperationException("Error creating user");
        }
Пример #3
0
        public async Task <Token> LoginAsync(LoginRequest loginRequest)
        {
            var result = await GetAllAsync(x => x.Login.ToUpper() == loginRequest.Login.ToUpper());

            var user = result.FirstOrDefault();

            if (user == null)
            {
                return(null);
            }

            var password = CryptoTools.ComputeHashMd5(loginRequest.Password);

            if (user.Password != password)
            {
                return(null);
            }

            var token = new Token
            {
                UserId     = user.Id,
                UserName   = user.Name,
                Login      = user.Login,
                ExpirateAt = DateTime.Now.AddHours(12)
            };

            return(token);
        }
Пример #4
0
        /// <summary>
        /// Opens and decrypts AccountList asynchronous from file and loads into ObservableCollection<AccountList>.
        /// If null, will create new ObservableCollection<AccountModel>()
        /// </summary>
        public async Task <bool> OpenAccountList()
        {
            if (settings != null)
            {
                byte[] o = await FileManager.OpenFile(settings.saveFileLocation);

                KeyFile key = await CryptoTools.LoadStoredKeyFile(settings.keyLocation);

                // MessageBox.Show(Convert.ToBase64String(key.key));
                if (o != null && o.Length > 0 && key != null)
                {
                    object decryptedData = CryptoTools.DecryptData(key.key, key.IV, o);
                    if (decryptedData != null)
                    {
                        AccountsList = (BetterObservableCollection <AccountModel>)decryptedData;
                    }
                }
                else
                {
                    AccountsList = new BetterObservableCollection <AccountModel>();
                    SaveAccountList();
                }
                Locked = false;
            }
            AccountsList.CollectionChanged += AccountListChanged;
            return(true);
        }
Пример #5
0
        /// <summary>
        /// Asynchronous save of ObservableCollection<AccountList>.
        /// </summary>
        public async void SaveAccountList()
        {
            if (AccountsList == null)
            {
                return;
            }

            //remove all empty rows.
            for (int i = AccountsList.Count - 1; i >= 0; i--)
            {
                if (AccountsList[i].IsEmpty)
                {
                    AccountsList.RemoveAt(i);
                }
            }
            KeyFile key;

            if (File.Exists(settings.keyLocation))
            {
                //load key from appdata.
                key = await CryptoTools.LoadStoredKeyFile(settings.keyLocation);
            }
            else
            {
                //create new keyfile if none created yet in appdata.
                key = await CryptoTools.CreateStoredKeyFile(settings.keyLocation);
            }
            //encrypt accountlist into byte array.
            byte[] listAsBytes = CryptoTools.EncryptData(key.key, key.IV, AccountsList);
            //save encrypted accountlist
            await FileManager.SaveFileAsync(settings.saveFileLocation, listAsBytes, false);
        }
Пример #6
0
        public UserManageResult SetPassword(string id, SecureString password)
        {
            bool passwordIsValid = validatePassword(password.Unsecure());

            if (!passwordIsValid)
            {
                return new UserManageResult {
                           Success = false,
                           Errors  = new List <string> {
                               "Password does not meet minimum complexity requirements."
                           }
                }
            }
            ;

            byte[]       salt = CryptoTools.CreateSalt();
            IdentityUser user = _bifUserStore.LoadUserById(id);

            user.Entropy      = salt;
            user.PasswordHash = password.HashValue(salt);

            _bifUserStore.Update();

            return(new UserManageResult {
                Success = true
            });
        }
Пример #7
0
        private void btnHash_Click(object sender, EventArgs e)
        {
            /*
             * uint t;
             * int zaman = Environment.TickCount;
             *
             * for (uint i = 5000000; i < 5225000; i++)
             *  t = CryptoTools.OneWayFunction32Bit(i);
             *
             * zaman = Environment.TickCount - zaman;
             *
             * MessageBox.Show(zaman.ToString());
             */


            try
            {
                string hash = CryptoTools.OneWayFunction32Bit(txtInput.Text.ToByteArray()).ToByteArray().ToStringValue();
                txtOutput.Text    = hash;
                txtHashInput.Text = hash;
            }
            catch (Exception exp)
            {
                MessageBox.Show("MESSAGE: " + exp.Message + "\r\nSTACK TRACE: " + exp.StackTrace, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Пример #8
0
        public void Seed()
        {
            var centros = Centros.AddRange(new[]
            {
                new Centro()
                {
                    IdCentro = "CentroA", ListaAulas = new [] { "1-1", "1-2", "2-1" }, ClaveUsuario = "1234", ClaveAdmin = "admin1234"
                },
                new Centro()
                {
                    IdCentro = "CentroB", ListaAulas = new [] { "a", "b", "c" }, ClaveUsuario = "aaa", ClaveAdmin = "adminaaa"
                },
                new Centro()
                {
                    IdCentro = "CentroC", ListaAulas = new [] { "A1-42" }, ClaveUsuario = "bbb", ClaveAdmin = "adminbbb"
                },
            }).ToArray();

            foreach (Centro centro in centros)
            {
                centro.SaltUsuario  = CryptoTools.GenerateSalt();
                centro.ClaveUsuario = CryptoTools.GenerateHash(centro.ClaveUsuario, centro.SaltUsuario);
                centro.SaltAdmin    = CryptoTools.GenerateSalt();
                centro.ClaveAdmin   = CryptoTools.GenerateHash(centro.ClaveAdmin, centro.SaltAdmin);
            }

            Incidencias.AddRange(new[]
            {
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 1", Comentario = "Comentario 1", Centro = centros[1], Aula = "b", Equipo = "E11", Cerrada = true
                },
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 2", Comentario = "Comentario 2", Centro = centros[0], Aula = "1-1", Equipo = "E26", Cerrada = true
                },
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 3", Comentario = "Comentario 3", Centro = centros[0], Aula = "2-1", Equipo = "E27", Cerrada = false
                },
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 4", Comentario = "Comentario 4", Centro = centros[1], Aula = "c", Equipo = "E32", Cerrada = false
                },
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 5", Comentario = "Comentario 5", Centro = centros[2], Aula = "A1-42", Equipo = "E49", Cerrada = false
                },
                new Incidencia()
                {
                    Timestamp = DateTime.UtcNow, Asunto = "Incidencia 6", Comentario = "Comentario 6", Centro = centros[2], Aula = "A1-42", Equipo = "E50", Cerrada = false
                }
            });

            SaveChanges();
        }
Пример #9
0
        public void CryptoTools_Create3Des()
        {
            var prov = CryptoTools.CreateSymmetricCryptoProvider("3DES");

            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(TripleDESCryptoServiceProvider), prov.GetType());

            prov = CryptoTools.CreateSymmetricCryptoProvider("3des");
            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(TripleDESCryptoServiceProvider), prov.GetType());
        }
Пример #10
0
        public void CryptoTools_CreateRc2()
        {
            var prov = CryptoTools.CreateSymmetricCryptoProvider("RC2");

            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(RC2CryptoServiceProvider), prov.GetType());

            prov = CryptoTools.CreateSymmetricCryptoProvider("rc2");
            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(RC2CryptoServiceProvider), prov.GetType());
        }
Пример #11
0
        public void CryptoTools_CreateRijndael()
        {
            var prov = CryptoTools.CreateSymmetricCryptoProvider("RIJNDAEL");

            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(RijndaelManaged), prov.GetType());

            prov = CryptoTools.CreateSymmetricCryptoProvider("rijndael");
            Assert.IsNotNull(prov);
            Assert.AreEqual(typeof(RijndaelManaged), prov.GetType());
        }
Пример #12
0
        private static string GetCacheKey(string folderPath, bool ignoreSystemAssemblies = true, params string[] ignoredAssemblies)
        {
            var cacheKey = string.Empty;

            var ignoredString = string.Join(",", ignoredAssemblies);

            var result = $"{folderPath}_{ignoredAssemblies}_{ignoredString}";

            cacheKey = CryptoTools.CalculateMD5Hash(result);

            return(cacheKey);
        }
Пример #13
0
 /// <summary>
 /// demo encryption method
 /// </summary>
 public byte[] Encrypt(byte[] data, SecureString mutatedKey)
 {
     using (var encryptor = Aes.Create()) {
         using (var pdb = CryptoTools.DeriveBytes(mutatedKey, salt)) {
             encryptor.Key = pdb.GetBytes(32);
             encryptor.IV  = pdb.GetBytes(16);
         }
         using (var ms = new MemoryStream()) {
             using (var cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                 cs.Write(data, 0, data.Length);
             return(ms.ToArray());
         }
     }
 }
Пример #14
0
        internal void GenerateKeys()
        {
            using (var rsa = new RSACryptoServiceProvider(2048))
            {
                rsa.PersistKeyInCsp = false; //This is important because we don't want to store these keys in the windows files system

                string publicPrivateKeyXML = rsa.ToXmlString(true);
                string publicOnlyKeyXML    = rsa.ToXmlString(false);

                string publicPrivateKeystring = CryptoTools.UrlBase64Encode(publicPrivateKeyXML);
                string publicOnlyKeystring    = CryptoTools.UrlBase64Encode(publicOnlyKeyXML);

                // do stuff with keys...
            }
        }
Пример #15
0
        public void ChangePassword(ChangePasswordRequest changePasswordRequest)
        {
            var oldPassword = CryptoTools.ComputeHashMd5(changePasswordRequest.OldPassword);
            var user        = GetAll(x =>
                                     x.Login.ToUpper() == changePasswordRequest.Login.ToUpper() &&
                                     x.Password == oldPassword).FirstOrDefault();

            if (user == null)
            {
                throw new ValidatorException("Old Password is invalid!");
            }

            user.Password = CryptoTools.ComputeHashMd5(changePasswordRequest.NewPassword);

            base.Update(user);
        }
        public Token Signup(User user)
        {
            user.Password = CryptoTools.ComputeHashMd5(user.Password);
            _userService.Save(user);

            if (user.Id > 0)
            {
                var token = new Token
                {
                    Id       = user.Id,
                    Username = user.Username,
                    Password = user.Password
                };

                return(token);
            }
            return(null);
        }
Пример #17
0
        public UserManageResult CreateUser(string email, SecureString password)
        {
            User user = _userStore.LoadUserByEmail(email);

            if (user != null)
            {
                return new UserManageResult {
                           Success = false,
                           Errors  = new List <string> {
                               "User already exists."
                           }
                }
            }
            ;

            bool passwordIsValid = validatePassword(password.Unsecure());

            if (!passwordIsValid)
            {
                return new UserManageResult {
                           Success = false,
                           Errors  = new List <string> {
                               "Password does not meet minimum complexity requirements."
                           }
                }
            }
            ;

            byte[] salt = CryptoTools.CreateSalt();
            user = new User
            {
                Id           = Guid.NewGuid(),
                Entropy      = salt,
                EmailAddress = email.Trim(),
                PasswordHash = password.HashValue(salt)
            };
            _userStore.Add(user);
            _userStore.Update();

            return(new UserManageResult
            {
                Success = true
            });
        }
Пример #18
0
        internal static NetworkCredential Get(NetworkCredentialXML value)
        {
            if (value == null)
            {
                return(null);
            }
            string password;

            if (value.EncryptedPassword != null)
            {
                byte[] bytes = CryptoTools.Decrypt(value.EncryptedPassword, NetworkCredentialXML.PwdEncryptionKey);
                password = Encoding.Unicode.GetString(bytes);
            }
            else
            {
                password = null;
            }
            return(new NetworkCredential(value.Username, password, value.Domain));
        }
Пример #19
0
        internal static NetworkCredentialXML Get(NetworkCredential nc)
        {
            if (nc == null)
            {
                return(null);
            }
            NetworkCredentialXML networkCredentialXML = new NetworkCredentialXML();

            networkCredentialXML.Username = nc.UserName;
            networkCredentialXML.Domain   = nc.Domain;
            if (string.IsNullOrEmpty(nc.Password))
            {
                networkCredentialXML.EncryptedPassword = null;
            }
            else
            {
                networkCredentialXML.EncryptedPassword = CryptoTools.Encrypt(Encoding.Unicode.GetBytes(nc.Password), NetworkCredentialXML.PwdEncryptionKey);
            }
            return(networkCredentialXML);
        }
Пример #20
0
        public void TestSignin()
        {
            var user = new User();

            user.Name     = "Fake Name";
            user.Password = CryptoTools.ComputeHashMd5("blablabla");
            user.Username = "******";

            repository.Insert(user);
            repository.Save();

            var loginRequest = new LoginRequest();

            loginRequest.Username = "******";
            loginRequest.Password = "******";

            Token token = authService.Signin(loginRequest);

            Assert.True(token != null, "Signin implemented!");
        }
Пример #21
0
        void ThreadedFalsePositives()
        {
            int test           = 100;
            int falsePositives = 0;

            UpdateLogWithDate("Starting to find preimages of hashes of " + test + " known random inputs.");
            for (int i = 0; i < test; i++)
            {
                byte[] byt = new byte[4];
                rnd.NextBytes(byt);
                byt[1] = 0; byt[2] = 0; byt[3] = 0;
                int  tk       = rnd.Next(test); tk++;
                uint deger    = byt.ToUInt32();
                uint sondeger = 0;
                for (int j = 0; j < tk; j++)
                {
                    if (j == tk - 1)
                    {
                        sondeger = deger;
                    }
                    deger = CryptoTools.OneWayFunction32Bit(deger);
                }
                // yukarıdaki for'un yaptığı iş: hash(sondeger) = deger

                uint?kntrl = hll.FindPreimageValue(deger);
                if (kntrl != null)
                {
                    uint kontrol = (uint)kntrl;
                    UpdateLogWithDate((i + 1) + "/100: Plaintext:" + sondeger.ToByteArray().ToStringValue() + " Hash: " + deger.ToByteArray().ToStringValue() + " Preimage of hash: " + kontrol.ToByteArray().ToStringValue());
                    // eğer bulunan preimage gerçek değerin hash'ine eşitse
                    if (kontrol != sondeger)
                    {
                        falsePositives++;
                    }
                }
            }

            UpdateLogWithDate("Number of false positives: " + falsePositives + " over " + test + " tries.");
        }
Пример #22
0
        /// <summary>
        /// Load app settings.
        /// </summary>
        /// <returns></returns>
        public async Task <bool> LoadSettings()
        {
            byte[] o = await FileManager.OpenFile(Settings.SettingsFileURI);

            if (o == null || o.Length <= 0)
            {
                settings = new Settings();
                SaveSettings();
            }
            else
            {
                BinaryFormatter bf = new BinaryFormatter();
                settings = (Settings)bf.Deserialize(new MemoryStream(o));
                if (settings == null)
                {
                    settings = new Settings();
                    SaveSettings();
                }
            }

            o = await FileManager.OpenFile(settings.keyLocation);

            if (o == null || o.Length < 0)
            {
                await CryptoTools.CreateStoredKeyFile(settings.keyLocation); //new KeyFile();
            }

            /*   else
             * {
             *     keyFile = await CryptoTools.LoadStoredKeyFile(settings.keyLocation);
             *   //  BinaryFormatter bf = new BinaryFormatter();
             *  //   keyFile = (KeyFile)bf.Deserialize(new MemoryStream(o));
             *   //  if(keyFile == null)
             *    // {
             *    //     keyFile = new KeyFile();
             *    // }
             * }*/
            return(true);
        }
Пример #23
0
        public ActionResult Index(LoginQuery query)
        {
            var centro = contexto.Centros.FirstOrDefault(c => c.IdCentro == query.Centro);

            if (centro == null)
            {
                ViewBag.MensajeError = "Centro inválido.";
                return(View());
            }

            string action = null;
            var    sesion = new SesionUsuario()
            {
                Centro = centro
            };

            if (CryptoTools.ValidateHash(query.Clave, centro.SaltUsuario, centro.ClaveUsuario))
            {
                action         = "Create";
                sesion.EsAdmin = false;
            }
            else if (CryptoTools.ValidateHash(query.Clave, centro.SaltAdmin, centro.ClaveAdmin))
            {
                action         = "Incidencias";
                sesion.EsAdmin = true;
            }
            else
            {
                ViewBag.MensajeError = "Contraseña incorrecta.";
                SesionUsuario        = null;
                return(View());
            }

            SesionUsuario = sesion;
            return(RedirectToAction(action));
        }
Пример #24
0
        public void TestSave()
        {
            var user = new User();

            user.Name     = "Fake Name Product";
            user.Password = CryptoTools.ComputeHashMd5("blablablaProduct");
            user.Username = "******";
            userService.Save(user);

            var product1 = new Product();

            product1.Name  = "Fake Product 1";
            product1.Price = 100;
            productService.Save(product1);

            var product2 = new Product();

            product2.Name  = "Fake Product 2";
            product2.Price = 200;
            productService.Save(product2);

            var idsProduct = new List <long> {
                product1.Id, product2.Id
            };

            var orderRequest = new OrderRequest();

            orderRequest.IdsProducts = idsProduct;
            orderRequest.IdUser      = user.Id;

            orderService.Save(orderRequest);

            Order order = repository.GetAll(true).FirstOrDefault();

            Assert.True(order != null && order.Items.Count() == 2 && order.User.Id == user.Id, "Save Order Ok!");
        }
Пример #25
0
 public void CryptoTools_UnknownAlgorithm()
 {
     CryptoTools.CreateSymmetricCryptoProvider("nicetry");
 }
Пример #26
0
 public void CryptoTools_UnknownAlgorithm()
 {
     Assert.Throws <ArgumentException>(() =>
                                       CryptoTools.CreateSymmetricCryptoProvider("nicetry"));
 }
Пример #27
0
 public override void Insert(User entity, string user = "******")
 {
     entity.Password = CryptoTools.ComputeHashMd5(entity.Password);
     base.Insert(entity, user);
 }