/trunk/WingMan/Utilities/AES.cs |
@@ -2,6 +2,7 @@ |
using System.IO; |
using System.Security.Cryptography; |
using System.Text; |
using System.Threading.Tasks; |
|
namespace WingMan.Utilities |
{ |
@@ -23,7 +24,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 byte[] Encrypt(byte[] data, string key, string separator = ":") |
public static async Task<byte[]> Encrypt(byte[] data, string key, string separator = ":") |
{ |
using (var rijdanelManaged = new RijndaelManaged()) |
{ |
@@ -35,8 +36,7 @@ |
// Compute the salt and the IV from the key. |
var salt = new byte[AesKeySaltBytes]; |
Rng.GetBytes(salt); |
using (var derivedKey = new Rfc2898DeriveBytes(key, salt)) |
{ |
var derivedKey = new Rfc2898DeriveBytes(key, salt); |
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8); |
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8); |
|
@@ -48,7 +48,7 @@ |
{ |
using (var inputStream = new MemoryStream(data)) |
{ |
inputStream.CopyTo(cryptoStream); |
await inputStream.CopyToAsync(cryptoStream).ConfigureAwait(false); |
cryptoStream.FlushFinalBlock(); |
|
inputStream.Position = 0L; |
@@ -65,7 +65,6 @@ |
} |
} |
} |
} |
|
/////////////////////////////////////////////////////////////////////////// |
// Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 // |
@@ -80,7 +79,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 byte[] Decrypt(byte[] data, string key, string separator = ":") |
public static async Task<byte[]> Decrypt(byte[] data, string key, string separator = ":") |
{ |
var input = Encoding.UTF8.GetString(data); |
|
@@ -87,7 +86,7 @@ |
// retrieve the salt from the data. |
var segments = input.Split(new[] {separator}, StringSplitOptions.None); |
if (segments.Length != 2) |
throw new ArgumentException("Invalid data: " + input); |
throw new ArgumentException("Invalid data."); |
|
using (var rijdanelManaged = new RijndaelManaged()) |
{ |
@@ -97,8 +96,7 @@ |
rijdanelManaged.Padding = AesPaddingMode; |
|
// Retrieve the key and the IV from the salt. |
using (var derivedKey = new Rfc2898DeriveBytes(key, Convert.FromBase64String(segments[0].Trim()))) |
{ |
var derivedKey = new Rfc2898DeriveBytes(key, Convert.FromBase64String(segments[0].Trim())); |
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8); |
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8); |
|
@@ -110,7 +108,8 @@ |
{ |
using (var streamReader = new StreamReader(cryptoStream)) |
{ |
return Encoding.UTF8.GetBytes(streamReader.ReadToEnd()); |
return Encoding.UTF8.GetBytes(await streamReader.ReadToEndAsync() |
.ConfigureAwait(false)); |
} |
} |
} |
@@ -117,9 +116,8 @@ |
} |
} |
} |
} |
|
public static string ExpandKey(string password, int size = 32) |
public static string LinearFeedbackShiftPassword(string password, int size = 32) |
{ |
var sb = new StringBuilder(password); |
do |
/trunk/WingMan/Utilities/KeyConversion.cs |
@@ -1,376 +1,424 @@ |
using System.Collections.Generic; |
using System.Windows.Forms; |
using System.Windows.Forms; |
|
namespace WingMan |
{ |
public static class KeyConversion |
{ |
public static readonly Dictionary<MouseButtons, string> MouseButtonsToString = |
new Dictionary<MouseButtons, string> |
public static string ToDisplayName(this MouseButtons button) |
{ |
{MouseButtons.Left, "Left Mouse Button"}, |
{MouseButtons.Middle, "Middle Mouse Button"}, |
{MouseButtons.Right, "Right Mouse Button"} |
}; |
|
public static readonly Dictionary<string, MouseButtons> StringToMouseButtons = |
new Dictionary<string, MouseButtons> |
var mouseButton = string.Empty; |
switch (button) |
{ |
{"Left Mouse Button", MouseButtons.Left}, |
{"Middle Mouse Button", MouseButtons.Middle}, |
{"Right Mouse Button", MouseButtons.Right} |
}; |
case MouseButtons.Left: |
mouseButton = "Left Mouse Button"; |
break; |
case MouseButtons.Middle: |
mouseButton = "Middle Mouse Button"; |
break; |
case MouseButtons.Right: |
mouseButton = "Right Mouse Button"; |
break; |
} |
|
public static readonly Dictionary<string, byte> StringToKeys = new Dictionary<string, byte> |
{ |
{"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 mouseButton; |
} |
|
public static readonly Dictionary<byte, string> KeysToString = new Dictionary<byte, string> |
public static string ToDisplayName(this Keys keys) |
{ |
{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"} |
}; |
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; |
} |
|
return keyString; |
} |
} |
} |