View difference between Paste ID: EaMhV3r6 and KwQjiQPD
SHOW: | | - or go back to the newest paste.
1
local accessLevel = 2
2
local cryptKey = {1, 2, 3, 4, 5}
3
local modemPort = 199
4
5
6
7
local component = require("component")
8
local gpu = component.gpu
9
local event = require("event")
10
local ser = require("serialization")
11
local term = require("term")
12
local computer = component.computer
13
14
local door = component.os_door
15
local magReader = component.os_magreader
16
17
local modem = component.modem 
18
19
20
local function convert( chars, dist, inv )
21
  return string.char( ( string.byte( chars ) - 32 + ( inv and -dist or dist ) ) % 95 + 32 )
22
end
23
24
local function crypt(str,k,inv)
25
  local enc= "";
26
  for i=1,#str do
27
    if(#str-k[5] >= i or not inv)then
28
      for inc=0,3 do
29
	if(i%4 == inc)then
30
	  enc = enc .. convert(string.sub(str,i,i),k[inc+1],inv);
31
	  break;
32
	end
33
      end
34
    end
35
  end
36
  if(not inv)then
37
    for i=1,k[5] do
38
      enc = enc .. string.char(math.random(32,126));
39
    end
40
  end
41
  return enc;
42
end
43
44
45
function splitString(str, sep)
46
        local sep, fields = sep or ":", {}
47
        local pattern = string.format("([^%s]+)", sep)
48
        str:gsub(pattern, function(c) fields[#fields+1] = c end)
49
        return fields
50
end
51
52
term.clear()
53
print("Security door   Access level : " .. tostring(accessLevel))
54
print("---------------------------------------------------------------------------")
55
56
if modem.isOpen(modemPort) == false then
57
  modem.open(modemPort)
58
end
59
data = crypt(tostring(accessLevel), cryptKey)
60
modem.broadcast(modemPort, "setlevel", data)
61
62
while true do
63
  ev, _, user, str, uuid = event.pull("magData")
64
  local data = crypt(str, cryptKey, true)
65
  if ev then
66
    local tmpTable = splitString(data," ")
67
    term.write(tmpTable[3] .. ":")
68
    if modem.isOpen(modemPort) == false then
69
      modem.open(modemPort)
70
    end
71
    data = crypt(tmpTable[3], cryptKey)
72
    modem.broadcast(modemPort, "checkuser", data)
73
    local e, _, from, port, _, msg = event.pull(1, "modem_message")
74
    if e then
75
      data = crypt(msg, cryptKey, true)
76
--    print(data)
77
      if data == "true" then
78
	term.write("Access granted\n")
79
	computer.beep()
80
	door.toggle()
81
	os.sleep(2)
82
	door.toggle()
83
      else
84
	term.write("Access denied\n")
85
      end
86
    else
87
      term.write("server timeout\n")
88
    end
89
  end
90
end