WingMan

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 9  →  ?path2? @ 10
/trunk/WingMan/Utilities/AES.cs
@@ -2,7 +2,6 @@
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
 
namespace WingMan.Utilities
{
@@ -24,7 +23,7 @@
/// <param name="key">the encryption key</param>
/// <param name="separator">the separator to use between the cyphertext and the IV</param>
/// <returns>Base64 encoded encrypted data</returns>
public static async Task<byte[]> Encrypt(byte[] data, string key, string separator = ":")
public static byte[] Encrypt(byte[] data, string key, string separator = ":")
{
using (var rijdanelManaged = new RijndaelManaged())
{
@@ -36,29 +35,31 @@
// Compute the salt and the IV from the key.
var salt = new byte[AesKeySaltBytes];
Rng.GetBytes(salt);
var derivedKey = new Rfc2898DeriveBytes(key, salt);
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8);
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8);
using (var derivedKey = new Rfc2898DeriveBytes(key, salt))
{
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8);
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8);
 
using (var encryptor = rijdanelManaged.CreateEncryptor(rijdanelManaged.Key, rijdanelManaged.IV))
{
using (var memoryStream = new MemoryStream())
using (var encryptor = rijdanelManaged.CreateEncryptor(rijdanelManaged.Key, rijdanelManaged.IV))
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
using (var memoryStream = new MemoryStream())
{
using (var inputStream = new MemoryStream(data))
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
await inputStream.CopyToAsync(cryptoStream).ConfigureAwait(false);
cryptoStream.FlushFinalBlock();
using (var inputStream = new MemoryStream(data))
{
inputStream.CopyTo(cryptoStream);
cryptoStream.FlushFinalBlock();
 
inputStream.Position = 0L;
inputStream.Position = 0L;
 
var payload = memoryStream.ToArray();
var payload = memoryStream.ToArray();
 
var base64Salt = Convert.ToBase64String(salt);
var base64Payload = Convert.ToBase64String(payload);
var base64Salt = Convert.ToBase64String(salt);
var base64Payload = Convert.ToBase64String(payload);
 
return Encoding.UTF8.GetBytes($"{base64Salt}{separator}{base64Payload}");
return Encoding.UTF8.GetBytes($"{base64Salt}{separator}{base64Payload}");
}
}
}
}
@@ -79,7 +80,7 @@
/// <param name="key">the encryption key</param>
/// <param name="separator">the separator to use between the cyphertext and the IV</param>
/// <returns>the decrypted data</returns>
public static async Task<byte[]> Decrypt(byte[] data, string key, string separator = ":")
public static byte[] Decrypt(byte[] data, string key, string separator = ":")
{
var input = Encoding.UTF8.GetString(data);
 
@@ -86,7 +87,7 @@
// retrieve the salt from the data.
var segments = input.Split(new[] {separator}, StringSplitOptions.None);
if (segments.Length != 2)
throw new ArgumentException("Invalid data.");
throw new ArgumentException("Invalid data: " + input);
 
using (var rijdanelManaged = new RijndaelManaged())
{
@@ -96,20 +97,21 @@
rijdanelManaged.Padding = AesPaddingMode;
 
// Retrieve the key and the IV from the salt.
var derivedKey = new Rfc2898DeriveBytes(key, Convert.FromBase64String(segments[0].Trim()));
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8);
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8);
using (var derivedKey = new Rfc2898DeriveBytes(key, Convert.FromBase64String(segments[0].Trim())))
{
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8);
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8);
 
using (var decryptor = rijdanelManaged.CreateDecryptor(rijdanelManaged.Key, rijdanelManaged.IV))
{
using (var memoryStream = new MemoryStream(Convert.FromBase64String(segments[1].Trim())))
using (var decryptor = rijdanelManaged.CreateDecryptor(rijdanelManaged.Key, rijdanelManaged.IV))
{
using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
using (var memoryStream = new MemoryStream(Convert.FromBase64String(segments[1].Trim())))
{
using (var streamReader = new StreamReader(cryptoStream))
using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
return Encoding.UTF8.GetBytes(await streamReader.ReadToEndAsync()
.ConfigureAwait(false));
using (var streamReader = new StreamReader(cryptoStream))
{
return Encoding.UTF8.GetBytes(streamReader.ReadToEnd());
}
}
}
}
@@ -117,7 +119,7 @@
}
}
 
