SquidDev

AES Pure Lua Minified

May 29th, 2014
8,619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.90 KB | None | 0 0
  1.  
  2. local function e(n)
  3. local s=setmetatable({},{__index=_ENV or getfenv()})if setfenv then setfenv(n,s)end;return n(s)or s end
  4. local t=e(function(n,...)local s=math.floor;local h,r
  5. r=function(d,l)return s(d%4294967296/2^l)end
  6. h=function(d,l)return(d*2^l)%4294967296 end
  7. return{bnot=bit.bnot,band=bit.band,bor=bit.bor,bxor=bit.bxor,rshift=r,lshift=h}end)
  8. local a=e(function(n,...)local s=t.bxor;local h=t.lshift;local r=0x100;local d=0xff;local l=0x11b;local u={}local c={}
  9. local function m(k,q)return s(k,q)end;local function f(k,q)return s(k,q)end
  10. local function w(k)if(k==1)then return 1 end;local q=d-c[k]return u[q]end;local function y(k,q)if(k==0 or q==0)then return 0 end;local j=c[k]+c[q]
  11. if(j>=d)then j=j-d end;return u[j]end
  12. local function p(k,q)
  13. if(k==0)then return 0 end;local j=c[k]-c[q]if(j<0)then j=j+d end;return u[j]end
  14. local function v()for k=1,r do print("log(",k-1,")=",c[k-1])end end
  15. local function b()for k=1,r do print("exp(",k-1,")=",u[k-1])end end;local function g()local k=1
  16. for q=0,d-1 do u[q]=k;c[k]=q;k=s(h(k,1),k)if k>d then k=f(k,l)end end end;g()return
  17. {add=m,sub=f,invert=w,mul=y,div=dib,printLog=v,printExp=b}end)
  18. util=e(function(n,...)local s=t.bxor;local h=t.rshift;local r=t.band;local d=t.lshift;local l;local function u(A)A=s(A,h(A,4))
  19. A=s(A,h(A,2))A=s(A,h(A,1))return r(A,1)end
  20. local function c(A,O)if(O==0)then return
  21. r(A,0xff)else return r(h(A,O*8),0xff)end end;local function m(A,O)
  22. if(O==0)then return r(A,0xff)else return d(r(A,0xff),O*8)end end
  23. local function f(A,O,I)local N={}
  24. for S=0,I-1 do
  25. N[S+1]=
  26. m(A[O+ (S*4)],3)+m(A[O+ (S*4)+1],2)+
  27. m(A[O+ (S*4)+2],1)+m(A[O+ (S*4)+3],0)if I%10000 ==0 then l()end end;return N end;local function w(A,O,I,N)N=N or#A;for S=0,N-1 do
  28. for H=0,3 do O[I+S*4+ (3-H)]=c(A[S+1],H)end;if N%10000 ==0 then l()end end
  29. return O end;local function y(A)local O=""
  30. for I,N in
  31. ipairs(A)do O=O..string.format("%02x ",N)end;return O end
  32. local function p(A)local O={}for I=1,#A,2 do O[#O+1]=tonumber(A:sub(I,
  33. I+1),16)end;return O end
  34. local function v(A)local O=type(A)
  35. if(O=="number")then return string.format("%08x",A)elseif
  36. (O=="table")then return y(A)elseif(O=="string")then local I={string.byte(A,1,#A)}
  37. return y(I)else return A end end
  38. local function b(A)local O=#A;local I=math.random(0,255)local N=math.random(0,255)
  39. local S=string.char(I,N,I,N,c(O,3),c(O,2),c(O,1),c(O,0))A=S..A;local H=math.ceil(#A/16)*16-#A;local R=""for D=1,H do R=R..
  40. string.char(math.random(0,255))end;return A..R end
  41. local function g(A)local O={string.byte(A,1,4)}if
  42. (O[1]==O[3]and O[2]==O[4])then return true end;return false end
  43. local function k(A)if(not g(A))then return nil end
  44. local O=
  45. m(string.byte(A,5),3)+
  46. m(string.byte(A,6),2)+m(string.byte(A,7),1)+m(string.byte(A,8),0)return string.sub(A,9,8+O)end;local function q(A,O)for I=1,16 do A[I]=s(A[I],O[I])end end
  47. local j,x,z=os.queueEvent,coroutine.yield,os.time;local _=z()local function l()local A=z()
  48. if A-_>=0.03 then _=A;j("sleep")x("sleep")end end
  49. local function E(A)
  50. local O,I,N,S=string.char,math.random,l,table.insert;local H={}
  51. for R=1,A do S(H,I(0,255))if R%10240 ==0 then N()end end;return H end
  52. local function T(A)local O,I,N,S=string.char,math.random,l,table.insert;local H={}for R=1,A do
  53. S(H,O(I(0,255)))if R%10240 ==0 then N()end end
  54. return table.concat(H)end
  55. return
  56. {byteParity=u,getByte=c,putByte=m,bytesToInts=f,intsToBytes=w,bytesToHex=y,hexToBytes=p,toHexString=v,padByteString=b,properlyDecrypted=g,unpadByteString=k,xorIV=q,sleepCheckIn=l,getRandomData=E,getRandomString=T}end)
  57. aes=e(function(n,...)local s=util.putByte;local h=util.getByte;local r='rounds'local d="type"local l=1;local u=2
  58. local c={}local m={}local f={}local w={}local y={}local p={}local v={}local b={}local g={}local k={}
  59. local q={0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,0x40000000,0x80000000,0x1b000000,0x36000000,0x6c000000,0xd8000000,0xab000000,0x4d000000,0x9a000000,0x2f000000}
  60. local function j(M)mask=0xf8;result=0
  61. for F=1,8 do result=t.lshift(result,1)
  62. parity=util.byteParity(t.band(M,mask))result=result+parity;lastbit=t.band(mask,1)
  63. mask=t.band(t.rshift(mask,1),0xff)
  64. if(lastbit~=0)then mask=t.bor(mask,0x80)else mask=t.band(mask,0x7f)end end;return t.bxor(result,0x63)end;local function x()
  65. for M=0,255 do if(M~=0)then inverse=a.invert(M)else inverse=M end
  66. mapped=j(inverse)c[M]=mapped;m[mapped]=M end end
  67. local function z()
  68. for M=0,255 do
  69. byte=c[M]
  70. f[M]=
  71. s(a.mul(0x03,byte),0)+s(byte,1)+s(byte,2)+s(a.mul(0x02,byte),3)w[M]=s(byte,0)+s(byte,1)+s(a.mul(0x02,byte),2)+
  72. s(a.mul(0x03,byte),3)y[M]=
  73.  
  74. s(byte,0)+s(a.mul(0x02,byte),1)+s(a.mul(0x03,byte),2)+s(byte,3)p[M]=
  75.  
  76. s(a.mul(0x02,byte),0)+s(a.mul(0x03,byte),1)+s(byte,2)+s(byte,3)end end
  77. local function _()
  78. for M=0,255 do byte=m[M]
  79. v[M]=
  80. s(a.mul(0x0b,byte),0)+s(a.mul(0x0d,byte),1)+s(a.mul(0x09,byte),2)+
  81. s(a.mul(0x0e,byte),3)
  82. b[M]=
  83. s(a.mul(0x0d,byte),0)+s(a.mul(0x09,byte),1)+s(a.mul(0x0e,byte),2)+
  84. s(a.mul(0x0b,byte),3)
  85. g[M]=
  86. s(a.mul(0x09,byte),0)+s(a.mul(0x0e,byte),1)+s(a.mul(0x0b,byte),2)+
  87. s(a.mul(0x0d,byte),3)
  88. k[M]=
  89. s(a.mul(0x0e,byte),0)+s(a.mul(0x0b,byte),1)+s(a.mul(0x0d,byte),2)+
  90. s(a.mul(0x09,byte),3)end end;local function E(M)local F=t.band(M,0xff000000)return
  91. (t.lshift(M,8)+t.rshift(F,24))end
  92. local function T(M)return
  93. s(c[h(M,0)],0)+s(c[h(M,1)],1)+s(c[h(M,2)],2)+
  94. s(c[h(M,3)],3)end
  95. local function A(M)local F={}local W=math.floor(#M/4)if(
  96. (W~=4 and W~=6 and W~=8)or(W*4 ~=#M))then
  97. error("Invalid key size: "..tostring(W))return nil end;F[r]=W+6;F[d]=l;for Y=0,W-1
  98. do
  99. F[Y]=
  100. s(M[Y*4+1],3)+s(M[Y*4+2],2)+s(M[Y*4+3],1)+s(M[Y*4+4],0)end
  101. for Y=W,(F[r]+1)*4-1 do
  102. local P=F[Y-1]
  103. if(Y%W==0)then P=E(P)P=T(P)local V=math.floor(Y/W)P=t.bxor(P,q[V])elseif(
  104. W>6 and Y%W==4)then P=T(P)end;F[Y]=t.bxor(F[(Y-W)],P)end;return F end
  105. local function O(M)local F=h(M,3)local W=h(M,2)local Y=h(M,1)local P=h(M,0)
  106. return
  107.  
  108.  
  109.  
  110. s(a.add(a.add(a.add(a.mul(0x0b,W),a.mul(0x0d,Y)),a.mul(0x09,P)),a.mul(0x0e,F)),3)+
  111. s(a.add(a.add(a.add(a.mul(0x0b,Y),a.mul(0x0d,P)),a.mul(0x09,F)),a.mul(0x0e,W)),2)+
  112. s(a.add(a.add(a.add(a.mul(0x0b,P),a.mul(0x0d,F)),a.mul(0x09,W)),a.mul(0x0e,Y)),1)+
  113. s(a.add(a.add(a.add(a.mul(0x0b,F),a.mul(0x0d,W)),a.mul(0x09,Y)),a.mul(0x0e,P)),0)end
  114. local function I(M)local F=h(M,3)local W=h(M,2)local Y=h(M,1)local P=h(M,0)local V=t.bxor(P,Y)
  115. local B=t.bxor(W,F)local G=t.bxor(V,B)G=t.bxor(G,a.mul(0x08,G))
  116. w=t.bxor(G,a.mul(0x04,t.bxor(Y,F)))G=t.bxor(G,a.mul(0x04,t.bxor(P,W)))
  117. return
  118.  
  119.  
  120. s(t.bxor(t.bxor(P,G),a.mul(0x02,t.bxor(F,P))),0)+s(t.bxor(t.bxor(Y,w),a.mul(0x02,V)),1)+
  121. s(t.bxor(t.bxor(W,G),a.mul(0x02,t.bxor(F,P))),2)+
  122. s(t.bxor(t.bxor(F,w),a.mul(0x02,B)),3)end
  123. local function N(M)local F=A(M)if(F==nil)then return nil end;F[d]=u;for W=4,(F[r]+1)*4-5 do
  124. F[W]=O(F[W])end;return F end;local function S(M,F,W)
  125. for Y=0,3 do M[Y+1]=t.bxor(M[Y+1],F[W*4+Y])end end
  126. local function H(M,F)
  127. F[1]=t.bxor(t.bxor(t.bxor(f[h(M[1],3)],w[h(M[2],2)]),y[h(M[3],1)]),p[h(M[4],0)])
  128. F[2]=t.bxor(t.bxor(t.bxor(f[h(M[2],3)],w[h(M[3],2)]),y[h(M[4],1)]),p[h(M[1],0)])
  129. F[3]=t.bxor(t.bxor(t.bxor(f[h(M[3],3)],w[h(M[4],2)]),y[h(M[1],1)]),p[h(M[2],0)])
  130. F[4]=t.bxor(t.bxor(t.bxor(f[h(M[4],3)],w[h(M[1],2)]),y[h(M[2],1)]),p[h(M[3],0)])end
  131. local function R(M,F)
  132. F[1]=s(c[h(M[1],3)],3)+s(c[h(M[2],2)],2)+
  133. s(c[h(M[3],1)],1)+s(c[h(M[4],0)],0)
  134. F[2]=s(c[h(M[2],3)],3)+s(c[h(M[3],2)],2)+
  135. s(c[h(M[4],1)],1)+s(c[h(M[1],0)],0)
  136. F[3]=s(c[h(M[3],3)],3)+s(c[h(M[4],2)],2)+
  137. s(c[h(M[1],1)],1)+s(c[h(M[2],0)],0)
  138. F[4]=s(c[h(M[4],3)],3)+s(c[h(M[1],2)],2)+
  139. s(c[h(M[2],1)],1)+s(c[h(M[3],0)],0)end
  140. local function D(M,F)
  141. F[1]=t.bxor(t.bxor(t.bxor(v[h(M[1],3)],b[h(M[4],2)]),g[h(M[3],1)]),k[h(M[2],0)])
  142. F[2]=t.bxor(t.bxor(t.bxor(v[h(M[2],3)],b[h(M[1],2)]),g[h(M[4],1)]),k[h(M[3],0)])
  143. F[3]=t.bxor(t.bxor(t.bxor(v[h(M[3],3)],b[h(M[2],2)]),g[h(M[1],1)]),k[h(M[4],0)])
  144. F[4]=t.bxor(t.bxor(t.bxor(v[h(M[4],3)],b[h(M[3],2)]),g[h(M[2],1)]),k[h(M[1],0)])end
  145. local function L(M,F)
  146. F[1]=s(m[h(M[1],3)],3)+s(m[h(M[4],2)],2)+
  147. s(m[h(M[3],1)],1)+s(m[h(M[2],0)],0)
  148. F[2]=s(m[h(M[2],3)],3)+s(m[h(M[1],2)],2)+
  149. s(m[h(M[4],1)],1)+s(m[h(M[3],0)],0)
  150. F[3]=s(m[h(M[3],3)],3)+s(m[h(M[2],2)],2)+
  151. s(m[h(M[1],1)],1)+s(m[h(M[4],0)],0)
  152. F[4]=s(m[h(M[4],3)],3)+s(m[h(M[3],2)],2)+
  153. s(m[h(M[2],1)],1)+s(m[h(M[1],0)],0)end
  154. local function U(M,F,W,Y,P)W=W or 1;Y=Y or{}P=P or 1;local V={}local B={}if(M[d]~=l)then
  155. error("No encryption key: "..
  156. tostring(M[d])..", expected "..l)return end
  157. V=util.bytesToInts(F,W,4)S(V,M,0)local G=1;while(G<M[r]-1)do H(V,B)S(B,M,G)G=G+1;H(B,V)S(V,M,G)
  158. G=G+1 end;H(V,B)S(B,M,G)G=G+1;R(B,V)S(V,M,G)
  159. util.sleepCheckIn()return util.intsToBytes(V,Y,P)end
  160. local function C(M,F,W,Y,P)W=W or 1;Y=Y or{}P=P or 1;local V={}local B={}
  161. if(M[d]~=u)then error("No decryption key: "..
  162. tostring(M[d]))return end;V=util.bytesToInts(F,W,4)S(V,M,M[r])local G=M[r]-1;while(G>2)do
  163. D(V,B)S(B,M,G)G=G-1;D(B,V)S(V,M,G)G=G-1 end;D(V,B)
  164. S(B,M,G)G=G-1;L(B,V)S(V,M,G)util.sleepCheckIn()return
  165. util.intsToBytes(V,Y,P)end;x()z()_()
  166. return{ROUNDS=r,KEY_TYPE=d,ENCRYPTION_KEY=l,DECRYPTION_KEY=u,expandEncryptionKey=A,expandDecryptionKey=N,encrypt=U,decrypt=C}end)
  167. local o=e(function(n,...)local function s()return{}end;local function h(d,l)table.insert(d,l)end;local function r(d)return
  168. table.concat(d)end;return{new=s,addString=h,toString=r}end)
  169. ciphermode=e(function(n,...)local s={}local h=math.random
  170. function s.encryptString(r,d,l,u)if u then local f={}for w=1,16 do f[w]=u[w]end;u=f else
  171. u={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}end
  172. local c=aes.expandEncryptionKey(r)local m=o.new()for f=1,#d/16 do local w=(f-1)*16+1
  173. local y={string.byte(d,w,w+15)}u=l(c,y,u)
  174. o.addString(m,string.char(unpack(y)))end
  175. return o.toString(m)end;function s.encryptECB(r,d,l)aes.encrypt(r,d,1,d,1)end;function s.encryptCBC(r,d,l)
  176. util.xorIV(d,l)aes.encrypt(r,d,1,d,1)return d end;function s.encryptOFB(r,d,l)
  177. aes.encrypt(r,l,1,l,1)util.xorIV(d,l)return l end;function s.encryptCFB(r,d,l)
  178. aes.encrypt(r,l,1,l,1)util.xorIV(d,l)return d end
  179. function s.decryptString(r,d,l,u)
  180. if u then
  181. local f={}for w=1,16 do f[w]=u[w]end;u=f else u={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}end;local c
  182. if(l==s.decryptOFB or l==s.decryptCFB)then
  183. c=aes.expandEncryptionKey(r)else c=aes.expandDecryptionKey(r)end;local m=o.new()for f=1,#d/16 do local w=(f-1)*16+1
  184. local y={string.byte(d,w,w+15)}u=l(c,y,u)
  185. o.addString(m,string.char(unpack(y)))end
  186. return o.toString(m)end;function s.decryptECB(r,d,l)aes.decrypt(r,d,1,d,1)return l end;function s.decryptCBC(r,d,l)
  187. local u={}for c=1,16 do u[c]=d[c]end;aes.decrypt(r,d,1,d,1)
  188. util.xorIV(d,l)return u end;function s.decryptOFB(r,d,l)
  189. aes.encrypt(r,l,1,l,1)util.xorIV(d,l)return l end;function s.decryptCFB(r,d,l)
  190. local u={}for c=1,16 do u[c]=d[c]end;aes.encrypt(r,l,1,l,1)
  191. util.xorIV(d,l)return u end;return s end)AES128=16;AES192=24;AES256=32;ECBMODE=1;CBCMODE=2;OFBMODE=3;CFBMODE=4
  192. local function i(n,s,h)local r=s;if
  193. (s==AES192)then r=32 end
  194. if(r>#n)then local l=""
  195. for u=1,r-#n do l=l..string.char(0)end;n=n..l else n=string.sub(n,1,r)end;local d={string.byte(n,1,#n)}
  196. n=ciphermode.encryptString(d,n,ciphermode.encryptCBC,h)n=string.sub(n,1,s)return{string.byte(n,1,#n)}end
  197. function encrypt(n,s,h,r,d)assert(n~=nil,"Empty password.")
  198. assert(n~=nil,"Empty data.")local r=r or CBCMODE;local h=h or AES128;local l=i(n,h,d)
  199. local u=util.padByteString(s)
  200. if(r==ECBMODE)then return
  201. ciphermode.encryptString(l,u,ciphermode.encryptECB,d)elseif(r==CBCMODE)then return
  202. ciphermode.encryptString(l,u,ciphermode.encryptCBC,d)elseif(r==OFBMODE)then return
  203. ciphermode.encryptString(l,u,ciphermode.encryptOFB,d)elseif(r==CFBMODE)then return
  204. ciphermode.encryptString(l,u,ciphermode.encryptCFB,d)else return nil end end
  205. function decrypt(n,s,h,r,d)local r=r or CBCMODE;local h=h or AES128;local l=i(n,h,d)local u
  206. if(r==ECBMODE)then
  207. u=ciphermode.decryptString(l,s,ciphermode.decryptECB,d)elseif(r==CBCMODE)then
  208. u=ciphermode.decryptString(l,s,ciphermode.decryptCBC,d)elseif(r==OFBMODE)then
  209. u=ciphermode.decryptString(l,s,ciphermode.decryptOFB,d)elseif(r==CFBMODE)then
  210. u=ciphermode.decryptString(l,s,ciphermode.decryptCFB,d)end;result=util.unpadByteString(u)
  211. if(result==nil)then return nil end;return result end
Advertisement
Add Comment
Please, Sign In to add comment