Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local nify = { "0", "1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" }
- local AAAAAAAA = print
- local AAAAAAA = string.sub
- local AAAAAAAAA = write
- local BBBBBB = string.len
- local BBBBBBB = term.setCursorPos
- local BBBBB = math.floor
- local CCCCC = os.pullEvent
- local CCCCCC = os.time
- local CCCC = os.day
- local DDDD = time
- local DDD = day
- local CCC = hashpass
- if not colors then
- colors.grey = colors.white
- colors.lightGrey = colors.white
- colors.red = colors.white
- end
- function hm()
- AAAAAAAA("How much?: ")
- end
- function upconfirmp()
- BBBBBBB(1,7)
- AAAAAAAA("Username: ")
- BBBBBBB(1,9)
- AAAAAAAA("Password: ")
- BBBBBBB(1,11)
- AAAAAAAA("Confirm Password: ")
- end
- function uandp()
- BBBBBBB(1,7)
- AAAAAAAA("Username: ")
- BBBBBBB(1,9)
- AAAAAAAA("Password: ")
- end
- function landn()
- cAAAAAAAAA("LOGIN NEW")
- end
- function logscr()
- cAAAAAAAAA(" L OOO GGGG IIIII N N",1)
- cAAAAAAAAA(" L O O G I NN N",2)
- cAAAAAAAAA(" L O O G GG I N N N",3)
- cAAAAAAAAA(" L O O G G I N NN",4)
- cAAAAAAAAA(" LLL OOO GGG IIIII N N",5)
- end
- function bw()
- BBBBBBB(1,2)
- term.setTextColor(colors.gray)
- cAAAAAAAAA("BBBB AAA N N K K")
- BBBBBBB(1,3)
- cAAAAAAAAA("B B A A NN N K K ")
- BBBBBBB(1,4)
- cAAAAAAAAA("BBBB AAAAA N N N KK ")
- BBBBBBB(1,5)
- cAAAAAAAAA("B B A A N NN K K ")
- BBBBBBB(1,6)
- cAAAAAAAAA("BBBB A A N N K K")
- end
- local function code(key, BBBB, mode)
- key = tostring(key)
- BBBB = tostring(BBBB)
- local kn = 1
- local nBBBB = ""
- for i = 1, #BBBB do
- cc = AAAAAAA(BBBB, i, i)
- for b = 1, 16 do
- if cc == nify[b] then
- ccn = b
- end
- end
- for c = 1, 16 do
- if AAAAAAA(key, kn, kn) == nify[c] then
- knn = c
- end
- end
- if mode == "AAAAAAAAAA" then
- ccn = ccn + knn
- elseif mode == "AAAAAAAAAAA" then
- ccn = ccn - knn
- end
- if ccn >= 17 then
- ccn = ccn - 16
- end
- if ccn <= 0 then
- ccn = ccn + 16
- end
- nBBBB = nBBBB..nify[ccn]
- if kn == #key then
- kn = 1
- else
- kn = kn +1
- end
- end
- return nBBBB
- end
- function AAAAAAAAAAA(key, BBBB)
- local tr = code(key, BBBB, "AAAAAAAAAAA")
- return tr
- end
- function AAAAAAAAAA(key, BBBB)
- local tr = code(key, BBBB, "AAAAAAAAAA")
- return tr
- end
- local MOD = 2^32
- local MODM = MOD-1
- local function memoize(f)
- local mt = {}
- local t = setmetatable({}, mt)
- function mt:__index(k)
- local v = f(k)
- t[k] = v
- return v
- end
- return t
- end
- local function make_bitop_uncached(t, m)
- local function bitop(a, b)
- local res,p = 0,1
- while a ~= 0 and b ~= 0 do
- local am, bm = a % m, b % m
- res = res + t[am][bm] * p
- a = (a - am) / m
- b = (b - bm) / m
- p = p*m
- end
- res = res + (a + b) * p
- return res
- end
- return bitop
- end
- local function make_bitop(t)
- local op1 = make_bitop_uncached(t,2^1)
- local op2 = memoize(function(a) return memoize(function(b) return op1(a, b) end) end)
- return make_bitop_uncached(op2, 2 ^ (t.n or 1))
- end
- local bxor1 = make_bitop({[0] = {[0] = 0,[1] = 1}, [1] = {[0] = 1, [1] = 0}, n = 4})
- local function bxor(a, b, c, ...)
- local z = nil
- if b then
- a = a % MOD
- b = b % MOD
- z = bxor1(a, b)
- if c then z = bxor(z, c, ...) end
- return z
- elseif a then return a % MOD
- else return 0 end
- end
- local function band(a, b, c, ...)
- local z
- if b then
- a = a % MOD
- b = b % MOD
- z = ((a + b) - bxor1(a,b)) / 2
- if c then z = bit32_band(z, c, ...) end
- return z
- elseif a then return a % MOD
- else return MODM end
- end
- local function bnot(x) return (-1 - x) % MOD end
- local function rshift1(a, disp)
- if disp < 0 then return lshift(a,-disp) end
- return BBBBB(a % 2 ^ 32 / 2 ^ disp)
- end
- local function rshift(x, disp)
- if disp > 31 or disp < -31 then return 0 end
- return rshift1(x % MOD, disp)
- end
- local function lshift(a, disp)
- if disp < 0 then return rshift(a,-disp) end
- return (a * 2 ^ disp) % 2 ^ 32
- end
- local function rrotate(x, disp)
- x = x % MOD
- disp = disp % 32
- local low = band(x, 2 ^ disp - 1)
- return rshift(x, disp) + lshift(low, 32 - disp)
- end
- 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,
- }
- local function str2hexa(s)
- return (string.gsub(s, ".", function(c) return string.format("%02x", string.byte(c)) end))
- end
- local function num2s(l, n)
- local s = ""
- for i = 1, n do
- local rem = l % 256
- s = string.char(rem) .. s
- l = (l - rem) / 256
- end
- return s
- end
- local function s232num(s, i)
- local n = 0
- for i = i, i + 3 do n = n*256 + string.byte(s, i) end
- return n
- end
- local function preproc(BBBB, len)
- local extra = 64 - ((len + 9) % 64)
- len = num2s(8 * len, 8)
- BBBB = BBBB .. "\128" .. string.rep("\0", extra) .. len
- assert(#BBBB % 64 == 0)
- return BBBB
- end
- local function initH256(H)
- H[1] = 0x6a09e667
- H[2] = 0xbb67ae85
- H[3] = 0x3c6ef372
- H[4] = 0xa54ff53a
- H[5] = 0x510e527f
- H[6] = 0x9b05688c
- H[7] = 0x1f83d9ab
- H[8] = 0x5be0cd19
- return H
- end
- local function digestblock(BBBB, i, H)
- local w = {}
- for j = 1, 16 do w[j] = s232num(BBBB, i + (j - 1)*4) end
- for j = 17, 64 do
- local v = w[j - 15]
- local s0 = bxor(rrotate(v, 7), rrotate(v, 18), rshift(v, 3))
- v = w[j - 2]
- w[j] = w[j - 16] + s0 + w[j - 7] + bxor(rrotate(v, 17), rrotate(v, 19), rshift(v, 10))
- end
- 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]
- for i = 1, 64 do
- local s0 = bxor(rrotate(a, 2), rrotate(a, 13), rrotate(a, 22))
- local maj = bxor(band(a, b), band(a, c), band(b, c))
- local t2 = s0 + maj
- local s1 = bxor(rrotate(e, 6), rrotate(e, 11), rrotate(e, 25))
- local ch = bxor (band(e, f), band(bnot(e), g))
- local t1 = h + s1 + ch + k[i] + w[i]
- h, g, f, e, d, c, b, a = g, f, e, d + t1, c, b, a, t1 + t2
- end
- H[1] = band(H[1] + a)
- H[2] = band(H[2] + b)
- H[3] = band(H[3] + c)
- H[4] = band(H[4] + d)
- H[5] = band(H[5] + e)
- H[6] = band(H[6] + f)
- H[7] = band(H[7] + g)
- H[8] = band(H[8] + h)
- end
- local function sha256(BBBB)
- BBBB = preproc(BBBB, #BBBB)
- local H = initH256({})
- for i = 1, #BBBB, 64 do digestblock(BBBB, i, H) end
- return str2hexa(num2s(H[1], 4) .. num2s(H[2], 4) .. num2s(H[3], 4) .. num2s(H[4], 4) ..
- num2s(H[5], 4) .. num2s(H[6], 4) .. num2s(H[7], 4) .. num2s(H[8], 4))
- end
- function displayBalance()
- term.setBackgroundColor(colors.white)
- BBBBBBB(1,16)
- AAAAAAAAA(" ")
- BBBBBBB(1,17)
- clearbal = ""
- for i = 1, #tostring(oldb) do
- clearbal = clearbal.." "
- end
- cAAAAAAAAA(" "..clearbal.." ")
- term.setBackgroundColor(colors.lightGray)
- BBBBBBB(1,17)
- cAAAAAAAAA("$"..balance)
- end
- screenx, screeny = term.getSize()
- function cAAAAAAAAA(text,ytwa)
- if not ytwa then
- unusedx,ytwa = term.getCursorPos()
- end
- local len = BBBBBB(text)
- local sxtw = screenx /2
- local len = len /2
- local sxtw = sxtw - len
- BBBBBBB(sxtw,ytwa)
- AAAAAAAAA(text)
- end
- function pay(userto, confirmpass, tsamount,userfrom)
- if tsamount >= 1 then
- DDDD = CCCCCC()
- DDDD = DDDD +5
- DDD = CCCC()
- S3 = DDDD *DDD
- S3b = S3 *4.4
- S3b = BBBBB(S3b)
- S3c = S3 *7.3
- S3c = BBBBB(S3c)
- CCC = sha256(confirmpass)
- CCC = AAAAAAAAAA(S3c, CCC)
- CCC = CCC .. " " .. S3b
- UID = math.random(1,65535)
- userto = string.lower(userto)
- AAAAA(sChan, UID, "Pay "..userto.." "..tsamount.." "..CCC.." "..userfrom)
- rr = 0
- while rr == 0 do
- event, side, fromchan, replychan, BBBB, distance = CCCCC("modem_message")
- if fromchan == sChan and replychan == UID then
- if BBBB == "Pay Success" then
- rr = 1
- return true
- else
- rr = 1
- return false
- end
- end
- end
- else
- return false
- end
- end
- oldb = 0
- function getBalance(usergb)
- UID = math.random(1,65535)
- usergb = string.lower(usergb)
- AAAAA(sChan, UID, "Get Balance "..usergb)
- receivedreply = 0
- while receivedreply == 0 do
- event, side, fromchan, replychan, BBBB, distance = CCCCC("modem_message")
- if fromchan == sChan and replychan == UID then
- if oldb ~= nil then
- oldb = balance
- end
- balance = BBBB
- receivedreply = 1
- return balance
- end
- end
- end
- function tryLogin(usere,passe)
- usere = string.lower(usere)
- DDDD = CCCCCC()
- DDDD = DDDD +5
- DDD = CCCC()
- S1 = DDDD *DDD
- S1b = S1 *3.8
- S1b = BBBBB(S1b)
- S1c = S1 *3.1
- S1c = BBBBB(S1c)
- S1 = S1b
- passts = sha256(passe)
- passts = AAAAAAAAAA(S1c, passts)
- passts = passts .. " " .. S1
- UID = math.random(1,65535)
- AAAAA(sChan, UID, "Login "..usere .. " "..passts)
- rr = 0
- while rr == 0 do
- event, side, fromchan, replychan, BBBB, distance = CCCCC("modem_message")
- if fromchan == sChan and replychan == UID then
- if BBBB == "Login Correct" then
- return true
- else
- return false
- end
- rr = 1
- end
- end
- end
- function start()
- sChan = 16742
- foundside = 0
- if foundside == 0 then
- if peripheral.isPresent("top") and peripheral.getType("top") == "modem" then
- modem = peripheral.wrap("top")
- end
- end
- if foundside == 0 then
- if peripheral.isPresent("bottom") and peripheral.getType("bottom") == "modem" then
- modem = peripheral.wrap("bottom")
- end
- end
- if foundside == 0 then
- if peripheral.isPresent("front") and peripheral.getType("front") == "modem" then
- modem = peripheral.wrap("front")
- end
- end
- if foundside == 0 then
- if peripheral.isPresent("back") and peripheral.getType("back") == "modem" then
- modem = peripheral.wrap("back")
- end
- end
- if foundside == 0 then
- if peripheral.isPresent("left") and peripheral.getType("left") == "modem" then
- modem = peripheral.wrap("left")
- end
- end
- if foundside == 0 then
- if peripheral.isPresent("right") and peripheral.getType("right") == "modem" then
- modem = peripheral.wrap("right")
- end
- end
- modem.open(sChan)
- AAAAA = modem.transmit
- term.setBackgroundColor(colors.white)
- term.clear()
- bw()
- BBBBBBB(1,7)
- term.setBackgroundColor(colors.lightGray)
- term.setTextColor(colors.black)
- landn()
- end
- function login(user,balance)
- user = string.lower(user)
- term.setBackgroundColor(colors.white)
- term.clear()
- BBBBBBB(1,1)
- AAAAAAAA("Hello, "..user..". You have $"..balance.." in your account.")
- term.setBackgroundColor(colors.lightGray)
- BBBBBBB(2,4)
- AAAAAAAA("New Offer")
- BBBBBBB(screenx -6 ,4)
- AAAAAAAA(" Offers ")
- BBBBBBB(screenx - 9,6)
- AAAAAAAA(" Pay Money")
- BBBBBBB(3,6)
- AAAAAAAA("Update Balance")
- displayBalance()
- BBBBBBB(1,screeny)
- term.setBackgroundColor(colors.red)
- AAAAAAAA("EXIT")
- while true do
- local event, button, xPos, yPos = CCCCC("mouse_click")
- if xPos > 2 and xPos < 12 and yPos == 3 then
- BBBBBBB(1,5)
- hm()
- BBBBBBB(12,5)
- wda = read()
- set = wda - balance
- if set < 0 then
- AAAAAAAA("Error: You don't have that much money!")
- sleep(3)
- login(user, balance)
- else
- login(user, balance)
- end
- elseif xPos > 2 and xPos < 17 and yPos == 5 then
- balance = getBalance(user)
- displayBalance()
- elseif xPos > screenx - 10 and xPos < screenx + 1 and yPos == 5 then
- BBBBBBB(1,7)
- AAAAAAAAA("Please enter password: ")
- pass = read("*")
- BBBBBBB(1,8)
- AAAAAAAAA("Enter amount to send: ")
- amount = read()
- amount = tonumber(amount)
- BBBBBBB(1,9)
- AAAAAAAAA("Please enter who to send to: ")
- WTST = read()
- if pay(WTST,pass,amount,user) == true then
- BBBBBBB(1,9)
- AAAAAAAAA(" ")
- BBBBBBB(1,8)
- AAAAAAAAA(" ")
- BBBBBBB(1,7)
- AAAAAAAAA(" ")
- BBBBBBB(1,7)
- AAAAAAAAA("Success!")
- else
- BBBBBBB(1,9)
- AAAAAAAAA(" ")
- BBBBBBB(1,8)
- AAAAAAAAA(" ")
- BBBBBBB(1,7)
- AAAAAAAAA(" ")
- BBBBBBB(1,7)
- AAAAAAAAA("Failure.")
- end
- elseif xPos > 39 and xPos < 48 and yPos == 3 then
- --[[ BBBBBBB(1,5)
- AAAAAAAA("Deposit money in slot below")
- -- tell turtle next to slot to draw and count until stop signal is received then tell server to add that balance
- term.setBackgroundColor(colors.lightGray)
- AAAAAAAA("Done")
- local event, button, xPos, yPos = CCCCC("mouse_click")
- if yPos == 6 and xPos < 5 then
- -- retreive amount from server
- end
- login(user, balance) --]]
- elseif xPos < 5 and yPos == screeny then
- start()
- end
- end
- end
- start()
- while true do
- local event, button, xPos, yPos = CCCCC("mouse_click")
- local len = BBBBBB("LOGIN NEW")
- local sxtw = screenx /2
- local len = len /2
- local sxtw = sxtw - len
- if xPos > sxtw and xPos < sxtw +4 and yPos == 7 then
- term.setBackgroundColor(colors.white)
- term.clear()
- BBBBBBB(1,1)
- logscr()
- term.setBackgroundColor(colors.lightGray)
- uandp()
- BBBBBBB(11,7)
- user = read()
- BBBBBBB(11,9)
- pass = read("*")
- user = string.lower(user)
- if tryLogin(user,pass) == true then
- login(user,getBalance(user))
- else
- AAAAAAAA("Sorry, Login incorrect, please try again")
- end
- elseif xPos > sxtw + 10 and xPos < sxtw + 12 and yPos == 7 then
- term.setBackgroundColor(colors.white)
- term.clear()
- BBBBBBB(1,1)
- cAAAAAAAAA("REGISTER")
- term.setBackgroundColor(colors.lightGray)
- upconfirmp()
- BBBBBBB(11,7)
- user = read()
- user = string.lower(user)
- BBBBBBB(11,9)
- pass = read("*")
- BBBBBBB(19,11)
- cPass = read("*")
- if pass == cPass then
- hpass = sha256(pass)
- DDDD = CCCCCC()
- DDDD = DDDD +7.5
- DDD = CCCC()
- S2 = DDDD *DDD
- S2b = S2 *1.5
- S2b = BBBBB(S2b)
- S2c = S2 *3.7
- S2c = BBBBB(S2c)
- S2 = BBBBB(S2b)
- hpass = AAAAAAAAAA(S2c,hpass)
- hpassts = hpass.. " " ..S2
- UID = math.random(1,65535)
- AAAAA(sChan, UID, "Register "..user .. " "..hpassts)
- rr = 0
- while rr == 0 do
- event, side, fromchan, replychan, BBBB, distance = CCCCC("modem_message")
- if fromchan == sChan and replychan == UID then
- if BBBB == "Registered" then
- AAAAAAAA("Register success!")
- else
- AAAAAAAA("Register did not succeed")
- end
- rr = 1
- end
- end
- start()
- end
- end
- end
Add Comment
Please, Sign In to add comment