Post
Topic
Board Other languages/locations
Re: فارسی (Persian)
by
Raoufy
on 12/11/2023, 05:55:50 UTC
    حالا فرض میکنیم که شما موفق شدین ان رو با پی جمع ببندین و تقسیم بر ۲ کنید، چه نتیجه ای میتونید بگیرید با این کار؟ اگر فکر میکنی که با ان و پی کوچکتر راحتتر میتونی کار کنی من میتونم اسکریپت در اختیارتون بذارم تا ان و پی رو به دلخواه انتخاب کنید، ولی نکته ای که باید در نظر داشته باشی، اینه که درسته که پابلیک کی فقط نماینده ی پرایوت کی هست اما دلیلی وجود نداره که شما فکر کنید رابطه ای بین این دو وجود داره بخصوص بین ان و پی، شما فقط زمانی با پی سر و کار دارید که تنها پابلیک کی در اختیارتونه ، اما وقتی با اسکالار کار کنید متوجه میشید که اصلا پی هیچ تاثیری در محاسبات شما نداره یا به عبارتی دیگر ، پی وجود خارجی نداره در معادلات مربوط به محاسبه پرایوت کی.



    حالا فرض میکنیم که شما موفق شدین ان رو با پی جمع ببندین و تقسیم بر ۲ کنید، چه نتیجه ای میتونید بگیرید با این کار؟ اگر فکر میکنی که با ان و پی کوچکتر راحتتر میتونی کار کنی من میتونم اسکریپت در اختیارتون بذارم تا ان و پی رو به دلخواه انتخاب کنید، ولی نکته ای که باید در نظر داشته باشی، اینه که درسته که پابلیک کی فقط نماینده ی پرایوت کی هست اما دلیلی وجود نداره که شما فکر کنید رابطه ای بین این دو وجود داره بخصوص بین ان و پی، شما فقط زمانی با پی سر و کار دارید که تنها پابلیک کی در اختیارتونه ، اما وقتی با اسکالار کار کنید متوجه میشید که اصلا پی هیچ تاثیری در محاسبات شما نداره یا به عبارتی دیگر ، پی وجود خارجی نداره در معادلات مربوط به محاسبه پرایوت کی.



injoori fekr nakon , kheyli ha hastan k curvo shekondan faghat publish namishe. man chizayi k migam ba example hastan theory nistan . faghat yekam komak mikham . age soali dashti begoo ba example bet begam.


code payino to python 2 run kon bebin .ablein groups 6 set of pk ,3x ,2y






pvk_hex = 40360748372915677739060455046407153445907911874643188801639465548522 # input privatekey

# 6 Pubkeys are
# Pubkey = [x,y]  [x*beta%p, y]  [x*beta2%p, y] [x,p-y]  [x*beta%p, p-y]  [x*beta2%p, p-y]

# 6 Privatekeys are
# pvk, pvk*lmda%N, pvk*lmda2%N, N-pvk, N-pvk*lmda%N, N-pvk*lmda2%N

# Field parameters
Pcurve = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

# Constants Based on Cube root of 1
beta = 0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee
beta2 = 0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40  # beta*beta
lmda = 0x5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72
lmda2 = 0xac9c52b33fa3cf1f5ad9e3fd77ed9ba4a880b9fc8ec739c2e0cfc810b51283ce  # lmda*lmda

Acurve = 0
Bcurve = 7  # These two define the elliptic curve. y^2 = x^3 + Acurve * x + Bcurve
Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240  # generator point x
Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424  # generator point y
GPoint = (Gx, Gy)

def OnCurve(x, y):
    A = (y * y) % Pcurve
    B = (x * x * x + Acurve * x + Bcurve) % Pcurve
    return A == B

def legendre_symbol(a, p):
    ls = pow(a, (p - 1) // 2, p)
    return -1 if ls == p - 1 else ls

def modsqrt(a, p):
    if legendre_symbol(a, p) != 1:
        return 0
    elif a == 0:
        return 0
    elif p == 2:
        return p
    elif p % 4 == 3:
        return pow(a, (p + 1) // 4, p)
    s = p - 1
    e = 0
    while s % 2 == 0:
        s //= 2
        e += 1
    n = 2
    while legendre_symbol(n, p) != -1:
        n += 1
    x = pow(a, (s + 1) // 2, p)
    b = pow(a, s, p)
    g = pow(n, s, p)
    r = e
    while True:
        t = b
        m = 0
        for m in range(r):
            if t == 1:
                break
            t = pow(t, 2, p)
        if m == 0:
            return x
        gs = pow(g, 2 ** (r - m - 1), p)
        g = (gs * gs) % p
        x = (x * gs) % p
        b = (b * g) % p
        r = m

def modinv(a, n):
    lm, hm = 1, 0
    low, high = a % n, n
    while low > 1:
        ratio = high // low
        nm, new = hm - lm * ratio, high - low * ratio
        lm, low, hm, high = nm, new, lm, low
    return lm % n

def ECadd(a, b):
    LamAdd = ((b[1] - a[1]) * modinv(b[0] - a[0], Pcurve)) % Pcurve
    x = (LamAdd * LamAdd - a[0] - b[0]) % Pcurve
    y = (LamAdd * (a[0] - x) - a[1]) % Pcurve
    return (x, y)

def ECdouble(a):
    Lam = ((3 * a[0] * a[0] + Acurve) * modinv(2 * a[1], Pcurve)) % Pcurve
    x = (Lam * Lam - 2 * a[0]) % Pcurve
    y = (Lam * (a[0] - x) - a[1]) % Pcurve
    return (x, y)

def one_to_6privatekey(pvk_hex):
    pvk = int(pvk_hex)
    print('PVK1 :', pvk)
    print('PVK2 :', (pvk * lmda % N))
    print('PVK3 :', (pvk * lmda2 % N))
    print('PVK4 :', (N - pvk))
    print('PVK5 :', (N - pvk * lmda % N))
    print('PVK6 :', (N - pvk * lmda2 % N))
    print('Pubkey1 :', EccMultiply(GPoint, pvk))
    print('Pubkey2 :', EccMultiply(GPoint, pvk * lmda % N))
    print('Pubkey3 :', EccMultiply(GPoint, pvk * lmda2 % N))
    print('Pubkey4 :', EccMultiply(GPoint, N - pvk))
    print('Pubkey5 :', EccMultiply(GPoint, N - pvk * lmda % N))
    print('Pubkey6 :', EccMultiply(GPoint, N - pvk * lmda2 % N))
    print()
    print()
    print('pvk++ :', (N - pvk) + (N - pvk * lmda % N) + (N - pvk * lmda2 % N))
    print('pvk-- :', (N - pvk) - (N - pvk * lmda % N) - (N - pvk * lmda2 % N))
    print('pvk--/2 :', ((N - pvk) - (N - pvk * lmda % N) - (N - pvk * lmda2 % N)) / 2)

def EccMultiply(GenPoint, ScalarHex):
    if ScalarHex == 0 or ScalarHex >= N:
        raise Exception("Invalid Scalar/Private Key")
    ScalarBin = bin(ScalarHex)[2:]
    Q = GenPoint
    for i in range(1, len(ScalarBin)):
        Q = ECdouble(Q)
        if ScalarBin == "1":
            Q = ECadd(Q, GenPoint)
    return Q

# Call the function
one_to_6privatekey(pvk_hex)