Advertisement
YourMCInformer

Advanced Password Utility Beta Setup

Feb 10th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.78 KB | None | 0 0
  1. --[[ Program details
  2.  
  3.     Author:     the_blaster179
  4.     Name:       Advanced Password Utility Beta Setup
  5.     Description:    Simple installer designed to install the beta version of Advanced Password Utility onto a system
  6.     Last modified:  14-03-2016 19:44
  7.  
  8. ]]--
  9.  
  10. -- Begin SHA-256 code (No permissions as far as I know, please let me know if there is any legal issues regarding this)
  11.  
  12.  
  13. --  
  14. --  Adaptation of the Secure Hashing Algorithm (SHA-244/256)
  15. --  Found Here: http://lua-users.org/wiki/SecureHashAlgorithm
  16. --  
  17. --  Using an adapted version of the bit library
  18. --  Found Here: https://bitbucket.org/Boolsheet/bslf/src/1ee664885805/bit.lua
  19. --  
  20.  
  21. local MOD = 2^32
  22. local MODM = MOD-1
  23.  
  24. local function memoize(f)
  25.     local mt = {}
  26.     local t = setmetatable({}, mt)
  27.     function mt:__index(k)
  28.         local v = f(k)
  29.         t[k] = v
  30.         return v
  31.     end
  32.     return t
  33. end
  34.  
  35. local function make_bitop_uncached(t, m)
  36.     local function bitop(a, b)
  37.         local res,p = 0,1
  38.         while a ~= 0 and b ~= 0 do
  39.             local am, bm = a % m, b % m
  40.             res = res + t[am][bm] * p
  41.             a = (a - am) / m
  42.             b = (b - bm) / m
  43.             p = p*m
  44.         end
  45.         res = res + (a + b) * p
  46.         return res
  47.     end
  48.     return bitop
  49. end
  50.  
  51. local function make_bitop(t)
  52.     local op1 = make_bitop_uncached(t,2^1)
  53.     local op2 = memoize(function(a) return memoize(function(b) return op1(a, b) end) end)
  54.     return make_bitop_uncached(op2, 2 ^ (t.n or 1))
  55. end
  56.  
  57. local bxor1 = make_bitop({[0] = {[0] = 0,[1] = 1}, [1] = {[0] = 1, [1] = 0}, n = 4})
  58.  
  59. local function bxor(a, b, c, ...)
  60.     local z = nil
  61.     if b then
  62.         a = a % MOD
  63.         b = b % MOD
  64.         z = bxor1(a, b)
  65.         if c then z = bxor(z, c, ...) end
  66.         return z
  67.     elseif a then return a % MOD
  68.     else return 0 end
  69. end
  70.  
  71. local function band(a, b, c, ...)
  72.     local z
  73.     if b then
  74.         a = a % MOD
  75.         b = b % MOD
  76.         z = ((a + b) - bxor1(a,b)) / 2
  77.         if c then z = bit32_band(z, c, ...) end
  78.         return z
  79.     elseif a then return a % MOD
  80.     else return MODM end
  81. end
  82.  
  83. local function bnot(x) return (-1 - x) % MOD end
  84.  
  85. local function rshift1(a, disp)
  86.     if disp < 0 then return lshift(a,-disp) end
  87.     return math.floor(a % 2 ^ 32 / 2 ^ disp)
  88. end
  89.  
  90. local function rshift(x, disp)
  91.     if disp > 31 or disp < -31 then return 0 end
  92.     return rshift1(x % MOD, disp)
  93. end
  94.  
  95. local function lshift(a, disp)
  96.     if disp < 0 then return rshift(a,-disp) end
  97.     return (a * 2 ^ disp) % 2 ^ 32
  98. end
  99.  
  100. local function rrotate(x, disp)
  101.     x = x % MOD
  102.     disp = disp % 32
  103.     local low = band(x, 2 ^ disp - 1)
  104.     return rshift(x, disp) + lshift(low, 32 - disp)
  105. end
  106.  
  107. local k = {
  108.     0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
  109.     0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  110.     0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
  111.     0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  112.     0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
  113.     0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  114.     0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
  115.     0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  116.     0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
  117.     0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  118.     0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
  119.     0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  120.     0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
  121.     0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  122.     0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
  123.     0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
  124. }
  125.  
  126. local function str2hexa(s)
  127.     return (string.gsub(s, ".", function(c) return string.format("%02x", string.byte(c)) end))
  128. end
  129.  
  130. local function num2s(l, n)
  131.     local s = ""
  132.     for i = 1, n do
  133.         local rem = l % 256
  134.         s = string.char(rem) .. s
  135.         l = (l - rem) / 256
  136.     end
  137.     return s
  138. end
  139.  
  140. local function s232num(s, i)
  141.     local n = 0
  142.     for i = i, i + 3 do n = n*256 + string.byte(s, i) end
  143.     return n
  144. end
  145.  
  146. local function preproc(msg, len)
  147.     local extra = 64 - ((len + 9) % 64)
  148.     len = num2s(8 * len, 8)
  149.     msg = msg .. "\128" .. string.rep("\0", extra) .. len
  150.     assert(#msg % 64 == 0)
  151.     return msg
  152. end
  153.  
  154. local function initH256(H)
  155.     H[1] = 0x6a09e667
  156.     H[2] = 0xbb67ae85
  157.     H[3] = 0x3c6ef372
  158.     H[4] = 0xa54ff53a
  159.     H[5] = 0x510e527f
  160.     H[6] = 0x9b05688c
  161.     H[7] = 0x1f83d9ab
  162.     H[8] = 0x5be0cd19
  163.     return H
  164. end
  165.  
  166. local function digestblock(msg, i, H)
  167.     local w = {}
  168.     for j = 1, 16 do w[j] = s232num(msg, i + (j - 1)*4) end
  169.     for j = 17, 64 do
  170.         local v = w[j - 15]
  171.         local s0 = bxor(rrotate(v, 7), rrotate(v, 18), rshift(v, 3))
  172.         v = w[j - 2]
  173.         w[j] = w[j - 16] + s0 + w[j - 7] + bxor(rrotate(v, 17), rrotate(v, 19), rshift(v, 10))
  174.     end
  175.  
  176.     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]
  177.     for i = 1, 64 do
  178.         local s0 = bxor(rrotate(a, 2), rrotate(a, 13), rrotate(a, 22))
  179.         local maj = bxor(band(a, b), band(a, c), band(b, c))
  180.         local t2 = s0 + maj
  181.         local s1 = bxor(rrotate(e, 6), rrotate(e, 11), rrotate(e, 25))
  182.         local ch = bxor (band(e, f), band(bnot(e), g))
  183.         local t1 = h + s1 + ch + k[i] + w[i]
  184.         h, g, f, e, d, c, b, a = g, f, e, d + t1, c, b, a, t1 + t2
  185.     end
  186.  
  187.     H[1] = band(H[1] + a)
  188.     H[2] = band(H[2] + b)
  189.     H[3] = band(H[3] + c)
  190.     H[4] = band(H[4] + d)
  191.     H[5] = band(H[5] + e)
  192.     H[6] = band(H[6] + f)
  193.     H[7] = band(H[7] + g)
  194.     H[8] = band(H[8] + h)
  195. end
  196.  
  197. local function sha256(msg)
  198.     msg = preproc(msg, #msg)
  199.     local H = initH256({})
  200.     for i = 1, #msg, 64 do digestblock(msg, i, H) end
  201.     return str2hexa(num2s(H[1], 4) .. num2s(H[2], 4) .. num2s(H[3], 4) .. num2s(H[4], 4) ..
  202.         num2s(H[5], 4) .. num2s(H[6], 4) .. num2s(H[7], 4) .. num2s(H[8], 4))
  203. end
  204.  
  205.  
  206. --Very messy code, I know. I'll clean it later
  207. local isColour = term.isColour()
  208.  
  209. term.clear()
  210. term.setCursorPos(1,1)
  211. term.setBackgroundColour(colours.blue)
  212. term.clear()
  213. term.setCursorPos(1,1)
  214. term.setTextColour(colours.white)
  215. if isColour == true then
  216.   term.write("ADVANCED PASSWORD UTILITY BETA SETUP")
  217.   term.setCursorPos(1,3)
  218.   term.write("This setup will install Advanced Password Utility")
  219.   term.setCursorPos(1,4)
  220.   term.write("onto your computer. By continuing through this")
  221.   term.setCursorPos(1,5)
  222.   term.write("setup, you agree to never redistribute the utility")
  223.   term.setCursorPos(1,6)
  224.   term.write("nor the setup. You will also agree to never alter")
  225.   term.setCursorPos(1,7)
  226.   term.write("and share the setup utility in any way, shape or")
  227.   term.setCursorPos(1,8)
  228.   term.write("form, be that electronically or physically.")
  229.   term.setCursorPos(1,9);
  230.   term.write("BEWARE OF BETA VERSIONS OF ADVANCED PASSWORD");
  231.   term.setCursorPos(1,10);
  232.   term.write("EDITIONS. NEVER USE BETAS ON PERSONAL COMPUTERS");
  233.   term.setCursorPos(1,11);
  234.   term.write("OR COMPUTERS YOU CARE ABOUT. YOU COULD BE LOCKED");
  235.   term.setCursorPos(1,12);
  236.   term.write("OUT FOREVER OR LET POTENTIAL EXPLOITERS IN");
  237.   term.setCursorPos(1,14)
  238.   term.setTextColour(colours.yellow)
  239.   term.write("To begin installation, press Enter/Return")
  240.   term.setCursorPos(1,15)
  241.   term.write("To exit the installation, press F1")
  242.   term.setTextColour(colours.grey)
  243.   term.setCursorPos(1,18)
  244.   term.write("Version 2.0 Beta Build 1")
  245. else
  246.   --shell.run("pastebin get Z2CjfENe startup")
  247.   print("Enter desired passcode: ")
  248.   local passcode = read("*")
  249.   print("Confirm passcode: ")
  250.   local passcode2 = read("*")
  251.   if passcode == passcode2 then
  252.     passcode2 = sha256(passcode2);
  253.     local passFile = fs.open("password", 'a')
  254.     passFile.writeLine(passcode2);
  255.     passFile.close();
  256.     print("Setup complete. Restarting")
  257.     sleep(1)
  258.     os.reboot()
  259.   else
  260.     print("Password is incorrect. Please try setup again")
  261.   end
  262. end
  263.  
  264. function setup()
  265.   term.clear()
  266.   term.setCursorPos(1,1)
  267.   term.setTextColour(colours.white)
  268.   --shell.run("pastebin get Z2CjfENe startup")
  269.   term.write("ADVANCED PASSWORD UTILITY SETUP")
  270.   term.setCursorPos(1,3)
  271.   term.write("Please enter your password, then press Enter")
  272.   local pwFileExist = fs.exists("password")
  273.   if pwFileExist == true then
  274.     term.setCursorPos(1,10)
  275.     term.setTextColour(colours.red)
  276.     term.write("WARNING! Password file already exists,")
  277.     term.setCursorPos(1,11)
  278.     term.write("overwriting it!")
  279.   end
  280.   local filename = 'password'
  281.   local userfile = fs.open(filename, 'a')
  282.   term.setCursorPos(1,4)
  283.   term.setBackgroundColour(colours.black)
  284.   term.write("                                                  ")
  285.   term.setCursorPos(1,4)
  286.   input = read("*")
  287.   input = sha256(input);
  288.   term.setCursorPos(1,5)
  289.   term.setBackgroundColour(colours.blue)
  290.   userfile.writeLine(input)
  291.   userfile.close()
  292.   term.setCursorPos(1,6)
  293.   term.write("Setup is complete. Rebooting in 2 seconds")
  294.   sleep(2)
  295.   os.reboot()
  296. end
  297.  
  298. local sEvent, param = os.pullEvent("key")
  299. if sEvent == "key" then
  300.   if param == 28 then
  301.     setup()
  302.   elseif param == 59 then
  303.     shell.run("rm startup")
  304.     term.setBackgroundColour(colours.black)
  305.     term.clear()
  306.     term.setCursorPos(1,1)
  307.     term.write("Advanced Password Utility setup was cancelled")
  308.     term.setCursorPos(1,2)
  309.     sleep(0.5)
  310.     shell.run("rom/programs/shell")
  311.   end
  312. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement