public static void Main(string[] args) { var Sample = new Integer (); Sample += new Integer(555); Sample = Integer.Pow (Sample, 2); var output = Sample.ToBytes (); var Test = new Integer (output); Console.WriteLine (Sample.ToString ()); Console.WriteLine (); Console.WriteLine (Test.ToString ()); if (Sample.IsEqual(Test)) Console.WriteLine ("Success"); else Console.WriteLine ("Failed"); Console.ReadLine (); }
Integer L_GeneratePrime() { int limit = bytes; if (limit < 4) limit = 4; var raw = new byte[limit]; RandomGenerator.NextBytes (raw); var newInt = new Integer (raw); return newInt; }
/// <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; }
public static Integer operator *(Integer op1, Integer op2) { var result = new Integer(); mpz_mul(ref result._pointer, ref op1._pointer, ref op2._pointer); return result; }
public static Integer operator /(Integer g1, Integer g2) { var result = new Integer(); mpz_tdiv_q(ref result._pointer, ref g1._pointer, ref g2._pointer); return result; }
public Integer PowMod(Integer exp, Integer mod) { var result = new Integer(); mpz_powm(ref result._pointer, ref this._pointer, ref exp._pointer, ref mod._pointer); return result; }
public static Integer operator %(Integer op1, Integer mod) { Integer result = new Integer(); mpz_mod(ref result._pointer, ref op1._pointer, ref mod._pointer); return result; }
public static Integer Sqrt(Integer i) { var result = new Integer(); mpz_sqrt(ref result._pointer, ref i._pointer); return result; }
public bool IsEqual(Integer op1) { return mpz_cmp(ref op1._pointer, ref _pointer) == 0; }
public static Integer Pow(uint bas, uint exp) { var result = new Integer(); mpz_ui_pow_ui(ref result._pointer, bas, exp); return result; }
public static Integer Pow(Integer i, int j) { if (j >= 0) return Pow(i, (uint) j); throw new ArgumentOutOfRangeException("j"); }
public static Integer Pow(Integer i, uint j) { var result = new Integer(); mpz_pow_ui(ref result._pointer, ref i._pointer, j); return result; }
public static bool IsEqual(Integer op1, Integer op2) { return mpz_cmp(ref op1._pointer, ref op2._pointer) == 0; }
public static int InverseModulo(Integer result, Integer op1, Integer op2) { return mpz_invert(ref result._pointer, ref op1._pointer, ref op2._pointer); }