24 lines
7.2 KiB
Lua
24 lines
7.2 KiB
Lua
local a={_VERSION="md5.lua 1.1.0",_DESCRIPTION="MD5 computation in Lua (5.1-3, LuaJIT)",_URL="https://github.com/kikito/md5.lua",_LICENSE=[[
|
|
MIT LICENSE
|
|
|
|
Copyright (c) 2013 Enrique García Cota + Adam Baldwin + hanzao + Equi 4 Software
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
copy of this software and associated documentation files (the
|
|
"Software"), to deal in the Software without restriction, including
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
]]}local b,c,d,e,f=string.char,string.byte,string.format,string.rep,string.sub;local g,h,i,j,k,l;local m,n=pcall(require,'bit')local o,p=pcall(require,'ffi')if m then g,h,i,j,k,l=n.bor,n.band,n.bnot,n.bxor,n.rshift,n.lshift else m,n=pcall(require,'bit32')if m then i=n.bnot;local a=function(a)return a<=2147483647 and a or-(i(a)+1)end;local a=function(b)return function(c,d)return a(b(a(c),a(d)))end end;g,h,j=a(n.bor),a(n.band),a(n.bxor)k,l=a(n.rshift),a(n.lshift)else local function a(a)local b=0;local c=1;for d=1,#a do b=b+a[d]*c;c=c*2 end;return b end;local function b(a,b)local a,b=a,b;if#a<#b then a,b=b,a end;for a=#b+1,#a do b[a]=0 end end;local c;i=function(b)local b=c(b)local c=math.max(#b,32)for a=1,c do if b[a]==1 then b[a]=0 else b[a]=1 end end;return a(b)end;c=function(a)if a<0 then return c(i(math.abs(a))+1)end;local b={}local c=1;local d;while a>0 do d=a%2;b[c]=d;a=(a-d)/2;c=c+1 end;return b end;g=function(d,e)local d=c(d)local c=c(e)b(d,c)local b={}for a=1,#d do if d[a]==0 and c[a]==0 then b[a]=0 else b[a]=1 end end;return a(b)end;h=function(d,e)local d=c(d)local c=c(e)b(d,c)local b={}for a=1,#d do if d[a]==0 or c[a]==0 then b[a]=0 else b[a]=1 end end;return a(b)end;j=function(d,e)local d=c(d)local c=c(e)b(d,c)local b={}for a=1,#d do if d[a]~=c[a]then b[a]=1 else b[a]=0 end end;return a(b)end;k=function(a,b)local c=0;if a<0 then a=i(math.abs(a))+1;c=2147483648 end;local d=math.floor;for b=1,b do a=a/2;a=g(d(a),c)end;return d(a)end;l=function(a,b)if a<0 then a=i(math.abs(a))+1 end;for b=1,b do a=a*2 end;return h(a,4294967295)end end end;local i;if o then local a=p.typeof("int[1]")i=function(b)return p.string(a(b),4)end else i=function(a)local a=function(c)return b(h(k(a,c),255))end;return a(0)..a(8)..a(16)..a(24)end end;local function m(a)local b=0;for d=1,#a do b=b*256+c(a,d)end;return b end;local n;if o then local a=p.typeof("const char*")local b=p.typeof("const int*")n=function(c)local a=a(c)return p.cast(b,a)[0]end else n=function(a)local b=0;for d=#a,1,-1 do b=b*256+c(a,d)end;return b end end;local function c(a)return{n(f(a,1,4)),n(f(a,5,8)),n(f(a,9,12)),n(f(a,13,16)),n(f(a,17,20)),n(f(a,21,24)),n(f(a,25,28)),n(f(a,29,32)),n(f(a,33,36)),n(f(a,37,40)),n(f(a,41,44)),n(f(a,45,48)),n(f(a,49,52)),n(f(a,53,56)),n(f(a,57,60)),n(f(a,61,64))}end;local n={3614090360,3905402710,606105819,3250441966,4118548399,1200080426,2821735955,4249261313,1770035416,2336552879,4294925233,2304563134,1804603682,4254626195,2792965006,1236535329,4129170786,3225465664,643717713,3921069994,3593408605,38016083,3634488961,3889429448,568446438,3275163606,4107603335,1163531501,2850285829,4243563512,1735328473,2368359562,4294588738,2272392833,1839030562,4259657740,2763975236,1272893353,4139469664,3200236656,681279174,3936430074,3572445317,76029189,3654602809,3873151461,530742520,3299628645,4096336452,1126891415,2878612391,4237533241,1700485571,2399980690,4293915773,2240044497,1873313359,4264355552,2734768916,1309151649,4149444226,3174756917,718787259,3951481745,1732584193,4023233417,2562383102,271733878}local o=function(a,b,c)return g(h(a,b),h(-a-1,c))end;local p=function(a,b,c)return g(h(a,c),h(b,-c-1))end;local q=function(a,b,c)return j(a,j(b,c))end;local j=function(a,b,c)return j(b,g(a,-c-1))end;local g=function(a,b,c,d,e,f,i,j)b=h(b+a(c,d,e)+f+j,4294967295)return g(l(h(b,k(4294967295,i)),i),k(b,32-i))+c end;local function k(a,b,c,d,e)local f,i,k,l=a,b,c,d;local m=n;f=g(o,f,i,k,l,e[0],7,m[1])l=g(o,l,f,i,k,e[1],12,m[2])k=g(o,k,l,f,i,e[2],17,m[3])i=g(o,i,k,l,f,e[3],22,m[4])f=g(o,f,i,k,l,e[4],7,m[5])l=g(o,l,f,i,k,e[5],12,m[6])k=g(o,k,l,f,i,e[6],17,m[7])i=g(o,i,k,l,f,e[7],22,m[8])f=g(o,f,i,k,l,e[8],7,m[9])l=g(o,l,f,i,k,e[9],12,m[10])k=g(o,k,l,f,i,e[10],17,m[11])i=g(o,i,k,l,f,e[11],22,m[12])f=g(o,f,i,k,l,e[12],7,m[13])l=g(o,l,f,i,k,e[13],12,m[14])k=g(o,k,l,f,i,e[14],17,m[15])i=g(o,i,k,l,f,e[15],22,m[16])f=g(p,f,i,k,l,e[1],5,m[17])l=g(p,l,f,i,k,e[6],9,m[18])k=g(p,k,l,f,i,e[11],14,m[19])i=g(p,i,k,l,f,e[0],20,m[20])f=g(p,f,i,k,l,e[5],5,m[21])l=g(p,l,f,i,k,e[10],9,m[22])k=g(p,k,l,f,i,e[15],14,m[23])i=g(p,i,k,l,f,e[4],20,m[24])f=g(p,f,i,k,l,e[9],5,m[25])l=g(p,l,f,i,k,e[14],9,m[26])k=g(p,k,l,f,i,e[3],14,m[27])i=g(p,i,k,l,f,e[8],20,m[28])f=g(p,f,i,k,l,e[13],5,m[29])l=g(p,l,f,i,k,e[2],9,m[30])k=g(p,k,l,f,i,e[7],14,m[31])i=g(p,i,k,l,f,e[12],20,m[32])f=g(q,f,i,k,l,e[5],4,m[33])l=g(q,l,f,i,k,e[8],11,m[34])k=g(q,k,l,f,i,e[11],16,m[35])i=g(q,i,k,l,f,e[14],23,m[36])f=g(q,f,i,k,l,e[1],4,m[37])l=g(q,l,f,i,k,e[4],11,m[38])k=g(q,k,l,f,i,e[7],16,m[39])i=g(q,i,k,l,f,e[10],23,m[40])f=g(q,f,i,k,l,e[13],4,m[41])l=g(q,l,f,i,k,e[0],11,m[42])k=g(q,k,l,f,i,e[3],16,m[43])i=g(q,i,k,l,f,e[6],23,m[44])f=g(q,f,i,k,l,e[9],4,m[45])l=g(q,l,f,i,k,e[12],11,m[46])k=g(q,k,l,f,i,e[15],16,m[47])i=g(q,i,k,l,f,e[2],23,m[48])f=g(j,f,i,k,l,e[0],6,m[49])l=g(j,l,f,i,k,e[7],10,m[50])k=g(j,k,l,f,i,e[14],15,m[51])i=g(j,i,k,l,f,e[5],21,m[52])f=g(j,f,i,k,l,e[12],6,m[53])l=g(j,l,f,i,k,e[3],10,m[54])k=g(j,k,l,f,i,e[10],15,m[55])i=g(j,i,k,l,f,e[1],21,m[56])f=g(j,f,i,k,l,e[8],6,m[57])l=g(j,l,f,i,k,e[15],10,m[58])k=g(j,k,l,f,i,e[6],15,m[59])i=g(j,i,k,l,f,e[13],21,m[60])f=g(j,f,i,k,l,e[4],6,m[61])l=g(j,l,f,i,k,e[11],10,m[62])k=g(j,k,l,f,i,e[2],15,m[63])i=g(j,i,k,l,f,e[9],21,m[64])return h(a+f,4294967295),h(b+i,4294967295),h(c+k,4294967295),h(d+l,4294967295)end;local function g(a,b)a.pos=a.pos+#b;b=a.buf..b;for d=1,#b-63,64 do local b=c(f(b,d,d+63))assert(#b==16)b[0]=table.remove(b,1)a.a,a.b,a.c,a.d=k(a.a,a.b,a.c,a.d,b)end;a.buf=f(b,math.floor(#b/64)*64+1,#b)return a end;local function c(a)local c=a.pos;local d=56-c%64;if c%64>56 then d=d+64 end;if d==0 then d=64 end;local b=b(128)..e(b(0),d-1)..i(h(8*c,4294967295))..i(math.floor(c/536870912))g(a,b)assert(a.pos%64==0)return i(a.a)..i(a.b)..i(a.c)..i(a.d)end;function a.new()return{a=n[65],b=n[66],c=n[67],d=n[68],pos=0,buf='',update=g,finish=c}end;function a.tohex(a)return d("%08x%08x%08x%08x",m(f(a,1,4)),m(f(a,5,8)),m(f(a,9,12)),m(f(a,13,16)))end;function a.sum(b)return a.new():update(b):finish()end;function a.sumhexa(b)return a.tohex(a.sum(b))end;return a |