Почему скрипт на языке PARI/GP не выполняет команды?

После запуска скрипта я ввёл значения для 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) -&gt; 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
  • 27 ноября 2024 г. 5:53
Ответы на вопрос 2
Ваш скрипт на языке 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 прерывается и не объявляет их
Похожие вопросы