Winify – Diff between revs 28 and 41

Subversion Repositories:
Rev:
Show entire fileRegard 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);
-   39 using (var pdb = new Rfc2898DeriveBytes(password, salt, 1000))
38 var pdb = new Rfc2898DeriveBytes(password, salt, 1000); 40 {
39 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8); 41 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
Line 40... Line 42...
40 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8); 42 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
41   43  
42 using (var memoryStream = new MemoryStream()) 44 using (var memoryStream = new MemoryStream())
43 { 45 {
44 using (var cryptoStream = 46 using (var cryptoStream =
45 new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)) 47 new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
46 { 48 {
Line 47... Line 49...
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();
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 }
Line 54... Line 56...
54 } 56 }
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())
Line 65... Line 67...
65 { 67 {
66 rijndael.BlockSize = 128; -  
Line 67... Line 68...
67 rijndael.Mode = CipherMode.CBC; 68 rijndael.BlockSize = 128;
68 rijndael.KeySize = 256; -  
Line 69... Line 69...
69 rijndael.Padding = PaddingMode.PKCS7; 69 rijndael.Mode = CipherMode.CBC;
-   70 rijndael.KeySize = 256;
70   71 rijndael.Padding = PaddingMode.PKCS7;
71 var salt = cipher.Take(16) 72  
Line 72... Line 73...
72 .ToArray(); 73 var salt = cipher.Take(AESKeySaltBytes).ToArray();
73   74  
74 var ciphertext = cipher.Skip(16) 75 var ciphertext = cipher.Skip(AESKeySaltBytes).ToArray();
75 .ToArray(); 76  
76   77 using (var pdb = new Rfc2898DeriveBytes(password, salt, 1000))
77 var pdb = new Rfc2898DeriveBytes(password, salt, 1000); 78 {
78 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8); 79 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
Line 79... Line 80...
79 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8); 80 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
80   81  
81 using (var memoryStream = new MemoryStream()) 82 using (var memoryStream = new MemoryStream())
82 { 83 {
83 using (var cryptoStream = 84 using (var cryptoStream =
-   85 new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write))
Line 84... Line 86...
84 new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write)) 86 {
85 { 87 await cryptoStream.WriteAsync(ciphertext, 0, ciphertext.Length);
86 cryptoStream.Write(ciphertext, 0, ciphertext.Length); 88 cryptoStream.Close();
87 cryptoStream.Close(); 89