using System; using System.Numerics; namespace BasicMathsArithmetic { class Program { static void Main(string[] args) { Console.WriteLine("Diffie–Hellman key exchange examples"); Console.WriteLine("{[(5 ^ 107) % 3486] ^ 423} % 3486 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Exponent_UnlimitedDataSize_1Digit(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Exponent_UnlimitedDataSize_1Digit("5", "107"), "3486"), "423"), "3486")); Console.WriteLine("{[(5 ^ 423) % 3486] ^ 107} % 3486 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Exponent_UnlimitedDataSize_1Digit(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Exponent_UnlimitedDataSize_1Digit("5", "107"), "3486"), "423"), "3486")); Console.WriteLine(); Console.WriteLine("{[(5 * 107) % 3486] * 423} % 3486 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("5", "107"), "3486"), "423"), "3486")); Console.WriteLine("{[(5 * 423) % 3486] * 107} % 3486 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("5", "107"), "3486"), "423"), "3486")); Console.WriteLine(); Console.WriteLine("{[(930000361 * 107) % 1029999977] * 423} % 1029999977 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("930000361", "107"), "1029999977"), "423"), "1029999977")); Console.WriteLine("{[(930000361 * 423) % 1029999977] * 107} % 1029999977 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("930000361", "107"), "1029999977"), "423"), "1029999977")); Console.WriteLine(); Console.WriteLine("{[(7397712235319850549382671458618750199063022880906145820887182129604530773193096090909086230138295316543216224332760703394919251874274680707752487682364147 * 897478334340386770620496881987973856489545374809) % 8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809] * 942419517469455865958558748934189143518249034557} % 8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("7397712235319850549382671458618750199063022880906145820887182129604530773193096090909086230138295316543216224332760703394919251874274680707752487682364147", "107"), "8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809"), "423"), "8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809")); Console.WriteLine("{[(7397712235319850549382671458618750199063022880906145820887182129604530773193096090909086230138295316543216224332760703394919251874274680707752487682364147 * 942419517469455865958558748934189143518249034557) % 8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809] * 897478334340386770620496881987973856489545374809} % 8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809 = " + MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long(MathArithmetic.Modular_UnlimitedDataSize_1Digit(MathArithmetic.Multiplication_UnlimitedDataSize_long("7397712235319850549382671458618750199063022880906145820887182129604530773193096090909086230138295316543216224332760703394919251874274680707752487682364147", "107"), "8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809"), "423"), "8348735852785967917004641414530687358313021338421134809335772712669266448349181470780568775826953549106060202997936201277923171776174255735327270652935809")); Console.WriteLine(); } } }