Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local files = {
- [ "/.lock/bg.nfp" ] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb44444444\
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4444444444\
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4bbb444444\
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb444b4444\
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb44b4b\
- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4bbbb\
- bbbbbbbbbbbbbbbbbbbbbb0bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\
- bbbbbbbbbbbbbbbbbbbbb000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\
- bbbbbbbbbbbbbbbbbbb000000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\
- bbbbbbbbbbbbbbbbbb88888888bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\
- bbbbbbbbbbbbbbbb88888888888bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00bbbbbbbb\
- bbbbbbbbbbbbbbb888888888888bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0000bbbbbbb\
- bbbbbbbbbbbbb888888888888888bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb080000bbbbbb\
- bbbbbbbbbbb888888888888888888bbbbbbbbbbbbbbbbbbbbbbbbbbbbb88888888bbbbb\
- bbbbbbbb88888888888888888888888bbbbbbbbbbbbbbbbbbbbbbbbbb8888888888bbbb\
- bbbbbb88888888888888888888888888bbbbbbbbbbbbbbbbbbbbbbbbb88888888888bbb\
- bbbbb888888888888ddddd88888888888bbbbbbbddddddddddd77ddd8888888888888bb\
- dddddddddddddddddddddddddddddddddddddddddddddddddd777dddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddddddddddddddddd777dddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddddddddddddddd7777ddddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddddddddddddd777777ddddddddddddddddddd\
- ddddddddddddddddddddddddddddddddddddddddddddd7777777ddddddddddddddddddd\
- ddddddddddddddddddddddddddddddddddddddddd7777777777dddddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddddddd7777777777ddddddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddddd77777777777dddddddddddddddddddddd\
- dddddddddddddddddddddddddddddddddddd777777777777ddddddddddddddddddddddd\
- ddddddddddddddddddddddddddddddddddd777777777777dddddddddddddddddddddddd",
- [ "/.lock/lock.lua" ] = "local oldpull = os.pullEvent\
- local running = true\
- os.pullEvent = os.pullEventRaw\
- print(\"Initializing\")\
- os.loadAPI(\"/.lock/sha256\")\
- local handle = fs.open(\"/.lock/.meta\",\"r\")\
- local obj = handle.readAll()\
- print(obj)\
- handle.close()\
- obj = textutils.unserialise(obj)\
- function redraw()\
- term.setBackgroundColor(colors.black)\
- term.setTextColor(colors.white)\
- term.clear()\
- paintutils.drawImage(paintutils.loadImage(\"/.lock/bg.nfp\"),1,1)\
- local msg = \"Welcome back, \" .. obj.id .. \"!\"\
- local x,y = term.getSize()\
- term.setCursorPos((x-#msg)/2,2)\
- term.setTextColor(colors.orange)\
- term.setBackgroundColor(colors.black)\
- term.write(msg)\
- paintutils.drawFilledBox((x-9)/2,4,(x-9)/2+8,10,colors.orange)\
- paintutils.drawImage(paintutils.loadImage(\"/.lock/user.nfp\"),(x-7)/2,5)\
- --paintutils.drawFilledBox((x-11)/2,12,(x-11)/2+10,12,colors.gray)\
- term.setTextColor(colors.black)\
- local oldterm = term.current()\
- local w = window.create(term.current(),(x-15)/2,12,15,1)\
- term.redirect(w)\
- term.setBackgroundColor(colors.gray)\
- term.clear()\
- term.setTextColor(colors.black)\
- local pass = read(\"*\")\
- term.redirect(oldterm)\
- return pass\
- end\
- function unlock()\
- --os.pullEvent = oldpull\
- running = false\
- term.setBackgroundColor(colors.black)\
- term.setTextColor(colors.white)\
- local msg = \"Welcome back, \" .. obj.id .. \"!\"\
- term.clear()\
- local x,y = term.getSize()\
- term.setCursorPos((x-#msg)/2,(y-1)/2)\
- term.write(msg)\
- sleep(1)\
- os.pullEvent = oldpull\
- term.clear()\
- term.setCursorPos(1,1)\
- end\
- function deny()\
- term.setBackgroundColor(colors.black)\
- term.setTextColor(colors.white)\
- local msg = \"Access denied.\"\
- local msg2 = \"Password hint: \" .. obj.hint\
- local msg3 = \"Press any key to continue\"\
- term.clear()\
- local x,y = term.getSize()\
- term.setCursorPos((x-#msg)/2,(y-1)/2-1)\
- term.write(msg)\
- term.setCursorPos((x-#msg2)/2,(y-1)/2)\
- term.write(msg2)\
- term.setCursorPos((x-#msg3)/2,(y-1)/2+1)\
- term.write(msg3)\
- os.pullEvent(\"char\")\
- term.clear()\
- end\
- while running == true do\
- local inp = sha256.sha256(redraw())\
- if inp == obj.password then\
- unlock()\
- else\
- deny()\
- end\
- end",
- [ "/.lock/user.nfp" ] = "bbbbbbb\
- bdbdbdb\
- bddbddb\
- bdbdbdb\
- bbbbbbb",
- [ "/.lock/.meta" ] = "{\
- password = \"ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb\",\
- id = \"Unset\",\
- hint = \"a\",\
- }",
- [ "/.lock/set.lua" ] = "os.loadAPI(\"/.lock/sha256\")\
- print(\"Specify user identifier\")\
- local identifier = read()\
- print(\"Specify new password\")\
- local password = read(\"*\")\
- print(\"Confirm password\")\
- local cpass = read(\"*\")\
- print(\"Password hint\")\
- local hint = read()\
- if password ~= cpass then\
- error(\"Passwords dont match!\")\
- else\
- print(\"Writing to file...\")\
- local handle = fs.open(\"/.lock/.meta\",\"w\")\
- local object = {}\
- object[\"password\"] = sha256.sha256(password)\
- object[\"hint\"] = hint\
- object[\"id\"] = identifier\
- handle.write(textutils.serialise(object))\
- handle.close()\
- end\
- print(\"Done\")\
- ",
- [ "/.lock/sha256" ] = "\
- -- \
- -- Adaptation of the Secure Hashing Algorithm (SHA-244/256)\
- -- Found Here: http://lua-users.org/wiki/SecureHashAlgorithm\
- -- \
- -- Using an adapted version of the bit library\
- -- Found Here: https://bitbucket.org/Boolsheet/bslf/src/1ee664885805/bit.lua\
- -- \
- \
- 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 math.floor(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(msg, len)\
- local extra = 64 - ((len + 9) % 64)\
- len = num2s(8 * len, 8)\
- msg = msg .. \"\\128\" .. string.rep(\"\\0\", extra) .. len\
- assert(#msg % 64 == 0)\
- return msg\
- 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(msg, i, H)\
- local w = {}\
- for j = 1, 16 do w[j] = s232num(msg, 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\
- \
- function sha256(msg)\
- msg = preproc(msg, #msg)\
- local H = initH256({})\
- for i = 1, #msg, 64 do digestblock(msg, 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",
- }
- print("Welcome to RphLock setup")
- print("Are you sure you want to install? \nTHIS WILL OVERWRITE YOUR STARTUP AND REMOVE ALL FILES YOU MAY HAVE IN .lock")
- print("[Y/n]")
- local choice = string.lower(read())
- if choice ~= "y" then
- error("Installation aborted")
- end
- print("Ok")
- if fs.exists("/.lock/") then
- fs.delete("/.lock/")
- end
- if fs.exists("startup") then
- fs.delete("startup")
- end
- if fs.exists("startup.lua") then
- fs.delete("startup.lua")
- end
- print("Installing files")
- fs.makeDir("/.lock")
- for k,v in pairs(files) do
- local handle = fs.open(k,"w")
- handle.write(v)
- handle.close()
- print(k)
- end
- print("Please set your password. If you cancel, the default password is \"a\"")
- shell.run("/.lock/set.lua")
- print("Thanks")
- print("Installing startup")
- local handle = fs.open("startup.lua","w")
- handle.write("shell.run(\"/.lock/lock.lua\")")
- handle.close()
- print("Done!")
- print("Run /.lock/set.lua to change your password")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement