После запуска скрипта я ввёл значения для pk и sk, но он не выдает никакого результата. <br/> <br/> <pre><code>print("Type key_pairs_gen() to generate your private key and public key"); print("Type test_key(you_public_key,bound_for_the_test) to test your key"); /* q = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f; a = Mod(0x0000000000000000000000000000000000000000000000000000000000000000, q); b = Mod(0x0000000000000000000000000000000000000000000000000000000000000007, q); E = ellinit([a, b],q); P = [Mod(55066263022277343669578718895168534326250603453777594175500187360389116729240,q),Mod(32670510020758816978083085130507043184471273380659243275938904335757337482424,q)]; p=115792089237316195423570985008687907852837564279074904382605163141518161494337; z=Mod(7, p); div32 = [18051648]; */ bsgs(public_key,d)= { print("Point to be tested:\n " public_key); print("Divisor: " d); m=ceil(sqrt(d))+1; zd=lift(Mod(z,p)^((p-1)/d)); bs=Vec(0,m); for(i=1,m, bs[i]=ellmul(E,public_key,lift(Mod(zd,p)^i))); for(i=1,m, gian_step=ellmul(E,P,lift(Mod(zd,p)^(m*i))); foreach(bs,baby_step, if (baby_step==gian_step, print("Match found!"); j=select((x) -> x == baby_step, bs, 1); private_key=lift(Mod(zd,p)^((m*i-j[1])%d)); print("private key detected:\n" private_key); break; ) ) ); }; test_key(public_key,bound)={ if(bound==32, foreach(div32,d,bsgs(public_key,d)), if(bound==64, foreach(div64,d,bsgs(public_key,d)), if(bound==128, foreach(div128,d,bsgs(public_key,d)), if(bound==160, foreach(div160,d,bsgs(public_key,d))) ) ), print("Wrong bound size. Available size are 32,64,128,160.")) }; key_pairs_gen()={ d=di
Ваш скрипт на языке PARI/GP имеет несколько проблем, которые могут приводить к тому, что он не выполняет команды или не выдает ожидаемые результаты. Давайте рассмотрим несколько потенциальных причин и пути их решения. ### 1. Неполный код Вы предоставили только часть скрипта, которая заканчивается на функции `key_pairs_gen()`, но не содержит её полного определения или вызова. Убедитесь, что функция `key_pairs_gen()` завершена, и что она действительно генерирует и выводит ключи. ### 2. Для выполнения функций Если вы хотите, чтобы функции выполнялись после их определения, вам нужно явно вызывать их. Например, если вы хотите сгенерировать ключи, вам нужно вызвать: ```gp key_pairs_gen(); ``` Также убедитесь, что после вызова функции `test_key()` вы передаете корректные параметры, например: ```gp test_key(ваш_публичный_ключ, 32); ``` ### 3. Переменные `public_key` и `bound` Убедитесь, что переменные `public_key` и `bound` инициализированы перед вызовом функции `test_key()`. Если они не инициализированы, это может привести к тому, что скрипт не будет работать: ```gp public_key = ваш_публичный_ключ; // Замените на действительное значение bound = 32; // Или 64, 128, 160 в зависимости от ваших нужд ``` ### 4. Проблемы с перебором и выводом Если алгоритм не находит совпадений, он, возможно, выполняет все итерации без вывода результатов. Убедитесь, что ваши проверки условий выполняются корректно и что вы выводите статус на каждом этапе, чтобы увидеть, происходит ли что-то: ```gp print("Searching for a match..."); ``` ### 5. Проверка на наличие ошибок Когда скрипт выполняется, посмотрите на возможные сообщения об ошибках. Если в коде есть неявные ошибки, такие как деление на ноль или ошибка доступа к элементам массива, программа может завершиться неожиданно без выполнения всех команд. ### 6. Переполнение условий Проверьте проверки `if`, чтобы они действительно выполнялись. Например, используйте `print()` после каждой проверки, чтобы понять, как код проходит через эти условия. ### Образец завершенного вызова Для использования вашего скрипта вот как вы можете запускать его, хотя бы в самом простом виде: ```gp public_key = [Ваши_координаты_публичного_ключа]; // например, [x, y] bound = 32; // или любое другое значение, внедряйте как нужно key_pairs_gen(); // Генерация ключей test_key(public_key, bound); // Тестирование ключа ``` ### Заключение Пройдите по всем этим советам, проверьте каждую часть кода на наличие ошибок или недочетов, и убедитесь, что вы вызываете все функции корректно и в нужном порядке. Если после всех проверок код по-прежнему не работает, возможно, стоит добавить больше отладочной информации, чтобы понять, на каком этапе скрипт перестает выполнять команды.
key_pairs_gen прерывается и не объявляет их