Esempio n. 1
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 ();
            }
        }
Esempio n. 2
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;
        }