fork download
  1. def extended_gcd(aa, bb):
  2. lastremainder, remainder = abs(aa), abs(bb)
  3. x, lastx, y, lasty = 0, 1, 1, 0
  4. while remainder:
  5. lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
  6. x, lastx = lastx - quotient*x, x
  7. y, lasty = lasty - quotient*y, y
  8. return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)
  9.  
  10. def modinv(a, m):
  11. g, x, y = extended_gcd(a, m)
  12. if g != 1:
  13. raise ValueError
  14. return x % m
  15. N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
  16.  
  17. R1 = 0x000f18c2d1fe6513b90f44513e975e05cc498e7f5a565b46c65b1d448734392c6f
  18. S1 = 0x0000917766d14f2e9933eb269c83b3ad440ed8432da8beb5733f34046509e48b1d85
  19. Z1 = 0x000d9dd44880b58f3e12c66978fc4651f20442a0b47731f6bcc9af594a67dcfb7e
  20. X1 = 0x008b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
  21. K1 = 0x0062d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5d
  22.  
  23. R2 = 0x0056b6c0b4c19ee6978ff662aad1257dd2c74b21ba7a85c563a8ea7f3d492f2d74
  24. S2 = 0x002eda98beedff7c75c9a3a19c2fd051ed9c6c8c6f500332ffed62b57e793cdf8a
  25. Z2 = 0x0020a998e0382becbcc7055797c9787e42f1710664d9fd51c64d238162cc0b7843
  26. X2 = 0x008b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
  27. K2 = 0x00a3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299ea
  28.  
  29. R11 = ((((S1 * K1) - Z1) * modinv(X1,N)) % N)
  30. S11 = (((Z1 + (X1 * R1)) * modinv(K1,N)) % N)
  31. Z11 = (((S1 * K1) - (X1 * R1)) % N)
  32. X11 = ((((S1 * K1) - Z1) * modinv(R1,N)) % N)
  33. K11 = (((Z1 + (X1 * R1)) * modinv(S1,N)) % N)
  34.  
  35. print hex(R11)
  36. print hex(S11)
  37. print hex(Z11)
  38. print hex(X11)
  39. print hex(K11)
  40.  
  41. R22 = ((((S2 * K2) - Z2) * modinv(X2,N)) % N)
  42. S22 = (((Z2 + (X2 * R2)) * modinv(K2,N)) % N)
  43. Z22 = (((S2 * K2) - (X2 * R2)) % N)
  44. X22 = ((((S2 * K2) - Z2) * modinv(R2,N)) % N)
  45. K22 = (((Z2 + (X2 * R2)) * modinv(S2,N)) % N)
  46.  
  47. print hex(R22)
  48. print hex(S22)
  49. print hex(Z22)
  50. print hex(X22)
  51. print hex(K22)
  52. print "по формуле"
  53.  
  54. c=((K2-K1) % N)
  55. print hex(c)
  56.  
  57. k111=((R2*Z1+R1*S2*c-R1*Z2) * modinv(S1*R2-S2*R1,N) % N)
  58. print hex(k111)
  59.  
  60. k222=((R2*Z1+R2*S1*c-R1*Z2) * modinv(S1*R2-S2*R1,N) % N)
  61. print hex(k222)
  62.  
  63. print "--------5------------"
  64. bn1 = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
  65. ky1 = 0x1758bdd2200077e02c7f17179a2cf5a7b1155532d49e58efe18137b9415cd85aca5c3392cb44f751d64392dab61ed7202c9f36e6121690622cce716fc98ae39894a8a66c0149ffba909eef6251c6f35e016fc336afc8718166f9576f28fa5718
  66. ug1 = 0x81a5fd78281d55e9b940ba20c3dee1ae953a1518108c43919d896d8847feeaa5
  67. ps1 = 0x27d663a09aaf728cd328e772d3f78dc901bed7f4ab20df5bfb385c84eb7d3c44e27afdc0a66677f2be38ec319431fb09c36a60da61c3eed4b37e386f05a2788ecf09f853005816cbf94065c8bd34abd5792088932105b8e09ee1972ce766ac4b
  68.  
  69. Kc = 0x408333681D759EF12AA0823F31A35DE80A312F5A8224D72512FE5053270A6B8D
  70. K59551 = 0x62d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5d
  71. K59552 = 0xa3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299ea
  72. Kf1 = 0x02767049a2313d41823a26c8ebdc781f43eef089be958e7f972d2df3c53c34d6
  73. Kf2 = 0x81a5fd78281d55e9b940ba20c3dee1ae953a1518108c43919d896d8847feeaa5
  74. K595511 = 0x1f353d330b8a9930a0a8182250236bcd7a2e158f5e53f89432eb50c98dbfe908
  75. K595522 = 0x5fb8709b29003821cb489a6181c6c9b5842e158f5e53f89432eb50c98dbfe908
  76.  
  77.  
  78.  
  79.  
  80. K1543 = ((ug1 + K59551) * modinv(K59552,bn1))
  81. print hex(K1543)
  82. print hex((K1543) // bn1)
  83. print hex((K1543) % bn1)
  84.  
  85. K1543f1 = (Kf2 + K59551)
  86. print hex((K1543f1) // bn1)
  87. print hex((K1543f1) % bn1)
  88. K1543f2 = (Kf1 * K59552)
  89. print hex((K1543f2) // bn1)
  90. print hex((K1543f2) % bn1)
  91.  
  92. K1543f3 = (Kf2 + K595511)
  93. print hex((K1543f3) // bn1)
  94. print hex((K1543f3) % bn1)
  95. K1543f4 = (Kf1 * K595522)
  96. print hex((K1543f4) // bn1)
  97. print hex((K1543f4) % bn1)
  98.  
  99. Xd11 = 0x8b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0
  100. gg1 = 0x09C4D5B094A350BEEC4CF61279A96125C4364AD84ADB86D0A47E506AF58CECBA
  101. ss1 = 0x9BC39297697875598A37E6E68FB149898561426D5A0675C0B41308576E874B7C
  102. gg2 = 0x593AE836F08AB644D0D3F0A75928FD5CBBED659C9EB33AAC0E47B7723D36CE19
  103. ss2 = 0x0DE0DEF6A46894FF326B13CA6F7AA98877178BBE5948C9E8CCCF3D302879B908
  104.  
  105. gg11 = 0x25A44667390E90C3DD2E975E6CAA19AE073E9FE4BE3E70A40A4C084C122F06A0
  106. ss11 = 0x659648e51e0913ca7bbe85b1071c0e0782afea9fc97d01cc292bd7aec846abad
  107. gg22 = 0x40EAAF5F7B4445024AB8EE00EDEE4CEE7FDF1768F69465BA2F332B63F9E0A55C
  108. ss22 = 0xfef5951a236505b938d604fc06eb7c321dcfedd414f4d477c285551e5d9da81f
  109.  
  110. print "-----сравнение-K1-K2------"
  111. VN1 = (ss1 - (Xd11 * gg1))
  112. print hex((VN1) // bn1)
  113. print hex((VN1) % bn1)
  114. VN2 = (ss2 + (Xd11 * gg2))
  115. print hex((VN2) // bn1)
  116. print hex((VN2) % bn1)
Success #stdin #stdout 0.01s 7240KB
stdin
Standard input is empty
stdout
0xf18c2d1fe6513b90f44513e975e05cc498e7f5a565b46c65b1d448734392c6fL
0x917766d14f2e9933eb269c83b3ad440ed8432da8beb5733f34046509e48b1d85L
0xd9dd44880b58f3e12c66978fc4651f20442a0b47731f6bcc9af594a67dcfb7eL
0x8b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0L
0x62d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5dL
0x56b6c0b4c19ee6978ff662aad1257dd2c74b21ba7a85c563a8ea7f3d492f2d74L
0x2eda98beedff7c75c9a3a19c2fd051ed9c6c8c6f500332ffed62b57e793cdf8aL
0x20a998e0382becbcc7055797c9787e42f1710664d9fd51c64d238162cc0b7843L
0x8b184d0143d89f76c342cbd9ffa96329ece0e854e6416fd1f58230b90f007ba0L
0xa3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299eaL
по формуле
0x408333681d759ef12aa0823f31a35de80a312f5a8224d72512fe5053270a6b8dL
0x62d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5dL
0xa3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299eaL
--------5------------
0xc9cce75fe5e95fcb1e8be95eca86aa5c7c48a6fcfd0dd71856a0ae54c8fe5e8ae5cbc133a2e0fb1601e236f3966a0d8279ce1d56b5e6ae2ecb2f24e051cd79e0L
0xc9cce75fe5e95fcb1e8be95eca86aa5d7cb9be39e98c269dfa4b4d83f834188aL
0x2767049a2313d41823a26c8ebdc781f43eef089be958e7f972d2df3c53c34d6L
0x0L
0xe477d7de71ebace373977832bda2702e8c5f9da7427af85b6cc7da2bca271902L
0x1923af42ab89b61afdb1d4aa1496ee9d634251c7a87e022ba7ce74f4c28781aL
0xe477d7de71ebace373977832bda2702e8c5f9da7427af85b6cc7da2bca271902L
0x0L
0xa0db3aab33a7ef1a59e8d24314024d7c0f682aa76ee03c25d074be51d5bed3adL
0xebb9e1575805301bc903720db75d0ad5b30d180a5cba2503688ae14b9a4543L
0xa0db3aab33a7ef1a59e8d24314024d7c0f682aa76ee03c25d074be51d5bed3adL
-----сравнение-K1-K2------
-0x54ecd6b29e456a43ceb7d9537449f22a9f3f459b2fafaa6725ac66325a11be1L
0x62d1da6649ce56f9ba56be11f9c38e7ff725888f31eeb4c9cf3e6ca382282e5dL
0x307b7472c27b389867f3a3343abf1bc87affc3b0f509db482bf42e8a82fd243eL
0xa3550dce6743f5eae4f740512b66ec680156b7e9b4138beee23cbcf6a93299eaL