Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- osEvent = os.pullEvent
- os.pullEvent = os.pullEventRaw
- --
- -- 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
- local 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
- while access~=1 do
- term.clear()
- term.setCursorPos(1,1)
- term.setTextColor(colors.orange)
- print'KOS 1.6'
- term.setTextColor(colors.white)
- if not fs.exists("users") then
- print'No users!'
- print'Create default user now.'
- user=3
- shell.run("newuser")
- return
- end
- print'Enter User:'
- usern=read()
- print'Enter Password:'
- pass=read("*")
- local stringToHash = pass
- passHash = sha256(stringToHash)
- --print(passHash)
- --sleep(100)
- access=0
- --sleep(1)
- term.clear()
- term.setCursorPos(1,1)
- if usern==nil or usern=='' or usern=='.' or pass==nil or pass=='' or pass=='.' then
- print'Invalid username or password!'
- sleep(1)
- os.reboot()
- end
- if fs.exists("users") then
- local h = fs.open("users", "r")
- getUsers=h.readAll()
- h.close()
- unSearch=string.find(getUsers,usern..":")
- if unSearch==nil then
- print'Could not find user!'
- sleep(2)
- end
- if unSearch~=nil then
- fullSearch=string.find(getUsers,usern..":"..passHash..":")
- if fullSearch==nil then
- print'Password incorrect!'
- sleep(2)
- end
- if fullSearch~=nil then
- f1Search=string.find(getUsers,usern..":"..passHash..":0")
- f2Search=string.find(getUsers,usern..":"..passHash..":1")
- if f1Search==nil and f2Search==nil then
- print'Failed to get auth!'
- end
- if f1Search~=nil and f2Search==nil then
- access=1
- shell.openTab("guest")
- ---------------------------------------------------------
- os.loadAPI("guiapi")
- user=0
- box = guiapi.createDialogueBox("Enable GUI?",{"Would you like","to enable GUI?"},"yn") --#Creates a dialogue box with the title "GUI API" ,two body lines: "This is a dialogue box!" and "Do you like it?" and the box type is "yn"
- boxResult=box:draw( 20,5,5,colors.gray,colors.lightBlue,colors.white ) --#Makes a text box at (20,5) with a width of 5, a gray background color, white text color, and lightBlue title bar color.
- if boxResult==true then
- box:clear(colors.black)
- term.clear()
- term.setCursorPos(20,7)
- print'KOS Loading...'
- bar = guiapi.createBar( "KOS Loading" ) --#This creates a new bar with the name
- bar:draw( 10,9,30,colors.white,colors.green,true,colors.black,colors.white ) --#This draws the bar at (5,8) with a length of 30. The first color is the bar color, the second color is the progress color, the next argument is whether or not to display the percent, the third color is the text background color (for displaying the percent) and the fifth is the percent text color.
- percent=0
- while percent<100 do
- bar:update( percent ) --#Re-draws the bar with the new percent
- percent=percent+5
- sleep(.1)
- end
- shell.run("gui")
- end
- if boxResult==false then
- box:clear(colors.black)
- term.clear()
- term.setCursorPos(1,1)
- end
- -------------------------------------
- print'KOS Loading...'
- sleep(1)
- term.clear()
- term.setCursorPos(1,1)
- term.setTextColor(colors.orange)
- print('Welcome, '..usern..', to Kizz OS!')
- term.setTextColor(colors.blue)
- print'Commands: '
- term.setTextColor(colors.white)
- print'logout - Logs user out. '
- print'extend - Extends logout timer by x min.'
- print'help - Shows more commands'
- end
- if f1Search==nil and f2Search~=nil then
- access=1
- shell.openTab("master")
- ---------------------------------------------------------
- os.loadAPI("guiapi")
- user=1
- box = guiapi.createDialogueBox("Enable GUI?",{"Would you like","to enable GUI?"},"yn") --#Creates a dialogue box with the title "GUI API" ,two body lines: "This is a dialogue box!" and "Do you like it?" and the box type is "yn"
- boxResult=box:draw( 20,5,5,colors.gray,colors.lightBlue,colors.white ) --#Makes a text box at (20,5) with a width of 5, a gray background color, white text color, and lightBlue title bar color.
- if boxResult==true then
- box:clear(colors.black)
- term.clear()
- term.setCursorPos(20,7)
- print'KOS Loading...'
- bar = guiapi.createBar( "KOS Loading" ) --#This creates a new bar with the name
- bar:draw( 10,9,30,colors.white,colors.green,true,colors.black,colors.white ) --#This draws the bar at (5,8) with a length of 30. The first color is the bar color, the second color is the progress color, the next argument is whether or not to display the percent, the third color is the text background color (for displaying the percent) and the fifth is the percent text color.
- percent=0
- while percent<100 do
- bar:update( percent ) --#Re-draws the bar with the new percent
- percent=percent+5
- sleep(.1)
- end
- shell.run("gui")
- end
- if boxResult==false then
- box:clear(colors.black)
- term.clear()
- term.setCursorPos(1,1)
- end
- -------------------------------------
- if boxResult==false then
- print'KOS Loading...'
- end
- sleep(1)
- term.clear()
- term.setCursorPos(1,1)
- term.setTextColor(colors.orange)
- print('Welcome, '..usern..', to Kizz OS!')
- term.setTextColor(colors.blue)
- print'Commands: '
- term.setTextColor(colors.white)
- print'logout - Logs user out. '
- print'extend - Extends logout timer by x min.'
- print'help - Shows more commands'
- end
- end
- end
- end
- end
- function logme()
- userName=usern
- if not fs.exists("log") then
- local h = fs.open("log", "a")
- h.write(" ")
- h.close()
- end
- if fs.exists("log") then
- local h = fs.open("log", "r")
- loglen=h.readAll()
- --print(loglen)
- if string.len(loglen)>1000000 then
- h.close()
- fs.delete("log")
- end
- h.close()
- local h = fs.open("log", "a")
- h.write(userName.." - Day: "..os.day().." | Time: "..os.time()..". \n")
- h.close()
- end
- end
- logme()
- --os.pullEvent=osEvent
Advertisement
Add Comment
Please, Sign In to add comment