public NetworkController(ICSPRNGServer csprng) { _csprng = csprng; _connstrWallet = Config.ConnWallet; _connstrRec = Config.ConnRec; _connstrBlockchain = Config.ConnBlockchain; }
public static string Encrypt(string clearText, ICSPRNGServer csprng) { byte[] salt = new byte[16]; csprng.getRandomValues(salt); byte[] encBytes = null; byte[] clearBytes = Encoding.Unicode.GetBytes(clearText); using (Aes encryptor = Aes.Create()) { encryptor.KeySize = 256; encryptor.BlockSize = 128; encryptor.Mode = CipherMode.CBC; encryptor.Padding = PaddingMode.PKCS7; Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(csprng.Key(), salt, 1); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(clearBytes, 0, clearBytes.Length); } encBytes = ms.ToArray(); } } byte[] saltAndCipher = salt.Concat(encBytes).ToArray(); string saltAndCipherText = Convert.ToBase64String(saltAndCipher); return(saltAndCipherText); }
public static string Decrypt(string clearText, ICSPRNGServer csprng) { byte[] baseclear = Convert.FromBase64String(clearText); byte[] clearBytes = new byte[baseclear.Length - 16]; for (int i = 0; i < clearBytes.Length; i++) { clearBytes[i] = baseclear[i + 16]; } byte[] salt = baseclear.Take(16).ToArray(); using (Aes encryptor = Aes.Create()) { encryptor.KeySize = 256; encryptor.BlockSize = 128; encryptor.Mode = CipherMode.CBC; encryptor.Padding = PaddingMode.PKCS7; Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(csprng.Key(), salt, 1); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream(clearBytes)) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(cs)) { clearText = srDecrypt.ReadToEnd(); } } } } clearText = clearText.Replace("\0", ""); return(clearText); }
public static bool IsSecretValid(string guid, string secret, string connstrWallet, ICSPRNGServer csprng) { string errorMessage = ""; bool isError = false; bool loginSuccess = false; NpgsqlConnection conn = new NpgsqlConnection(connstrWallet); conn.Open(); try { NpgsqlCommand cmd = new NpgsqlCommand("sp_payloadByAccount", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new NpgsqlParameter("p_guid", guid)); NpgsqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow); if (reader.HasRows) { reader.Read(); if (reader.IsDBNull(0)) { isError = true; errorMessage = "No payload has been saved"; } else { string esecret = reader.GetString(3); string dsecret = Decrypt(esecret, csprng); if (dsecret == secret) { loginSuccess = true; } } } else { isError = true; errorMessage = "ErrAccount"; } reader.Dispose(); } catch (Exception ex) { isError = true; errorMessage = "ErrAccount"; } finally { conn.Close(); } return(loginSuccess); }