def extended_gcd(aa, bb):
lastremainder, remainder = abs(aa), abs(bb)
x, lastx, y, lasty = 0, 1, 1, 0
while remainder:
lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
x, lastx = lastx - quotient*x, x
y, lasty = lasty - quotient*y, y
return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)
def modinv(a, m):
g, x, y = extended_gcd(a, m)
if g != 1:
raise ValueError
return x % m
N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
R1 = 0x000f18c2d1fe6513b90f44513e975e05cc498e7f5a565b46c65b1d448734392c6f
S1 = 0x0000917766d14f2e9933eb269c83b3ad440ed8432da8beb5733f34046509e48b1d85
Z1 = 0x000d9dd44880b58f3e12c66978fc4651f20442a0b47731f6bcc9af594a67dcfb7e
X1 = 0x008b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
K1 = 0x0062d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5d
R2 = 0x0056b6c0b4c19ee6978ff662aad1257dd2c74b21ba7a85c563a8ea7f3d492f2d74
S2 = 0x002eda98beedff7c75c9a3a19c2fd051ed9c6c8c6f500332ffed62b57e793cdf8a
Z2 = 0x0020a998e0382becbcc7055797c9787e42f1710664d9fd51c64d238162cc0b7843
X2 = 0x008b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
K2 = 0x00a3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299ea
R11 = ((((S1 * K1) - Z1) * modinv(X1,N)) % N)
S11 = (((Z1 + (X1 * R1)) * modinv(K1,N)) % N)
Z11 = (((S1 * K1) - (X1 * R1)) % N)
X11 = ((((S1 * K1) - Z1) * modinv(R1,N)) % N)
K11 = (((Z1 + (X1 * R1)) * modinv(S1,N)) % N)
print hex(R11)
print hex(S11)
print hex(Z11)
print hex(X11)
print hex(K11)
R22 = ((((S2 * K2) - Z2) * modinv(X2,N)) % N)
S22 = (((Z2 + (X2 * R2)) * modinv(K2,N)) % N)
Z22 = (((S2 * K2) - (X2 * R2)) % N)
X22 = ((((S2 * K2) - Z2) * modinv(R2,N)) % N)
K22 = (((Z2 + (X2 * R2)) * modinv(S2,N)) % N)
print hex(R22)
print hex(S22)
print hex(Z22)
print hex(X22)
print hex(K22)
print "по формуле"
c=((K2-K1) % N)
print hex(c)
k111=((R2*Z1+R1*S2*c-R1*Z2) * modinv(S1*R2-S2*R1,N) % N)
print hex(k111)
k222=((R2*Z1+R2*S1*c-R1*Z2) * modinv(S1*R2-S2*R1,N) % N)
print hex(k222)
print "--------5------------"
bn1 = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
ky1 = 0x1758bdd2200077e02c7f17179a2cf5a7b1155532d49e58efe18137b9415cd85aca5c3392cb44f751d64392dab61ed7202c9f36e6121690622cce716fc98ae39894a8a66c0149ffba909eef6251c6f35e016fc336afc8718166f9576f28fa5718
ug1 = 0x81a5fd78281d55e9b940ba20c3dee1ae953a1518108c43919d896d8847feeaa5
ps1 = 0x27d663a09aaf728cd328e772d3f78dc901bed7f4ab20df5bfb385c84eb7d3c44e27afdc0a66677f2be38ec319431fb09c36a60da61c3eed4b37e386f05a2788ecf09f853005816cbf94065c8bd34abd5792088932105b8e09ee1972ce766ac4b
Kc = 0x408333681D759EF12AA0823F31A35DE80A312F5A8224D72512FE5053270A6B8D
K59551 = 0x62d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5d
K59552 = 0xa3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299ea
Kf1 = 0x02767049a2313d41823a26c8ebdc781f43eef089be958e7f972d2df3c53c34d6
Kf2 = 0x81a5fd78281d55e9b940ba20c3dee1ae953a1518108c43919d896d8847feeaa5
K595511 = 0x1f353d330b8a9930a0a8182250236bcd7a2e158f5e53f89432eb50c98dbfe908
K595522 = 0x5fb8709b29003821cb489a6181c6c9b5842e158f5e53f89432eb50c98dbfe908
K1543 = ((ug1 + K59551) * modinv(K59552,bn1))
print hex(K1543)
print hex((K1543) // bn1)
print hex((K1543) % bn1)
K1543f1 = (Kf2 + K59551)
print hex((K1543f1) // bn1)
print hex((K1543f1) % bn1)
K1543f2 = (Kf1 * K59552)
print hex((K1543f2) // bn1)
print hex((K1543f2) % bn1)
K1543f3 = (Kf2 + K595511)
print hex((K1543f3) // bn1)
print hex((K1543f3) % bn1)
K1543f4 = (Kf1 * K595522)
print hex((K1543f4) // bn1)
print hex((K1543f4) % bn1)
Xd11 = 0x8b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
gg1 = 0x09C4D5B094A350BEEC4CF61279A96125C4364AD84ADB86D0A47E506AF58CECBA
ss1 = 0x9BC39297697875598A37E6E68FB149898561426D5A0675C0B41308576E874B7C
gg2 = 0x593AE836F08AB644D0D3F0A75928FD5CBBED659C9EB33AAC0E47B7723D36CE19
ss2 = 0x0DE0DEF6A46894FF326B13CA6F7AA98877178BBE5948C9E8CCCF3D302879B908
gg11 = 0x25A44667390E90C3DD2E975E6CAA19AE073E9FE4BE3E70A40A4C084C122F06A0
ss11 = 0x659648e51e0913ca7bbe85b1071c0e0782afea9fc97d01cc292bd7aec846abad
gg22 = 0x40EAAF5F7B4445024AB8EE00EDEE4CEE7FDF1768F69465BA2F332B63F9E0A55C
ss22 = 0xfef5951a236505b938d604fc06eb7c321dcfedd414f4d477c285551e5d9da81f
print "-----сравнение-K1-K2------"
VN1 = (ss1 - (Xd11 * gg1))
print hex((VN1) // bn1)
print hex((VN1) % bn1)
VN2 = (ss2 + (Xd11 * gg2))
print hex((VN2) // bn1)
print hex((VN2) % bn1)