/// <summary> /// Load a single maFile with the security credentials /// </summary> /// <param name="mafile">filename</param> /// <param name="password">optional password</param> /// <param name="steamid">steamid if known</param> /// <param name="iv">optional iv for decryption</param> /// <param name="salt">optional salt</param> private void LoadSDAFile(string mafile, string password = null, string steamid = null, string iv = null, string salt = null) { string data; if (File.Exists(mafile) == false || (data = File.ReadAllText(mafile)) == null) { throw new ApplicationException("Cannot read file " + mafile); } // decrypt if (string.IsNullOrEmpty(password) == false) { var ciphertext = Convert.FromBase64String(data); #if NETFX_4 using (var pbkdf2 = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), ImportedSDAEntry.PBKDF2_ITERATIONS)) #endif { var key = pbkdf2.GetBytes(ImportedSDAEntry.KEY_SIZE_BYTES); using (var aes256 = new RijndaelManaged()) { aes256.IV = Convert.FromBase64String(iv); aes256.Key = key; aes256.Padding = PaddingMode.PKCS7; aes256.Mode = CipherMode.CBC; try { using (var decryptor = aes256.CreateDecryptor(aes256.Key, aes256.IV)) { using (var ms = new MemoryStream(ciphertext)) { using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { using (var sr = new StreamReader(cs)) { data = sr.ReadToEnd(); } } } } } catch (CryptographicException) { throw new ApplicationException("Invalid password"); } } } } var token = JObject.Parse(data); var sdaentry = new ImportedSDAEntry(); sdaentry.Username = token.SelectToken("account_name") != null ? token.SelectToken("account_name").Value <string>() : null; sdaentry.SteamId = steamid; if (string.IsNullOrEmpty(sdaentry.SteamId)) { sdaentry.SteamId = token.SelectToken("Session.SteamID") != null ? token.SelectToken("Session.SteamID").Value <string>() : null; } if (string.IsNullOrEmpty(sdaentry.SteamId)) { sdaentry.SteamId = mafile.Split('.')[0]; } sdaentry.json = data; importSDAList.Items.Add(sdaentry); }
/// <summary> /// Load a single maFile with the security credentials /// </summary> /// <param name="mafile">filename</param> /// <param name="password">optional password</param> /// <param name="steamid">steamid if known</param> /// <param name="iv">optional iv for decryption</param> /// <param name="salt">optional salt</param> private void LoadSDAFile(string mafile, string password = null, string steamid = null, string iv = null, string salt = null) { string data; if (File.Exists(mafile) == false || (data = File.ReadAllText(mafile)) == null) { throw new ApplicationException("Cannot read file " + mafile); } // decrypt if (string.IsNullOrEmpty(password) == false) { byte[] ciphertext = Convert.FromBase64String(data); #if NETFX_4 using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), ImportedSDAEntry.PBKDF2_ITERATIONS)) #endif #if NETFX_3 Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), ImportedSDAEntry.PBKDF2_ITERATIONS); #endif { byte[] key = pbkdf2.GetBytes(ImportedSDAEntry.KEY_SIZE_BYTES); using (RijndaelManaged aes256 = new RijndaelManaged()) { aes256.IV = Convert.FromBase64String(iv); aes256.Key = key; aes256.Padding = PaddingMode.PKCS7; aes256.Mode = CipherMode.CBC; try { using (ICryptoTransform decryptor = aes256.CreateDecryptor(aes256.Key, aes256.IV)) { using (MemoryStream ms = new MemoryStream(ciphertext)) { using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { using (StreamReader sr = new StreamReader(cs)) { data = sr.ReadToEnd(); } } } } } catch (CryptographicException ) { throw new ApplicationException("Invalid password"); } } } } var token = JObject.Parse(data); var sdaentry = new ImportedSDAEntry(); sdaentry.Username = token.SelectToken("account_name") != null ? token.SelectToken("account_name").Value<string>() : null; sdaentry.SteamId = steamid; if (string.IsNullOrEmpty(sdaentry.SteamId) == true) { sdaentry.SteamId = token.SelectToken("Session.SteamID") != null ? token.SelectToken("Session.SteamID").Value<string>() : null; } if (string.IsNullOrEmpty(sdaentry.SteamId) == true) { sdaentry.SteamId = mafile.Split('.')[0]; } sdaentry.json = data; importSDAList.Items.Add(sdaentry); }