Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. import sys
  2. from oracle import *
  3. from helper import *
  4.  
  5. num_val = 7
  6. num_def = 1
  7.  
  8. # This GCD alghoritm was taken from internet source WIKIPEDIA. i think its not problem to look through such codes!
  9. def my_mod(a, b):
  10. tmp = [0, 1, 1, 0]
  11. a0 = tmp[0]
  12. a1 = tmp[1]
  13. b0 = tmp[2]
  14. b1 = tmp[3]
  15. b3 = b
  16. while 1:
  17. flg = a == 0
  18. if flg:
  19. break
  20. (t1, a), b3 = divmod(b3, a), a
  21. b0, b1 = b1, b0 - t1 * b1
  22. a0, a1 = a1, a0 - t1 * a1
  23. if b != 1:
  24. raise Exception("gcd(a, b) != 1")
  25. res_val = a0
  26. res_val = res_val % b
  27. return res_val
  28. def helper(a, b):
  29. tmp = [0, 1, 1, 0]
  30. a0 = tmp[0]
  31. a1 = tmp[1]
  32. b0 = tmp[2]
  33. b1 = tmp[3]
  34.  
  35. while 1:
  36. flg = (a == 0)
  37. if flg:
  38. break
  39. (t1, a), b = divmod(b, a), a
  40. b0, b1 = b1, b0 - t1 * b1
  41. a0, a1 = a1, a0 - t1 * a1
  42. return b, a0
  43.  
  44. def my_mod(fir, sec):
  45. a, b = helper(fir, sec)
  46. val = b
  47. val = val % sec
  48. return val
  49.  
  50.  
  51.  
  52. def return_args(text, n):
  53. arg_fir, arg_sec = ascii_to_int(text), num_val
  54. arg_thr = arg_fir
  55. arg_thr /= arg_sec
  56. return arg_fir, arg_sec, arg_thr
  57.  
  58.  
  59. def return_inverse(n):
  60. arg_fir, arg_sec = Sign(num_def), n
  61. return my_mod(arg_fir, arg_sec)
  62.  
  63.  
  64. def return_sign(text, n):
  65. Oracle_Connect()
  66. arg_fir, arg_sec, arg_thr = return_args(text, n)
  67. arg_inv = return_inverse(n)
  68.  
  69. a, b, c = Sign(arg_sec), Sign(arg_thr), arg_inv
  70. val = reduce(lambda x, y: x * y, [a, b, c])
  71. val = val % n
  72. verify_fir, verify_sec = arg_fir, val
  73. flg = Verify(verify_fir, verify_sec)
  74. if not flg:
  75. print "Error!"
  76. else:
  77. print "YES!"
  78. return val
  79.  
  80.  
  81. def main():
  82. text = "Crypto is hard --- even schemes that look complex can be broken"
  83. n = 119077393994976313358209514872004186781083638474007212865571534799455802984783764695504518716476645854434703350542987348935664430222174597252144205891641172082602942313168180100366024600206994820541840725743590501646516068078269875871068596540116450747659687492528762004294694507524718065820838211568885027869
  84. val = return_sign(text, n)
  85.  
  86. print val
  87.  
  88.  
  89. if __name__ == "__main__":
  90. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement