Advertisement
aiden50_70

Untitled

Aug 2nd, 2019
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. function SHA256(mes)
  2. local con = 4294967296
  3. local ch = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}
  4. local k = {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  5. 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  6. 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  7. 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  8. 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  9. 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  10. 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  11. 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2}
  12.  
  13. local function bit(obj, bit)
  14. return obj%(bit*2)>=bit
  15. end
  16.  
  17. local function Or(ca, cb)
  18. local new = 0
  19. for i = 0, 32 do
  20. new = new+((bit(ca,2^i)or bit(cb,2^i))and 2^i or 0)
  21. end
  22. return new
  23. end
  24.  
  25. local function rshift(obj, times)
  26. times = times or 1
  27. return math.floor(obj*.5^times)%con
  28. end
  29.  
  30. local function lshift(obj, times)
  31. times = times or 1
  32. return math.floor(obj*2^times)%con
  33. end
  34.  
  35. local function rrotate(obj,times)
  36. times = times or 1
  37. return Or(rshift(obj,times),lshift(obj,32-times))
  38. end
  39.  
  40. local function And(ca, cb)
  41. local new = 0
  42. for i = 0, 32 do
  43. new = new+((bit(ca,2^i)and bit(cb,2^i))and 2^i or 0)
  44. end
  45. return new % 2^32
  46. end
  47.  
  48. local function append(cur)
  49. local new = ""
  50. for i = 1, 8 do
  51. local r = cur%256
  52. new = string.char(r)..new
  53. cur = (cur-r)/256
  54. end
  55. return new
  56. end
  57.  
  58. local function Not(ca)
  59. return (2^32-1)-ca
  60. end
  61.  
  62. local function xor(ca, cb)
  63. local new = 0
  64. for i = 0, 32 do
  65. new = new+(bit(ca,2^i)~=bit(cb,2^i)and 2^i or 0)
  66. end
  67. return new%con
  68. end
  69.  
  70. mes = mes.."\128"..("\0"):rep(64-((#mes+9)%64))..append(#mes*8)
  71.  
  72. local Chunks = {}
  73. for i = 1, #mes, 64 do
  74. table.insert(Chunks,mes:sub(i,i+63))
  75. end
  76. for _,Chunk in next,Chunks do
  77. local w = {}
  78. for i = 0, 15 do
  79. w[i] = (function()local n=0 for q=1,4 do n=n*256+Chunk:byte(i*4+q) end return n end)()
  80. end
  81. for i = 16, 63 do
  82. local s0 = xor(xor(rrotate(w[i-15],7),rrotate(w[i-15],18)),rshift(w[i-15],3))
  83. local s1 = xor(xor(rrotate(w[i-2],17),rrotate(w[i-2],19)),rshift(w[i-2],10))
  84. w[i] = (w[i-16] + s0 + w[i-7] + s1)%con
  85. end
  86. local a,b,c,d,e,f,g,h=unpack(ch)
  87. for i = 0, 63 do
  88. local s0 = xor(xor(rrotate(a,2),rrotate(a,13)),rrotate(a,22))
  89. local s1 = xor(xor(rrotate(e,6),rrotate(e,11)),rrotate(e,25))
  90. local t0 = h+s1+xor(And(e,f),And(Not(e),g))+k[i+1]+w[i]
  91. local t1 = s0+xor(xor(And(a,b),And(a,c)),And(b,c))
  92. h = g
  93. g = f
  94. f = e
  95. e = (d+t0)%con
  96. d = c
  97. c = b
  98. b = a
  99. a = (t0+t1)%con
  100. end
  101. ch[1]=(ch[1]+a)%con
  102. ch[2]=(ch[2]+b)%con
  103. ch[3]=(ch[3]+c)%con
  104. ch[4]=(ch[4]+d)%con
  105. ch[5]=(ch[5]+e)%con
  106. ch[6]=(ch[6]+f)%con
  107. ch[7]=(ch[7]+g)%con
  108. ch[8]=(ch[8]+h)%con
  109. end
  110. return ("%08x%08x%08x%08x%08x%08x%08x%08x"):format(unpack(ch))
  111. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement