Winify – Diff between revs 28 and 41

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 28 Rev 41
Line 5... Line 5...
5 /////////////////////////////////////////////////////////////////////////// 5 ///////////////////////////////////////////////////////////////////////////
Line 6... Line 6...
6   6  
7 using System.IO; 7 using System.IO;
8 using System.Linq; 8 using System.Linq;
-   9 using System.Security.Cryptography;
Line 9... Line 10...
9 using System.Security.Cryptography; 10 using System.Threading.Tasks;
10   11  
11 namespace Winify.Utilities 12 namespace Winify.Utilities
12 { 13 {
Line 23... Line 24...
23 #region Public Methods 24 #region Public Methods
Line 24... Line 25...
24   25  
25 /////////////////////////////////////////////////////////////////////////// 26 ///////////////////////////////////////////////////////////////////////////
26 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 // 27 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
27 /////////////////////////////////////////////////////////////////////////// 28 ///////////////////////////////////////////////////////////////////////////
28 public static byte[] Encrypt(byte[] plain, string password) 29 public static async Task<byte[]> Encrypt(byte[] plain, string password)
29 { 30 {
30 using (var rijndael = Rijndael.Create()) 31 using (var rijndael = Rijndael.Create())
31 { 32 {
32 rijndael.BlockSize = 128; 33 rijndael.BlockSize = 128;
33 rijndael.Mode = CipherMode.CBC; 34 rijndael.Mode = CipherMode.CBC;
34 rijndael.KeySize = 256; 35 rijndael.KeySize = 256;
35 rijndael.Padding = PaddingMode.PKCS7; 36 rijndael.Padding = PaddingMode.PKCS7;
36 var salt = new byte[AESKeySaltBytes]; 37 var salt = new byte[AESKeySaltBytes];
37 Rng.GetBytes(salt); 38 Rng.GetBytes(salt);
38 var pdb = new Rfc2898DeriveBytes(password, salt, 1000); -  
39 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8); -  
40 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8); -  
41   -  
42 using (var memoryStream = new MemoryStream()) 39 using (var pdb = new Rfc2898DeriveBytes(password, salt, 1000))
43 { 40 {
-   41 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
-   42 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
44 using (var cryptoStream = 43  
45 new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)) 44 using (var memoryStream = new MemoryStream())
-   45 {
-   46 using (var cryptoStream =
-   47 new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
46 { 48 {
47 cryptoStream.Write(plain, 0, plain.Length); 49 await cryptoStream.WriteAsync(plain, 0, plain.Length);
Line 48... Line 50...
48 cryptoStream.Close(); 50 cryptoStream.Close();
Line 49... Line 51...
49   51  
50 var ciphertext = memoryStream.ToArray(); 52 var ciphertext = memoryStream.ToArray();
51   53  
52 return salt.Concat(ciphertext) 54 return salt.Concat(ciphertext).ToArray();
53 .ToArray(); 55 }
54 } 56 }
Line 55... Line 57...
55 } 57 }
56 } 58 }
57 } 59 }
58   60  
59 /////////////////////////////////////////////////////////////////////////// 61 ///////////////////////////////////////////////////////////////////////////
60 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 // 62 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
61 /////////////////////////////////////////////////////////////////////////// 63 ///////////////////////////////////////////////////////////////////////////
62 public static byte[] Decrypt(byte[] cipher, string password) 64 public static async Task<byte[]> Decrypt(byte[] cipher, string password)
63 { 65 {
64 using (var rijndael = Rijndael.Create()) 66 using (var rijndael = Rijndael.Create())
65 { 67 {
Line 66... Line 68...
66 rijndael.BlockSize = 128; 68 rijndael.BlockSize = 128;
67 rijndael.Mode = CipherMode.CBC; -  
Line 68... Line 69...
68 rijndael.KeySize = 256; 69 rijndael.Mode = CipherMode.CBC;
69 rijndael.Padding = PaddingMode.PKCS7; -  
Line 70... Line 70...
70   70 rijndael.KeySize = 256;
71 var salt = cipher.Take(16) -  
72 .ToArray(); -  
73   -  
74 var ciphertext = cipher.Skip(16) -  
75 .ToArray(); 71 rijndael.Padding = PaddingMode.PKCS7;
76   72  
-   73 var salt = cipher.Take(AESKeySaltBytes).ToArray();
-   74  
77 var pdb = new Rfc2898DeriveBytes(password, salt, 1000); 75 var ciphertext = cipher.Skip(AESKeySaltBytes).ToArray();
78 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8); 76  
-   77 using (var pdb = new Rfc2898DeriveBytes(password, salt, 1000))
-   78 {
-   79 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
79 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8); 80 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
80   81  
Line 81... Line 82...
81 using (var memoryStream = new MemoryStream()) 82 using (var memoryStream = new MemoryStream())
-   83 {
82 { 84 using (var cryptoStream =
83 using (var cryptoStream = 85 new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write))
84 new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write)) 86 {
85 { 87 await cryptoStream.WriteAsync(ciphertext, 0, ciphertext.Length);