/// <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); }
/// <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); }
/// <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(); } }