public static string LinearFeedbackShiftPassword(string password, int size = 32)
public static string ExpandKey(string password, int size = 32)
{
var sb = new StringBuilder(password);
do
/trunk/WingMan/Utilities/KeyConversion.cs
@@ -1,424 +1,376 @@
using System.Windows.Forms;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace WingMan
{
public static class KeyConversion
{
public static string ToDisplayName(this MouseButtons button)
{
var mouseButton = string.Empty;
switch (button)
public static readonly Dictionary<MouseButtons, string> MouseButtonsToString =
new Dictionary<MouseButtons, string>
{
case MouseButtons.Left:
mouseButton = "Left Mouse Button";
break;
case MouseButtons.Middle:
mouseButton = "Middle Mouse Button";
break;
case MouseButtons.Right:
mouseButton = "Right Mouse Button";
break;
}
{MouseButtons.Left, "Left Mouse Button"},
{MouseButtons.Middle, "Middle Mouse Button"},
{MouseButtons.Right, "Right Mouse Button"}
};
 
return mouseButton;
}
public static readonly Dictionary<string, MouseButtons> StringToMouseButtons =
new Dictionary<string, MouseButtons>
{
{"Left Mouse Button", MouseButtons.Left},
{"Middle Mouse Button", MouseButtons.Middle},
{"Right Mouse Button", MouseButtons.Right}
};
 
public static string ToDisplayName(this Keys keys)
public static readonly Dictionary<string, byte> StringToKeys = new Dictionary<string, byte>
{
var keyString = string.Empty;
switch ((int) keys)
{
case 0:
break;
case 1:
keyString = "Mouse Left";
break;
case 2:
keyString = "Mouse Right";
break;
case 3:
keyString = "Cancel";
break;
case 4:
keyString = "Mouse Middle";
break;
case 5:
keyString = "Special 1";
break;
case 6:
keyString = "Special 2";
break;
case 8:
keyString = "Back";
break;
case 9:
keyString = "TAB";
break;
case 12:
keyString = "Clear";
break;
case 13:
keyString = "Enter";
break;
case 16:
keyString = "Shift";
break;
case 17:
keyString = "Ctrl";
break;
case 18:
keyString = "Menu";
break;
case 19:
keyString = "Pause";
break;
case 20:
keyString = "Caps Lock";
break;
case 21:
keyString = "Kana/Hangul";
break;
case 23:
keyString = "Junja";
break;
case 24:
keyString = "Final";
break;
case 25:
keyString = "Hanja/Kanji";
break;
case 27:
keyString = "Esc";
break;
case 28:
keyString = "Convert";
break;
case 29:
keyString = "NonConvert";
break;
case 30:
keyString = "Accept";
break;
case 31:
keyString = "Mode";
break;
case 32:
keyString = "Space";
break;
case 33:
keyString = "Page Up";
break;
case 34:
keyString = "Page Down";
break;
case 35:
keyString = "End";
break;
case 36:
keyString = "Home";
break;
case 37:
keyString = "Left";
break;
case 38:
keyString = "Up";
break;
case 39:
keyString = "Right";
break;
case 40:
keyString = "Down";
break;
case 41:
keyString = "Select";
break;
case 42:
keyString = "Print";
break;
case 43:
keyString = "Execute";
break;
case 44:
keyString = "Snapshot";
break;
case 45:
keyString = "Insert";
break;
case 46:
keyString = "Delete";
break;
case 47:
keyString = "Help";
break;
case 48:
keyString = "Num 0";
break;
case 49:
keyString = "Num 1";
break;
case 50:
keyString = "Num 2";
break;
case 51:
keyString = "Num 3";
break;
case 52:
keyString = "Num 4";
break;
case 53:
keyString = "Num 5";
break;
case 54:
keyString = "Num 6";
break;
case 55:
keyString = "Num 7";
break;
case 56:
keyString = "Num 8";
break;
case 57:
keyString = "Num 9";
break;
case 65:
keyString = "A";
break;
case 66:
keyString = "B";
break;
case 67:
keyString = "C";
break;
case 68:
keyString = "D";
break;
case 69:
keyString = "E";
break;
case 70:
keyString = "F";
break;
case 71:
keyString = "G";
break;
case 72:
keyString = "H";
break;
case 73:
keyString = "I";
break;
case 74:
keyString = "J";
break;
case 75:
keyString = "K";
break;
case 76:
keyString = "L";
break;
case 77:
keyString = "M";
break;
case 78:
keyString = "N";
break;
case 79:
keyString = "O";
break;
case 80:
keyString = "P";
break;
case 81:
keyString = "Q";
break;
case 82:
keyString = "R";
break;
case 83:
keyString = "S";
break;
case 84:
keyString = "T";
break;
case 85:
keyString = "U";
break;
case 86:
keyString = "V";
break;
case 87:
keyString = "W";
break;
case 88:
keyString = "X";
break;
case 89:
keyString = "Y";
break;
case 90:
keyString = "Z";
break;
case 91:
keyString = "Windows Left";
break;
case 92:
keyString = "Windows Right";
break;
case 93:
keyString = "Application";
break;
case 95:
keyString = "Sleep";
break;
case 96:
keyString = "NumPad 0";
break;
case 97:
keyString = "NumPad 1";
break;
case 98:
keyString = "NumPad 2";
break;
case 99:
keyString = "NumPad 3";
break;
case 100:
keyString = "NumPad 4";
break;
case 101:
keyString = "NumPad 5";
break;
case 102:
keyString = "NumPad 6";
break;
case 103:
keyString = "NumPad 7";
break;
case 104:
keyString = "NumPad 8";
break;
case 105:
keyString = "NumPad 9";
break;
case 106:
keyString = "NumPad *";
break;
case 107:
keyString = "NumPad +";
break;
case 108:
keyString = "NumPad .";
break;
case 109:
keyString = "NumPad -";
break;
case 110:
keyString = "NumPad ,";
break;
case 111:
keyString = "NumPad /";
break;
case 112:
keyString = "F1";
break;
case 113:
keyString = "F2";
break;
case 114:
keyString = "F3";
break;
case 115:
keyString = "F4";
break;
case 116:
keyString = "F5";
break;
case 117:
keyString = "F6";
break;
case 118:
keyString = "F7";
break;
case 119:
keyString = "F8";
break;
case 120:
keyString = "F9";
break;
case 121:
keyString = "F10";
break;
case 122:
keyString = "F11";
break;
case 123:
keyString = "F12";
break;
case 124:
keyString = "F13";
break;
case 125:
keyString = "F14";
break;
case 126:
keyString = "F15";
break;
case 127:
keyString = "F16";
break;
case 128:
keyString = "F17";
break;
case 129:
keyString = "F18";
break;
case 130:
keyString = "F19";
break;
case 131:
keyString = "F20";
break;
case 132:
keyString = "F21";
break;
case 133:
keyString = "F22";
break;
case 134:
keyString = "F23";
break;
case 135:
keyString = "F24";
break;
case 144:
keyString = "Num lock";
break;
case 145:
keyString = "Scroll";
break;
case 160:
keyString = "Shift Left";
break;
case 161:
keyString = "Shift Right";
break;
case 162:
keyString = "Ctrl Left";
break;
case 163:
keyString = "Ctrl Right";
break;
case 164:
keyString = "Menu Left";
break;
case 165:
keyString = "Menu Right";
break;
default:
break;
}
{"None", 0},
{"LButton", 1},
{"RButton", 2},
{"Cancel", 3},
{"MButton", 4},
{"XButton1", 5},
{"XButton2", 6},
{"Back", 8},
{"Tab", 9},
{"LineFeed", 10},
{"Clear", 12},
{"Enter", 13},
{"ShiftKey", 16},
{"ControlKey", 17},
{"Menu", 18},
{"Pause", 19},
{"CapsLock", 20},
{"HangulMode", 21},
{"JunjaMode", 23},
{"FinalMode", 24},
{"KanjiMode", 25},
{"Escape", 27},
{"IMEConvert", 28},
{"IMENonconvert", 29},
{"IMEAccept", 30},
{"IMEModeChange", 31},
{"Space", 32},
{"PageUp", 33},
{"PageDown", 34},
{"End", 35},
{"Home", 36},
{"Left", 37},
{"Up", 38},
{"Right", 39},
{"Down", 40},
{"Select", 41},
{"Print", 42},
{"Execute", 43},
{"PrintScreen", 44},
{"Insert", 45},
{"Delete", 46},
{"Help", 47},
{"D0", 48},
{"D1", 49},
{"D2", 50},
{"D3", 51},
{"D4", 52},
{"D5", 53},
{"D6", 54},
{"D7", 55},
{"D8", 56},
{"D9", 57},
{"A", 65},
{"B", 66},
{"C", 67},
{"D", 68},
{"E", 69},
{"F", 70},
{"G", 71},
{"H", 72},
{"I", 73},
{"J", 74},
{"K", 75},
{"L", 76},
{"M", 77},
{"N", 78},
{"O", 79},
{"P", 80},
{"Q", 81},
{"R", 82},
{"S", 83},
{"T", 84},
{"U", 85},
{"V", 86},
{"W", 87},
{"X", 88},
{"Y", 89},
{"Z", 90},
{"LWin", 91},
{"RWin", 92},
{"Apps", 93},
{"Sleep", 95},
{"NumPad0", 96},
{"NumPad1", 97},
{"NumPad2", 98},
{"NumPad3", 99},
{"NumPad4", 100},
{"NumPad5", 101},
{"NumPad6", 102},
{"NumPad7", 103},
{"NumPad8", 104},
{"NumPad9", 105},
{"Multiply", 106},
{"Add", 107},
{"Separator", 108},
{"Subtract", 109},
{"Decimal", 110},
{"Divide", 111},
{"F1", 112},
{"F2", 113},
{"F3", 114},
{"F4", 115},
{"F5", 116},
{"F6", 117},
{"F7", 118},
{"F8", 119},
{"F9", 120},
{"F10", 121},
{"F11", 122},
{"F12", 123},
{"F13", 124},
{"F14", 125},
{"F15", 126},
{"F16", 127},
{"F17", 128},
{"F18", 129},
{"F19", 130},
{"F20", 131},
{"F21", 132},
{"F22", 133},
{"F23", 134},
{"F24", 135},
{"NumLock", 144},
{"Scroll", 145},
{"LShiftKey", 160},
{"RShiftKey", 161},
{"LControlKey", 162},
{"RControlKey", 163},
{"LMenu", 164},
{"RMenu", 165},
{"BrowserBack", 166},
{"BrowserForward", 167},
{"BrowserRefresh", 168},
{"BrowserStop", 169},
{"BrowserSearch", 170},
{"BrowserFavorites", 171},
{"BrowserHome", 172},
{"VolumeMute", 173},
{"VolumeDown", 174},
{"VolumeUp", 175},
{"MediaNextTrack", 176},
{"MediaPreviousTrack", 177},
{"MediaStop", 178},
{"MediaPlayPause", 179},
{"LaunchMail", 180},
{"SelectMedia", 181},
{"LaunchApplication1", 182},
{"LaunchApplication2", 183},
{"Oem1", 186},
{"Oemplus", 187},
{"Oemcomma", 188},
{"OemMinus", 189},
{"OemPeriod", 190},
{"Oem2", 191},
{"Oem3", 192},
{"Oem4", 219},
{"Oem5", 220},
{"Oem6", 221},
{"Oem7", 222},
{"Oem8", 223},
{"Oem102", 226},
{"ProcessKey", 229},
{"Packet", 231},
{"Attn", 246},
{"Crsel", 247},
{"Exsel", 248},
{"EraseEof", 249},
{"Play", 250},
{"Zoom", 251},
{"NoName", 252},
{"Pa1", 253},
{"OemClear", 254}
};
 
return keyString;
}
public static readonly Dictionary<byte, string> KeysToString = new Dictionary<byte, string>
{
{0, "None"},
{1, "LButton"},
{2, "RButton"},
{3, "Cancel"},
{4, "MButton"},
{5, "XButton1"},
{6, "XButton2"},
{8, "Back"},
{9, "Tab"},
{10, "LineFeed"},
{12, "Clear"},
{13, "Enter"},
{16, "ShiftKey"},
{17, "ControlKey"},
{18, "Menu"},
{19, "Pause"},
{20, "CapsLock"},
{21, "HanguelMode"},
{23, "JunjaMode"},
{24, "FinalMode"},
{25, "KanjiMode"},
{27, "Escape"},
{28, "IMEConvert"},
{29, "IMENonconvert"},
{30, "IMEAccept"},
{31, "IMEModeChange"},
{32, "Space"},
{33, "PageUp"},
{34, "PageDown"},
{35, "End"},
{36, "Home"},
{37, "Left"},
{38, "Up"},
{39, "Right"},
{40, "Down"},
{41, "Select"},
{42, "Print"},
{43, "Execute"},
{44, "PrintScreen"},
{45, "Insert"},
{46, "Delete"},
{47, "Help"},
{48, "D0"},
{49, "D1"},
{50, "D2"},
{51, "D3"},
{52, "D4"},
{53, "D5"},
{54, "D6"},
{55, "D7"},
{56, "D8"},
{57, "D9"},
{65, "A"},
{66, "B"},
{67, "C"},
{68, "D"},
{69, "E"},
{70, "F"},
{71, "G"},
{72, "H"},
{73, "I"},
{74, "J"},
{75, "K"},
{76, "L"},
{77, "M"},
{78, "N"},
{79, "O"},
{80, "P"},
{81, "Q"},
{82, "R"},
{83, "S"},
{84, "T"},
{85, "U"},
{86, "V"},
{87, "W"},
{88, "X"},
{89, "Y"},
{90, "Z"},
{91, "LWin"},
{92, "RWin"},
{93, "Apps"},
{95, "Sleep"},
{96, "NumPad0"},
{97, "NumPad1"},
{98, "NumPad2"},
{99, "NumPad3"},
{100, "NumPad4"},
{101, "NumPad5"},
{102, "NumPad6"},
{103, "NumPad7"},
{104, "NumPad8"},
{105, "NumPad9"},
{106, "Multiply"},
{107, "Add"},
{108, "Separator"},
{109, "Subtract"},
{110, "Decimal"},
{111, "Divide"},
{112, "F1"},
{113, "F2"},
{114, "F3"},
{115, "F4"},
{116, "F5"},
{117, "F6"},
{118, "F7"},
{119, "F8"},
{120, "F9"},
{121, "F10"},
{122, "F11"},
{123, "F12"},
{124, "F13"},
{125, "F14"},
{126, "F15"},
{127, "F16"},
{128, "F17"},
{129, "F18"},
{130, "F19"},
{131, "F20"},
{132, "F21"},
{133, "F22"},
{134, "F23"},
{135, "F24"},
{144, "NumLock"},
{145, "Scroll"},
{160, "LShiftKey"},
{161, "RShiftKey"},
{162, "LControlKey"},
{163, "RControlKey"},
{164, "LMenu"},
{165, "RMenu"},
{166, "BrowserBack"},
{167, "BrowserForward"},
{168, "BrowserRefresh"},
{169, "BrowserStop"},
{170, "BrowserSearch"},
{171, "BrowserFavorites"},
{172, "BrowserHome"},
{173, "VolumeMute"},
{174, "VolumeDown"},
{175, "VolumeUp"},
{176, "MediaNextTrack"},
{177, "MediaPreviousTrack"},
{178, "MediaStop"},
{179, "MediaPlayPause"},
{180, "LaunchMail"},
{181, "SelectMedia"},
{182, "LaunchApplication1"},
{183, "LaunchApplication2"},
{186, "Oem1"},
{187, "Oemplus"},
{188, "Oemcomma"},
{189, "OemMinus"},
{190, "OemPeriod"},
{191, "Oem2"},
{192, "Oem3"},
{219, "Oem4"},
{220, "Oem5"},
{221, "Oem6"},
{222, "Oem7"},
{223, "Oem8"},
{226, "Oem102"},
{229, "ProcessKey"},
{231, "Packet"},
{246, "Attn"},
{247, "Crsel"},
{248, "Exsel"},
{249, "EraseEof"},
{250, "Play"},
{251, "Zoom"},
{252, "NoName"},
{253, "Pa1"},
{254, "OemClear"}
};
}
}