예제 #1
0
        /// <summary>
        /// Generate a response packet.
        /// </summary>
        /// <param name="request">The string representation of the request.</param>
        /// <returns></returns>
        public byte[] GenerateResponse(byte[] request)
        {
            var currentPlatform = OSCheck.RunningPlatform();

            if (currentPlatform == OSCheck.Platform.Mac)
            {
                throw new PlatformNotSupportedException("Mac OSX is not a supported operating system for this.");
            }

            var instream = new MemoryStream(request);
            var gData    = DataUtility.ReadBytesFromStream(instream);
            var pData    = DataUtility.ReadBytesFromStream(instream);
            var AData    = DataUtility.ReadBytesFromStream(instream);

            byte[] BData = null;

            if (currentPlatform == OSCheck.Platform.Windows)
            {
                g = new mpz_t(gData, 1);
                p = new mpz_t(pData, 1);
                var A = new mpz_t(AData, 1);

                // Generate the parameters.
                a = RandomGenerator.Next(bytes);
                var B = g.Power(a);
                B = B.Mod(p);

                // Get Raw IntX Data
                BData = B.ToByteArray(1);

                // Got the key!!! HOORAY!
                S = A.Power(a);
                S = S.Mod(p);
                W_GetKeyData();
            }
            else if (currentPlatform == OSCheck.Platform.Linux)
            {
                g = new Integer();
                g.FromBytes(gData);
                p = new Integer();
                p.FromBytes(pData);
                var A = new Integer(AData);

                // Generate the parameters.
                a = RandomGenerator.Next(bytes);
                var B = g.Pow(a);
                B %= p;

                // Get Raw IntX Data
                BData = B.ToBytes();

                // Got the key!!! HOORAY!
                S  = A.Pow(a);
                S %= p;
                L_GetKeyData();
            }
            return(BData);
        }
예제 #2
0
        /// <summary>
        /// Generates a request packet.
        /// </summary>
        /// <returns></returns>
        public byte[] GenerateRequest()
        {
            var currentPlatform = OSCheck.RunningPlatform();

            if (currentPlatform == OSCheck.Platform.Mac)
            {
                throw new PlatformNotSupportedException("Mac OSX is not a supported operating system for this.");
            }
            // Generate the parameters.
            var raw       = new byte[bytes];
            var memStream = new MemoryStream();

            RandomGenerator.NextBytes(raw);
            a = RandomGenerator.Next((bytes) / 4 * 3, bytes);
            if (currentPlatform == OSCheck.Platform.Windows)
            {
                p = W_GeneratePrime();
                g = new mpz_t(raw, 1);
                var A = g.Power(a);
                A = A.Mod(p);
                // Get Raw Integer Data
                var gData = (g as mpz_t).ToByteArray(1);
                var pData = (p as mpz_t).ToByteArray(1);
                var AData = A.ToByteArray(1);

                // Write Length to Stream
                DataUtility.WriteBytesToStream(gData, memStream);
                DataUtility.WriteBytesToStream(pData, memStream);
                DataUtility.WriteBytesToStream(AData, memStream);
            }
            else if (currentPlatform == OSCheck.Platform.Linux)
            {
                p = L_GeneratePrime();
                g = new Integer();
                g.FromBytes(raw);
                var A = g.Pow(a);
                A %= p;
                // Get Raw Integer Data
                var gData = g.ToBytes();
                var pData = p.ToBytes();
                var AData = A.ToBytes();

                // Write Length to Stream
                DataUtility.WriteBytesToStream(gData, memStream);
                DataUtility.WriteBytesToStream(pData, memStream);
                DataUtility.WriteBytesToStream(AData, memStream);
            }
            var finalDataSend = memStream.ToArray();

            memStream.Dispose();
            return(finalDataSend);
        }
예제 #3
0
        /// <summary>
        /// Generates the key after a response is received.
        /// </summary>
        /// <param name="response">The string representation of the response.</param>
        public void HandleResponse(byte[] response)
        {
            var currentPlatform = OSCheck.RunningPlatform();

            if (currentPlatform == OSCheck.Platform.Mac)
            {
                throw new PlatformNotSupportedException("Mac OSX is not a supported operating system for this.");
            }
            if (currentPlatform == OSCheck.Platform.Windows)
            {
                var B = new mpz_t(response, 1);

                S = B.Power(a);
                S = (S as mpz_t).Mod((p as mpz_t));
                W_GetKeyData();
            }
            else if (currentPlatform == OSCheck.Platform.Linux)
            {
                var B = new Integer(response);
                S  = B.Pow(a);
                S %= p;
                L_GetKeyData();
            }
        }