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