cipher prep

logging in soon
This commit is contained in:
Malloc of Kuzkycyziklistan 2017-05-17 16:06:16 -05:00
parent cb68ad8c2a
commit 3fb9399440
10 changed files with 174 additions and 4 deletions

View file

@ -1 +0,0 @@
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);

View file

@ -65,6 +65,7 @@
<HintPath>packages\System.Data.SQLite.Linq.1.0.105.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath> <HintPath>packages\System.Data.SQLite.Linq.1.0.105.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security" /> <Reference Include="System.Security" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
@ -96,6 +97,8 @@
<Compile Include="DAL\Users.cs"> <Compile Include="DAL\Users.cs">
<DependentUpon>ScapeDb.tt</DependentUpon> <DependentUpon>ScapeDb.tt</DependentUpon>
</Compile> </Compile>
<Compile Include="Encryption\KeyExchange.cs" />
<Compile Include="Encryption\Cipher.cs" />
<Compile Include="Socks\ActiveConnection.cs" /> <Compile Include="Socks\ActiveConnection.cs" />
<Compile Include="Entrypoint.cs" /> <Compile Include="Entrypoint.cs" />
<Compile Include="Socks\PendingConnection.cs" /> <Compile Include="Socks\PendingConnection.cs" />

View file

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CircleScape.Encryption {
class Cipher {
static void ksa(byte[] state, byte[] key) {
int i, j = 0, t;
for(i = 0; i < 256; ++i)
state[i] = (byte)i;
for(i = 0; i < 256; ++i) {
j = (j + state[i] + key[i % key.Length]) % 256;
t = state[i];
state[i] = state[j];
state[j] = (byte)t;
}
}
static void prga(byte[] state, byte[] cipher) {
int i = 0, j = 0, x, t;
for(x = 0; x < cipher.Length; ++x) {
i = (i + 1) % 256;
j = (j + state[i]) % 256;
t = state[i];
state[i] = state[j];
state[j] = (byte)t;
cipher[x] = state[(state[i] + state[j]) % 256];
}
}
// http://bradconte.com/rc4_c
}
}

View file

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
namespace CircleScape.Encryption {
class KeyExchange {
private BigInteger Secret;
public BigInteger Generator { get; private set; }
public BigInteger Modulus { get; private set; }
public BigInteger PrivateKey { get; private set; }
// https://security.stackexchange.com/questions/45963/diffie-hellman-key-exchange-in-plain-english/45971#45971
}
}

View file

