This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
Kronix's profile picture

Variable issues

Started by Kronix, 28 February 2016 - 12:28 AM
Kronix #1
Posted 28 February 2016 - 01:28 AM
I've been working on a pretty primitive OS to help get better at Lua. However everything was going great until I ran into an issue. Some variable is causing an error, and I've been all over the program, but nothing. Thanks.


--
--  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
--Var
function drawMenu()
term.setBackgroundColor(colors.white)
term.clear()
term.setCursorPos(1,1)
term.setBackgroundColor(colors.gray)
term.setTextColor(colors.cyan)
term.write("b")
term.setTextColor(colors.white)
term.setCursorPos(2,1)
term.write("OS")
end
if not fs.exists("os/menu/password") then
local f = fs.open("os/menu/password", "w")
term.clear()
term.setCursorPos(1,1)
fs.open("os/menu/password", "r")
term.setCursorPos(1,1)
term.setBackgroundColor(colors.gray)
term.setTextColor(colors.black)
print("bOS Lock Configuration.									   ")
term.setCursorPos(1,17)
term.setBackgroundColor(colors.black)
term.setTextColor(colors.white)
print("Please enter password:")
term.setCursorPos(1,18)
term.setTextColor(colors.lightBlue)
local input = read("*")
local password = sha256(input)
print(password)
f.write(password)
f.close()
else
print("to be added")
end
KingofGamesYami #2
Posted 28 February 2016 - 02:06 AM
Without an error message, all I can do is guess.

However, you did open a file in write mode, then attempted to open it in read mode while it was still open. Files that are currently open cannot be opened again while they are open.
Kronix #3
Posted 28 February 2016 - 03:01 AM
Without an error message, all I can do is guess.

However, you did open a file in write mode, then attempted to open it in read mode while it was still open. Files that are currently open cannot be opened again while they are open.

Here is the error message:

bios.lua:14: [string "lock"]:10: '=' expected

As for the other issue, I fixed that and still no avail.
Kronix #4
Posted 29 February 2016 - 01:03 AM
I've tried messing with all the variables in the code, any help is welcomed.
Dragon53535 #5
Posted 29 February 2016 - 01:04 AM
Something is telling me this isn't the code under the file named "lock"
Kronix #6
Posted 29 February 2016 - 01:07 AM
Something is telling me this isn't the code under the file named "lock"

It is.
Dragon53535 #7
Posted 29 February 2016 - 01:11 AM
I'm seeing nothing that could cause an error like that, have you tried restarting the computer in game to see if that fixes it?
Kronix #8
Posted 29 February 2016 - 01:30 AM
I'm seeing nothing that could cause an error like that, have you tried restarting the computer in game to see if that fixes it?

I'm using an emulator, CCEmuRedux. I restarted the computer, no change in error.
Dragon53535 #9
Posted 29 February 2016 - 01:32 AM
Try using it inside of minecraft and see if that error persists. Emulators aren't always perfect.
Kronix #10
Posted 29 February 2016 - 01:50 AM
Try using it inside of minecraft and see if that error persists. Emulators aren't always perfect.

I ran the program in Minecraft, then it came back with this error, even though 'then' is there.


bios:14: [string "lock"]:74: 'then' expected

Same code as before.

EDIT: The program has started working again… for no reason…
Edited on 29 February 2016 - 02:37 AM