Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void Run()
- {
- Console.Write("Ввести значения? (y/n): ");
- if (Console.ReadLine() == "y")
- {
- Console.Write("Введите x: ");
- var x = int.Parse(Console.ReadLine());
- Console.Write("Введите y: ");
- var y = int.Parse(Console.ReadLine());
- Console.Write("Введите a: ");
- var a = int.Parse(Console.ReadLine());
- Console.Write("Введите p: ");
- var p = int.Parse(Console.ReadLine());
- Console.WriteLine();
- var data = GetCryptoParams(x, y, a, p);
- if (data.has)
- Console.WriteLine($"\nУравнение эл. кривой: y^2 = x^3 + {data.a}x + {data.b}");
- }
- else
- {
- var data = GetCryptoParamsByRandom();
- Console.WriteLine($"\nУравнение эл. кривой: y^2 = x^3 + {data.a}x + {data.b}");
- }
- }
- static int GetRandomGaluaValue(int p)
- {
- return new Random().Next(4, (int)p - 1);
- }
- public static (int a, int b, int p) GetCryptoParamsByRandom()
- {
- Console.WriteLine("\nВыбор случайных значений...\n");
- var s = new EratostheneSieve(100);
- var p = (int)s.GetRandomSimple();
- if (p <= 5) p = (int)s.GetRandomSimple();
- while (true)
- {
- var prms = GetCryptoParams(GetRandomGaluaValue(p), GetRandomGaluaValue(p), GetRandomGaluaValue(p), p);
- if (prms.has)
- return (prms.a, prms.b, prms.p);
- }
- }
- public static (int a, int b, int p, bool has) GetCryptoParams(int x, int y, int a, int p)
- {
- Console.WriteLine($"p = {p}");
- Console.WriteLine($"x = {x}");
- Console.WriteLine($"y = {y}");
- Console.WriteLine($"a = {a}");
- var b = NTMC.Functions.mod(y * y - (x * x * x + a * x), p);
- var check = NTMC.Functions.mod(4 * a * a * a + 27 * b * b, p);
- if (check != 0)
- {
- Console.WriteLine($"b = y^2 - (x^3 + ax) = {y * y} - ({x * x * x} + {a} * {x}) = {b}");
- Console.WriteLine($"\nПроверка выполнена т.к. 4a^3 + 27b^2 = 4*{a * a * a} + 27*{b * b} = {check} != 0");
- return (a, b, p, true);
- }
- else
- {
- Console.WriteLine("\nПроверка не выполнена!\n");
- return (a, b, p, false);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment