Skip to content

Commit 28e8720

Browse files
committed
Minified sha256
1 parent 7912eec commit 28e8720

1 file changed

Lines changed: 2 additions & 165 deletions

File tree

kristapi.lua

Lines changed: 2 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--KristAPI Alpha
2-
local version = "Alpha 0.62"
2+
local version = "0.63"
33
if not http then
44
printError("KristAPI " .. version .. " requires the HTTP API to be enabled!")
55
failedLoad = true
@@ -13,170 +13,7 @@ local function trim(s)
1313
end
1414
base = trim(http.get("https://raw.githubusercontent.com/BTCTaras/kristwallet/master/staticapi/syncNode").readAll())
1515
--SHA256, needed for other processes
16-
local MOD = 2^32
17-
local MODM = MOD-1
18-
local function memoize(f)
19-
local mt = {}
20-
local t = setmetatable({}, mt)
21-
function mt:__index(k)
22-
local v = f(k)
23-
t[k] = v
24-
return v
25-
end
26-
return t
27-
end
28-
local function make_bitop_uncached(t, m)
29-
local function bitop(a, b)
30-
local res,p = 0,1
31-
while a ~= 0 and b ~= 0 do
32-
local am, bm = a % m, b % m
33-
res = res + t[am][bm] * p
34-
a = (a - am) / m
35-
b = (b - bm) / m
36-
p = p*m
37-
end
38-
res = res + (a + b) * p
39-
return res
40-
end
41-
return bitop
42-
end
43-
local function make_bitop(t)
44-
local op1 = make_bitop_uncached(t,2^1)
45-
local op2 = memoize(function(a) return memoize(function(b) return op1(a, b) end) end)
46-
return make_bitop_uncached(op2, 2 ^ (t.n or 1))
47-
end
48-
local bxor1 = make_bitop({[0] = {[0] = 0,[1] = 1}, [1] = {[0] = 1, [1] = 0}, n = 4})
49-
local function bxor(a, b, c, ...)
50-
local z = nil
51-
if b then
52-
a = a % MOD
53-
b = b % MOD
54-
z = bxor1(a, b)
55-
if c then z = bxor(z, c, ...) end
56-
return z
57-
elseif a then return a % MOD
58-
else return 0 end
59-
end
60-
local function band(a, b, c, ...)
61-
local z
62-
if b then
63-
a = a % MOD
64-
b = b % MOD
65-
z = ((a + b) - bxor1(a,b)) / 2
66-
if c then z = bit32_band(z, c, ...) end
67-
return z
68-
elseif a then return a % MOD
69-
else return MODM end
70-
end
71-
local function bnot(x) return (-1 - x) % MOD end
72-
local function rshift1(a, disp)
73-
if disp < 0 then return lshift(a,-disp) end
74-
return math.floor(a % 2 ^ 32 / 2 ^ disp)
75-
end
76-
local function rshift(x, disp)
77-
if disp > 31 or disp < -31 then return 0 end
78-
return rshift1(x % MOD, disp)
79-
end
80-
local function lshift(a, disp)
81-
if disp < 0 then return rshift(a,-disp) end
82-
return (a * 2 ^ disp) % 2 ^ 32
83-
end
84-
local function rrotate(x, disp)
85-
x = x % MOD
86-
disp = disp % 32
87-
local low = band(x, 2 ^ disp - 1)
88-
return rshift(x, disp) + lshift(low, 32 - disp)
89-
end
90-
local k = {
91-
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
92-
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
93-
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
94-
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
95-
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
96-
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
97-
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
98-
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
99-
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
100-
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
101-
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
102-
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
103-
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
104-
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
105-
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
106-
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
107-
}
108-
local function str2hexa(s)
109-
return (string.gsub(s, ".", function(c) return string.format("%02x", string.byte(c)) end))
110-
end
111-
local function num2s(l, n)
112-
local s = ""
113-
for i = 1, n do
114-
local rem = l % 256
115-
s = string.char(rem) .. s
116-
l = (l - rem) / 256
117-
end
118-
return s
119-
end
120-
local function s232num(s, i)
121-
local n = 0
122-
for i = i, i + 3 do n = n*256 + string.byte(s, i) end
123-
return n
124-
end
125-
local function preproc(msg, len)
126-
local extra = 64 - ((len + 9) % 64)
127-
len = num2s(8 * len, 8)
128-
msg = msg .. "\128" .. string.rep("\0", extra) .. len
129-
assert(#msg % 64 == 0)
130-
return msg
131-
end
132-
local function initH256(H)
133-
H[1] = 0x6a09e667
134-
H[2] = 0xbb67ae85
135-
H[3] = 0x3c6ef372
136-
H[4] = 0xa54ff53a
137-
H[5] = 0x510e527f
138-
H[6] = 0x9b05688c
139-
H[7] = 0x1f83d9ab
140-
H[8] = 0x5be0cd19
141-
return H
142-
end
143-
local function digestblock(msg, i, H)
144-
local w = {}
145-
for j = 1, 16 do w[j] = s232num(msg, i + (j - 1)*4) end
146-
for j = 17, 64 do
147-
local v = w[j - 15]
148-
local s0 = bxor(rrotate(v, 7), rrotate(v, 18), rshift(v, 3))
149-
v = w[j - 2]
150-
w[j] = w[j - 16] + s0 + w[j - 7] + bxor(rrotate(v, 17), rrotate(v, 19), rshift(v, 10))
151-
end
152-
153-
local a, b, c, d, e, f, g, h = H[1], H[2], H[3], H[4], H[5], H[6], H[7], H[8]
154-
for i = 1, 64 do
155-
local s0 = bxor(rrotate(a, 2), rrotate(a, 13), rrotate(a, 22))
156-
local maj = bxor(band(a, b), band(a, c), band(b, c))
157-
local t2 = s0 + maj
158-
local s1 = bxor(rrotate(e, 6), rrotate(e, 11), rrotate(e, 25))
159-
local ch = bxor (band(e, f), band(bnot(e), g))
160-
local t1 = h + s1 + ch + k[i] + w[i]
161-
h, g, f, e, d, c, b, a = g, f, e, d + t1, c, b, a, t1 + t2
162-
end
163-
164-
H[1] = band(H[1] + a)
165-
H[2] = band(H[2] + b)
166-
H[3] = band(H[3] + c)
167-
H[4] = band(H[4] + d)
168-
H[5] = band(H[5] + e)
169-
H[6] = band(H[6] + f)
170-
H[7] = band(H[7] + g)
171-
H[8] = band(H[8] + h)
172-
end
173-
function sha256(msg)
174-
msg = preproc(msg, #msg)
175-
local H = initH256({})
176-
for i = 1, #msg, 64 do digestblock(msg, i, H) end
177-
return str2hexa(num2s(H[1], 4) .. num2s(H[2], 4) .. num2s(H[3], 4) .. num2s(H[4], 4) ..
178-
num2s(H[5], 4) .. num2s(H[6], 4) .. num2s(H[7], 4) .. num2s(H[8], 4))
179-
end
16+
local a=2^32;local b=a-1;local function c(d)local mt={}local e=setmetatable({},mt)function mt:__index(f)local g=d(f)e[f]=g;return g end;return e end;local function h(e,i)local function j(k,l)local m,o=0,1;while k~=0 and l~=0 do local p,q=k%i,l%i;m=m+e[p][q]*o;k=(k-p)/i;l=(l-q)/i;o=o*i end;m=m+(k+l)*o;return m end;return j end;local function r(e)local s=h(e,2^1)local t=c(function(k)return c(function(l)return s(k,l)end)end)return h(t,2^e.n or 1)end;local u=r({[0]={[0]=0,[1]=1},[1]={[0]=1,[1]=0},n=4})local function v(k,l,w,...)local x=nil;if l then k=k%a;l=l%a;x=u(k,l)if w then x=v(x,w,...)end;return x elseif k then return k%a else return 0 end end;local function y(k,l,w,...)local x;if l then k=k%a;l=l%a;x=(k+l-u(k,l))/2;if w then x=bit32_band(x,w,...)end;return x elseif k then return k%a else return b end end;local function z(A)return(-1-A)%a end;local function B(k,C)if C<0 then return lshift(k,-C)end;return math.floor(k%2^32/2^C)end;local function D(A,C)if C>31 or C<-31 then return 0 end;return B(A%a,C)end;local function lshift(k,C)if C<0 then return D(k,-C)end;return k*2^C%2^32 end;local function E(A,C)A=A%a;C=C%32;local F=y(A,2^C-1)return D(A,C)+lshift(F,32-C)end;local f={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}local function G(H)return string.gsub(H,".",function(w)return string.format("%02x",string.byte(w))end)end;local function I(J,n)local H=""for K=1,n do local L=J%256;H=string.char(L)..H;J=(J-L)/256 end;return H end;local function M(H,K)local n=0;for K=K,K+3 do n=n*256+string.byte(H,K)end;return n end;local function N(O,P)local Q=64-(P+9)%64;P=I(8*P,8)O=O.."\128"..string.rep("\0",Q)..P;assert(#O%64==0)return O end;local function R(S)S[1]=0x6a09e667;S[2]=0xbb67ae85;S[3]=0x3c6ef372;S[4]=0xa54ff53a;S[5]=0x510e527f;S[6]=0x9b05688c;S[7]=0x1f83d9ab;S[8]=0x5be0cd19;return S end;local function T(O,K,S)local U={}for V=1,16 do U[V]=M(O,K+(V-1)*4)end;for V=17,64 do local g=U[V-15]local W=v(E(g,7),E(g,18),D(g,3))g=U[V-2]U[V]=U[V-16]+W+U[V-7]+v(E(g,17),E(g,19),D(g,10))end;local k,l,w,X,Y,d,Z,_=S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[8]for K=1,64 do local W=v(E(k,2),E(k,13),E(k,22))local a0=v(y(k,l),y(k,w),y(l,w))local a1=W+a0;local a2=v(E(Y,6),E(Y,11),E(Y,25))local a3=v(y(Y,d),y(z(Y),Z))local a4=_+a2+a3+f[K]+U[K]_,Z,d,Y,X,w,l,k=Z,d,Y,X+a4,w,l,k,a4+a1 end;S[1]=y(S[1]+k)S[2]=y(S[2]+l)S[3]=y(S[3]+w)S[4]=y(S[4]+X)S[5]=y(S[5]+Y)S[6]=y(S[6]+d)S[7]=y(S[7]+Z)S[8]=y(S[8]+_)end;local function sha256(O)O=N(O,#O)local S=R({})for K=1,#O,64 do T(O,K,S)end;return G(I(S[1],4)..I(S[2],4)..I(S[3],4)..I(S[4],4)..I(S[5],4)..I(S[6],4)..I(S[7],4)..I(S[8],4))end
18017
--Making V2 address. Intended for wallets.
18118
local function tobase36(j)
18219
if j <= 6 then return "0"

0 commit comments

Comments
 (0)