Skip to content

Commit 2b1b378

Browse files
committed
Squash S256SUM.LUA to save disk space.
1 parent 670d84a commit 2b1b378

File tree

1 file changed

+27
-50
lines changed

1 file changed

+27
-50
lines changed

demo/core/S256SUM.LUA

Lines changed: 27 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,36 @@
11
#!/usr/bin/env lua
22

3-
--- Read file hash
4-
--- @param file file The file
5-
--- @return string The checksum result
3+
---Get file hash
4+
---@param file file The file
5+
---@return string SHA-256 checksum
66
function sha256_file(file)
7-
local M = 0xFFFFFFFF
8-
local K = {0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2}
9-
local function RR(x, n) return (x >> n) | ((x & M) << (32 - n)) end
10-
local function TF(k, H)
11-
local W = {}
12-
for i = 0, 15 do
13-
local o = i * 4 + 1
14-
W[i] = string.byte(k, o) << 24 | string.byte(k, o + 1) << 16 | string.byte(k, o + 2) << 8 | string.byte(k, o + 3)
15-
end
16-
for i = 16, 63 do
17-
local s0 = RR(W[i - 15], 7) ~ RR(W[i - 15], 18) ~ (W[i - 15] >> 3)
18-
local s1 = RR(W[i - 2], 17) ~ RR(W[i - 2], 19) ~ (W[i - 2] >> 10)
19-
W[i] = (W[i - 16] + s0 + W[i - 7] + s1) & M
20-
end
21-
local a, b, c, d, e, f, g, h = table.unpack(H)
22-
for i = 0, 63 do
23-
local S0, S1, ch, maj = RR(a, 2) ~ RR(a, 13) ~ RR(a, 22), RR(e, 6) ~ RR(e, 11) ~ RR(e, 25), (e & f) ~ ((~e) & g), (a & b) ~ (a & c) ~ (b & c)
24-
local t1 = (h + S1 + ch + K[i + 1] + W[i]) & M
25-
local t2 = (S0 + maj) & M
26-
h = g g = f f = e e = (d + t1) & M d = c c = b b = a a = (t1 + t2) & M
27-
end
28-
H[1] = (H[1] + a) & M H[2] = (H[2] + b) & M H[3] = (H[3] + c) & M H[4] = (H[4] + d) & M H[5] = (H[5] + e) & M H[6] = (H[6] + f) & M H[7] = (H[7] + g) & M H[8] = (H[8] + h) & M
29-
end
30-
local function P(l)
31-
local ml = l * 8
32-
local p = "\128"
33-
local pl = (56 - (l % 64))
34-
if pl <= 0 then pl = pl + 64 end
35-
p = p .. string.rep("\0", pl - 1)
36-
for i = 7, 0, -1 do p = p .. string.char((ml >> (i * 8)) & 0xFF) end
37-
return p
38-
end
39-
local H, l = {0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19}, 0
40-
while 1 do
41-
local c = file:read(64)
42-
if not c then break end
43-
l = l + #c
44-
if #c < 64 then c = c .. P(l) TF(c, H) break end
45-
TF(c, H)
46-
end
47-
local function h(x) return string.format("%08x", x) end
7+
local M,K=0xFFFFFFFF,{0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2}
8+
local function RR(x,n)return (x>>n)|((x&M)<<(32-n))end
9+
local function TF(k,H)local W={}for i=0,15 do local o=i*4+1 W[i]=string.byte(k,o)<<24|string.byte(k,o+1)<<16|string.byte(k,o+2)<<8|string.byte(k,o+3)end
10+
for i=16,63 do
11+
local s0,s1=RR(W[i-15],7)~RR(W[i-15],18)~(W[i-15]>>3),RR(W[i-2],17)~RR(W[i-2],19)~(W[i-2]>>10)
12+
W[i]=(W[i-16]+s0+W[i-7]+s1)&M end
13+
local a,b,c,d,e,f,g,h=table.unpack(H)for i=0,63 do
14+
local S0,S1,ch,maj=RR(a,2)~RR(a,13)~RR(a,22),RR(e,6)~RR(e,11)~RR(e,25),(e&f)~((~e)&g),(a&b)~(a&c)~(b&c)
15+
local t1,t2=(h+S1+ch+K[i+1]+W[i])&M,(S0+maj)&M
16+
h=g g=f f=e e=(d+t1)&M d=c c=b b=a a=(t1+t2)&M end
17+
H[1]=(H[1]+a)&M H[2]=(H[2]+b)&M H[3]=(H[3]+c)&M H[4]=(H[4]+d)&M H[5]=(H[5]+e)&M H[6]=(H[6]+f)&M H[7]=(H[7]+g)&M H[8]=(H[8]+h)&M end
18+
19+
local function P(l)local ml,p,pl=l*8,"\128",56-(l%64)
20+
if pl<=0 then pl=pl+64 end p=p..string.rep("\0",pl-1)
21+
for i=7,0,-1 do p=p..string.char((ml>>(i*8))&0xFF)end return p end
22+
23+
local H,l={0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19},0
24+
while 1 do local c=file:read(64)if not c then break end l=l+#c if #c<64 then c=c..P(l)TF(c,H)break end TF(c,H)end
25+
local function h(x)return string.format("%08x",x)end
4826
return table.concat({h(H[1]),h(H[2]),h(H[3]),h(H[4]),h(H[5]),h(H[6]),h(H[7]),h(H[8])})
4927
end
5028

5129
if LIB then return end
52-
if #arg < 1 then print((arg[-1] or "?") .. " " .. (arg[0] or "?") .. " [FILE]...") os.exit(1)
53-
else for i = 1, #arg do
54-
local file, err = io.open(arg[i], "rb")
55-
if not file then print(arg[i] .. ": " .. err) os.exit(1) end
56-
local sum = sha256_file(file) file:close()
57-
if sum then print(sum .. " " .. arg[i]) else print(arg[i] .. ": " .. "Unknown error") os.exit(-1) end
30+
if #arg<1 then print((arg[-1] or "?").." "..(arg[0] or "?").." [FILE]...")os.exit(1)
31+
else for i=1,#arg do local f,e=io.open(arg[i],"rb")
32+
if not f then print(e)os.exit(1)end
33+
local sum=sha256_file(f)f:close()
34+
if sum then print(sum.." "..arg[i])else print(arg[i]..": ".."Unknown error")os.exit(-1)end
5835
end
5936
end

0 commit comments

Comments
 (0)