public NetworkController(ICSPRNGServer csprng)
 {
     _csprng            = csprng;
     _connstrWallet     = Config.ConnWallet;
     _connstrRec        = Config.ConnRec;
     _connstrBlockchain = Config.ConnBlockchain;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }