После запуска скрипта я ввёл значения для 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 прерывается и не объявляет их