@ -6,10 +6,14 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using CircleScape.DAL; using CircleScape.DAL;
using System.Numerics; using System.Numerics;
using Square;
namespace CircleScape { namespace CircleScape {
class Entrypoint { class Entrypoint {
static void Main(string[] args) { static void Main(string[] args) {
var a = Square.Random.NextPrime(512 / 8);
Console.WriteLine(a.ToString("X"));
var server = new Kneesocks.Server<PendingConnection>(6770, PoolManager.Pending); var server = new Kneesocks.Server<PendingConnection>(6770, PoolManager.Pending);
server.Start(); server.Start();

View file

@ -41,8 +41,6 @@ namespace Kneesocks {
private List<Frame> SendFrameBuffer = new List<Frame>(); private List<Frame> SendFrameBuffer = new List<Frame>();
private const int MaximumSendFrameSize = 0xFFFFF; private const int MaximumSendFrameSize = 0xFFFFF;
private Random Random = new Random();
protected const int PingInterval = 30; protected const int PingInterval = 30;
protected const int TimeoutInterval = 120; protected const int TimeoutInterval = 120;
private byte[] PingData = Encoding.ASCII.GetBytes("woomy!"); private byte[] PingData = Encoding.ASCII.GetBytes("woomy!");

View file

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Numerics;
using System.Globalization;
namespace Square { namespace Square {
public static class NumericExtensions { public static class NumericExtensions {
@ -29,7 +31,7 @@ namespace Square {
public static byte[] Pack(this UInt32 value) { public static byte[] Pack(this UInt32 value) {
return BitConverter.GetBytes(value).HostToNetworkOrder(); return BitConverter.GetBytes(value).HostToNetworkOrder();
} }
public static byte[] Pack(this Int64 value) { public static byte[] Pack(this Int64 value) {
return BitConverter.GetBytes(value).HostToNetworkOrder(); return BitConverter.GetBytes(value).HostToNetworkOrder();
} }
@ -37,5 +39,36 @@ namespace Square {
public static byte[] Pack(this UInt64 value) { public static byte[] Pack(this UInt64 value) {
return BitConverter.GetBytes(value).HostToNetworkOrder(); return BitConverter.GetBytes(value).HostToNetworkOrder();
} }
public static bool IsDivisibleBy(this BigInteger value, BigInteger dividend) {
if(value.IsZero) return false;
if(value.IsOne) return true;
if(value == 2) return value.IsEven;
return (value % dividend).IsZero;
}
public static bool IsProbablePrime(this BigInteger value, int iterations = 5) {
var absValue = BigInteger.Abs(value);
if(absValue == 1) return false;
if(absValue == 2 || absValue == 3 || absValue == 5) return true;
if(absValue.IsEven || absValue.IsDivisibleBy(3) || absValue.IsDivisibleBy(5)) return false;
if(absValue < 25) return true;
for(var i = 0; i < iterations; ++i) {
var rand = Random.NextBigInt(2, absValue - 2);
if(!BigInteger.ModPow(rand, absValue - 1, absValue).IsOne) return false;
}
return true;
}
public static string ToHexString(this BigInteger value) {
return value.ToString("X").ToLower();
}
public static BigInteger HexStringToBigInt(this string value) {
return BigInteger.Parse(value, NumberStyles.HexNumber);
}
} }
} }

View file

@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
namespace Square {
public static class Random {
private static System.Random RandCtx = new System.Random();
public static int Next() {
lock(RandCtx) {
return RandCtx.Next();
}
}
public static int Next(int maxValue) {
lock(RandCtx) {
return RandCtx.Next(maxValue);
}
}
public static int Next(int minValue, int maxValue) {
lock(RandCtx) {
return RandCtx.Next(minValue, maxValue);
}
}
public static double NextDouble() {
lock(RandCtx) {
return RandCtx.NextDouble();
}
}
public static void NextBytes(byte[] buffer) {
lock(RandCtx) {
RandCtx.NextBytes(buffer);
}
}
public static byte[] NextBytes(int length) {
lock(RandCtx) {
var buffer = new byte[length];
RandCtx.NextBytes(buffer);
return buffer;
}
}
public static BigInteger NextPrime(int byteCount) {
var bytes = new byte[byteCount];
BigInteger prime;
do {
NextBytes(bytes);
prime = BigInteger.Abs(new BigInteger(bytes)) | 1;
} while(!prime.IsProbablePrime());
return prime;
}
public static BigInteger NextBigInt(BigInteger minValue, BigInteger maxValue) {
var byteCount = maxValue.ToByteArray().Length;
var randomNumber = BigInteger.Abs(new BigInteger(NextBytes(byteCount)));
var delta = maxValue - minValue + 1;
return minValue + (randomNumber % delta);
}
public static BigInteger NextBigInt(int byteCount) {
return BigInteger.Abs(new BigInteger(NextBytes(byteCount)));
}
}
}

View file

@ -32,6 +32,7 @@
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Numerics" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -43,6 +44,7 @@
<Compile Include="ArrayExtensions.cs" /> <Compile Include="ArrayExtensions.cs" />
<Compile Include="CryptoExtensions.cs" /> <Compile Include="CryptoExtensions.cs" />
<Compile Include="NumericExtensions.cs" /> <Compile Include="NumericExtensions.cs" />
<Compile Include="RandomContext.cs" />
<Compile Include="StringExtensions.cs" /> <Compile Include="StringExtensions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>

View file

@ -11,6 +11,8 @@ namespace CircleScape {
class PendingConnection : Connection { class PendingConnection : Connection {
private DateTime ConnectionOpened; private DateTime ConnectionOpened;
protected override void OnOpen() { protected override void OnOpen() {
ConnectionOpened = DateTime.UtcNow; ConnectionOpened = DateTime.UtcNow;
} }