Я пытался понять расчет открытого ключа EC для данного секретного ключа. После этого вопроса я нашел хорошо объяснил ответ, но (как это часто бывает) что-то пошло не так. Согласно предыдущему ответу и этому документу я использую следующий Perl-скрипт для выполнения вычислений:
#!/usr/bin/perl
use strict;
use warnings;
use Math::BigInt;
my $d_hex = "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725";
my $d_num = Math::BigInt->new("0x$d_hex");
my $g_hex = "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8";
my $g_num = Math::BigInt->new("0x$g_hex");
my $q_num = $d_num->copy()->bmul($g_num);
my $q_hex = $q_num->as_hex();
# Expect: 0x0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6
# Result: 0x479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798611c24f290d443a7c839f40d5512f071e48c9c424b038039d222fa320142ebdd
print "$q_hex\n";
Здесь ожидаемый результат означает результат вычисления с использованием кода, написанного на C из ранее найденного ответа. Как видите, результаты разные. Что я делаю неправильно?