Вверх ↑
Этот топик читают: Гость
Ответов: 168
Рейтинг: 1
#1: 2025-09-12 13:58:59 ЛС | профиль | цитата
Возможно ли как-то вставить код на Python ? Нужно производить арифметику с большими числами, а HiAsm этого не умеет делать к большому сожалению. Например нужно сложить 2 больших числа. На Python это выглядит так:

A = 55066263022277343669578718895168534326250603453777594175500187360389116729240
B = 32670510020758816978083085130507043184471273380659243275938904335757337482424
summa = (A + B)

Может можно вместо Python использовать Delphi ? Еще нужно производить операции по модулю и модульную инверсию. В Python это легко всё делается. Пакет Python у меня не работает. Я так понял нужно поставить компилятор? Где его взять?

Редактировалось 4 раз(а), последний 2025-09-12 14:47:20
карма: 1

0
Ответов: 975
Рейтинг: 204
#2: 2025-09-12 15:35:34 ЛС | профиль | цитата
Andrej77rv, Попробуй так
Add(MainForm,14162385,203,154)
{
Width=954
Height=258
link(onCreate,10721369:doString,[])
}
Add(WinExec,7014996,322,154)
{
FileName="POWERSHELL"
Mode=0
Action="runas"
Point(doConsoleExec)
Point(onConsoleError)
Point(onConsoleResult)
link(FileName,11795667:Value,[])
link(onConsoleError,2814240:doWork2,[])
link(onConsoleResult,2814240:doWork3,[(375,181)])
}
Add(Charset,1678668,392,168)
{
link(onCharset,2931260:doAdd,[])
}
Add(FormatStr,10721369,259,168)
{
Mask="[bigint]$A = '55066263022277343669578718895168534326250603453777594175500187360389116729240'\r\n[bigint]$B = '32670510020758816978083085130507043184471273380659243275938904335757337482424'\r\n''\r\n'A = 55066263022277343669578718895168534326250603453777594175500187360389116729240'\r\n'B = 32670510020758816978083085130507043184471273380659243275938904335757337482424'\r\n''\r\n\r\n\r\n'-----------Сложение-----------'\r\n''\r\n[bigint]($A + $B)\r\n\r\n''\r\n\r\n'-----------Вычитание-----------'\r\n''\r\n[bigint]($A - $B)\r\n\r\n''\r\n\r\n"
link(onFString,7014996:doConsoleExec,[])
}
Add(Memo,2931260,441,168)
{
Width=938
Height=219
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(HubEx,2814240,371,168)
{
link(onEvent,1678668:doCharset,[])
}
Add(Memory,11795667,322,98)
{
Default=String(c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe)
}


Редактировалось 2 раз(а), последний 2025-09-12 15:57:13
карма: 20

0
Ответов: 168
Рейтинг: 1
#3: 2025-09-12 17:05:23 ЛС | профиль | цитата
Gunta писал(а):
Andrej77rv, Попробуй так


Не работает



Редактировалось 2 раз(а), последний 2025-09-12 17:15:16
карма: 1

0
Ответов: 975
Рейтинг: 204
#4: 2025-09-12 18:00:53 ЛС | профиль | цитата
Andrej77rv писал(а):
Не работает

У меня работает
https://i.mcgl.ru/4sw6A5qoeg


Возможно, ты неправильно копируешь схему

У тебя там дво1ные кавычки а должны быть две одинарные.

--- Добавлено в 2025-09-12 18:08:57




для того, чтобы скопировать схему-код, находящуюся в тегах “code” в буфер обмена, нужно подвести курсор в левый верхний угол области с кодом пока курсор не изменится на указательный палец и щёлкнуть левой кнопкой мыши. Весь код выделится и скопируется в буфер обмена автоматически. Останется только вставить его в поле HiAsm.

Редактировалось 3 раз(а), последний 2025-09-12 18:20:43
карма: 20

0
Ответов: 168
Рейтинг: 1
#5: 2025-09-12 18:35:44 ЛС | профиль | цитата
Gunta писал(а):
У меня работает

Да спасибо получилось. А как выполнить вот этот код?

X=78173298682877769088723994436027545680738210601369041078747105985693655485630
Y=92362876758821804597230797234617159328445543067760556585160674174871431781431

def find_inverse(number, modulus):
return pow(number, -1, modulus)

Gx=55066263022277343669578718895168534326250603453777594175500187360389116729240
Gy=32670510020758816978083085130507043184471273380659243275938904335757337482424

p = 115792089237316195423570985008687907853269984665640564039457584007908834671663

Tochka3 = (Gy - Y) * find_inverse (Gx - X, p) % p

X3 = (Tochka3 ** 2 - X - Gx) % p
Y3 = (Tochka3 * (X - X3) - Y) % p

print(X3,Y3)

А потом что получилось (X3,Y3) ответом заменить X и Y и снова посчитать при нажатии кнопки. И так далее.. Это сложение точек на эллиптической кривой в конечном поле с модулем p.

Редактировалось 4 раз(а), последний 2025-09-12 21:31:30
карма: 1

0
Ответов: 975
Рейтинг: 204
#6: 2025-09-15 06:52:54 ЛС | профиль | цитата
Andrej77rv,

Add(MainForm,14162385,63,147)
{
Width=1131
Height=336
link(onCreate,15584075:doEvent1,[])
}
Add(WinExec,7014996,231,154)
{
FileName="POWERSHELL"
Mode=0
Action="runas"
Point(doConsoleExec)
Point(onConsoleError)
Point(onConsoleResult)
link(FileName,11795667:Value,[])
link(onConsoleError,2814240:doWork2,[])
link(onConsoleResult,2814240:doWork3,[(284,181)])
}
Add(Charset,1678668,301,168)
{
link(onCharset,2931260:doAdd,[])
}
Add(Memo,2931260,371,168)
{
Width=1115
Height=297
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(HubEx,2814240,280,168)
{
link(onEvent,1678668:doCharset,[])
}
Add(Memory,11795667,231,98)
{
Default=String(c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe)
}
Add(Hub,15584075,133,161)
{
InCount=2
link(onEvent1,2931260:doClear,[(158,167)(158,209)(340,209)(340,181)])
link(onEvent2,10721369:doString,[])
}
Add(Menu,12454084,63,196)
{
Menu=#4:Calc|
link(onSelectStr,15584075:doEvent2,[(109,202)(109,174)])
}
Add(FormatStr,10721369,175,168)
{
Mask="$ecc = [System.Security.Cryptography.ECDsa]::Create([System.Security.Cryptography.ECCurve]::CreateFromFriendlyName('secp256k1'))\r\n$s=$ecc.ExportExplicitParameters($true)\r\n$e=$ecc.ExportParameters($true)\r\n' Curve: '+$e.Curve.Oid.FriendlyName\r\n''\r\n' A='+ -join ($s.Curve.A| % {"""{0:X2}""" -f $_})\r\n' B='+ -join ($s.Curve.B| % {"""{0:X2}""" -f $_})\r\n' Gx='+ -join ($s.Curve.G.X| % {"""{0:X2}""" -f $_})\r\n' Gy='+ -join ($s.Curve.G.Y| % {"""{0:X2}""" -f $_})\r\n' P='+ -join ($s.Curve.Prime| % {"""{0:X2}""" -f $_})\r\n' Order='+ -join ($s.Curve.Order| % {"""{0:X2}""" -f $_})\r\n''\r\n' == Private key =='\r\n' D= '+ -join ($e.D| % {"""{0:X2}""" -f $_})\r\n''\r\n' == Public key =='\r\n' Qx= '+ -join ($e.Q.X| % {"""{0:X2}""" -f $_})\r\n' Qy= '+ -join ($e.Q.Y| % {"""{0:X2}""" -f $_})"
link(onFString,7014996:doConsoleExec,[])
}

карма: 20

0
Ответов: 168
Рейтинг: 1
#7: 2025-09-15 08:40:14 ЛС | профиль | цитата
Gunta писал(а):
Andrej77rv,

Спасибо вам огромное! Я бы поставил плюс, но у меня прав недостаточно

Редактировалось 2 раз(а), последний 2025-09-15 08:41:24
карма: 1

0
Ответов: 4667
Рейтинг: 767
#8: 2025-09-16 20:50:52 ЛС | профиль | цитата
Можно найти код для Delphi: https://wiki.freepascal.org/BigInteger
Вероятно, наиболее просто будет портировать GInt оттуда.
карма: 26

0
Ответов: 168
Рейтинг: 1
#9: 2025-09-17 08:06:51 ЛС | профиль | цитата
Gunta писал(а):
Andrej77rv,

Начал разбираться и не понятно как здесь поменять "Private key" ?

Редактировалось 1 раз(а), последний 2025-09-17 08:09:57
карма: 1

0
Главный модератор
Ответов: 3000
Рейтинг: 396
#10: 2025-09-22 11:18:14 ЛС | профиль | цитата

# Load the System.Numerics assembly if not already loaded (usually not needed in modern PowerShell)
# Add-Type -AssemblyName System.Numerics

# Create BigInteger objects
$num1 = [System.Numerics.BigInteger]::Parse("123456789012345678901234567890")
$num2 = [System.Numerics.BigInteger]::Parse("987654321098765432109876543210")

# Perform arithmetic operations
$sum = $num1 + $num2
Write-Host "Sum: $sum"

$product = $num1 * $num2
Write-Host "Product: $product"
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 168
Рейтинг: 1
#11: 2025-10-03 16:42:01 ЛС | профиль | цитата
Подскажите как зациклить этот код например 10 раз? Ответ нужно подставлять вместо переменных X и Y. Ответ в каждом цикле нужно сохранить в файл. Искал в гугле так и не понял.

X = 0xab62748bd5da065167ae2e2d4c23c241c56b6760e585bd9004a2e0e56bc0aa83
Y = 0xf4e098086a9558d9a0f8e99fa8b741076546a01d6d660cbcffc4ea1a2e97138a

Gx = 0x5b42d9575cc0874899f6a6a7e2c485aea0159b00b0ab85693d99b6fb0cd578dd
Gy = 0xB62C420A25FCBA029D5A521C12EBA6F603309A8C88F42D16AB9C76969A9A2033

p = 115792089237316195423570985008687907853269984665640564039457584007908834671663

def find_inverse(number, modulus):
return pow(number, -1, modulus)


Tochka3 = (Gy - Y) * find_inverse (Gx - X, p) % p

X3 = (Tochka3 ** 2 - X - Gx) % p
Y3 = (Tochka3 * (X - X3) - Y) % p

print(X3,Y3)

--- Добавлено в 2025-10-03 16:44:46

Это сложение точек X,Y и Gx,Gy

Редактировалось 1 раз(а), последний 2025-10-03 16:44:46
карма: 1

0
Ответов: 975
Рейтинг: 204
#12: 2025-10-03 19:30:34 ЛС | профиль | цитата
Andrej77rv писал(а):
Подскажите как зациклить этот код например 10 раз? Ответ нужно подставлять вместо переменных X и Y. Ответ в каждом цикле нужно сохранить в файл. Искал в гугле так и не понял.


Add(MainForm,13473972,231,161)
{
Width=538
Height=248
Point(Handle)
link(onCreate,5465620:doConvert,[])
}
Add(StreamConvertor,5465620,294,175)
{
Mode=7
Point(Data)
link(onResult,3030542:doCreate,[])
link(Data,9596503:Text,[])
}
Add(StrList,9596503,294,126)
{
Strings=#70:X = 0xab62748bd5da065167ae2e2d4c23c241c56b6760e585bd9004a2e0e56bc0aa83|70:Y = 0xf4e098086a9558d9a0f8e99fa8b741076546a01d6d660cbcffc4ea1a2e97138a|0:|71:Gx = 0x5b42d9575cc0874899f6a6a7e2c485aea0159b00b0ab85693d99b6fb0cd578dd|71:Gy = 0xB62C420A25FCBA029D5A521C12EBA6F603309A8C88F42D16AB9C76969A9A2033|0:|82:p = 115792089237316195423570985008687907853269984665640564039457584007908834671663|0:|34:def find_inverse(number, modulus):|35: return pow(number, -1, modulus)|0:|0:|19:for n in range(10):|0:|53: Tochka3 = (Gy - Y) * find_inverse (Gx - X, p) % p|0:|36: X3 = (Tochka3 ** 2 - X - Gx) % p|37: Y3 = (Tochka3 * (X - X3) - Y) % p|0:|18: # print(X3,Y3)|4: |56: print('-------------------------------------------')|20: print(f'X={X3}')|20: print(f'Y={Y3}')|4: |42: with open('my_file.txt', 'a') as file:|32: file.write(f'X={X3}\\n')|32: file.write(f'Y={Y3}\\n')|4: |10: X = X3|10: Y = Y3|
}
Add(WinExec,12628925,406,161)
{
FileName="python"
Mode=0
Point(onConsoleResult)
Point(doConsoleExec)
Point(onConsoleError)
link(onConsoleResult,8540153:doWork2,[])
link(onConsoleError,8540153:doWork3,[(459,188)])
}
Add(Memo,7517007,476,175)
{
Left=75
Top=45
Width=280
Height=200
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(HubEx,8540153,455,175)
{
link(onEvent,7517007:doAdd,[])
}
Add(TempFileStream,3030542,350,175)
{
Extention=".py"
link(onCreate,12628925:doConsoleExec,[])
}

карма: 20

0
Ответов: 168
Рейтинг: 1
#13: 2025-10-03 19:38:13 ЛС | профиль | цитата
Gunta писал(а):


Да спасибо. Я хотел сделать только на Python пока без HiAsm. Вот что получилось. Теперь думаю как сохранить каждый цикл в файл, т.е. добавлять новое значение в конец файла.

import time
start_time = time.time()
# код, время выполнения которого нужно измерить


# точка2
X = 0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5
Y = 0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a

# точка1
Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

p = 115792089237316195423570985008687907853269984665640564039457584007908834671663

def find_inverse(number, modulus):
return pow(number, -1, modulus)

a = 1

while a < 10:

Tochka3 = (Gy - Y) * find_inverse (Gx - X, p) % p

X3 = (Tochka3 ** 2 - X - Gx) % p
Y3 = (Tochka3 * (X - X3) - Y) % p

X = X3
Y = Y3

a = a+1

#print(X3,Y3)
res1 = hex(X3)
res2 = hex(Y3)
print(res1,res2)

end_time = time.time()
execution_time = end_time - start_time
print(f"Время выполнения: {execution_time} секунд")

--- Добавлено в 2025-10-03 19:48:14

Посмотрел ваш код...наверно будет работать.

--- Добавлено в 2025-10-03 19:54:15

Работает только всё в "куче". А можно ли как-то сделать чтобы каждый цикл добавлял данные в новую строку?



--- Добавлено в 2025-10-03 20:13:41

И еще как в файле my_file.txt заменить "nX=" на номер цикла?

Редактировалось 6 раз(а), последний 2025-10-03 20:19:16
карма: 1

0
Ответов: 975
Рейтинг: 204
#14: 2025-10-03 20:22:51 ЛС | профиль | цитата
Andrej77rv писал(а):
Работает только всё в "куче". А можно ли как-то сделать чтобы каждый цикл добавлял данные в новую строку?

Что-то ты делаешь не так. У меня всё построчно.

карма: 20

0
Ответов: 168
Рейтинг: 1
#15: 2025-10-03 20:30:26 ЛС | профиль | цитата
Буду разбираться. Ещё вопрос как поставить номер цикла к каждой строке?
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)