basic_functions = require("lib.basic-functions") hash = require("lib.hash") --aes = require("lib.aes") --aes does not yet work with require os.loadAPI("bos/lib/aes.lua") function create_keyfile() basic_functions.clear_display() write("Please enter shared secret for networking: ") local pw_hash = hash.digestStr(read("*") .. "salty salt") basic_functions.write_to_file("bos/files/networking-key.txt", pw_hash) basic_functions.clear_display() end local function get_keyfile() local pw_hash = basic_functions.read_file_oneline("bos/files/networking-key.txt") return pw_hash end local function setup() own_label = os.computerLabel() peripheral.find("modem", rednet.open) if not fs.exists "bos/files/networking-key.txt" then create_keyfile() end end --[[ String target ist label des Computers. zb "computer1", "miner1", "farmer1", etc String message ist einfach der Text der Übertragen werden soll ]] function send_message(to, what, payload) setup() local keyfile = get_keyfile() local msg_table = {} msg_table[0] = own_label msg_table[1] = to msg_table[2] = what msg_table[3] = payload local enc_msg = aes.encrypt(keyfile, textutils.serialize(msg_table)) rednet.broadcast(enc_msg) end function send_file(to, origin_path, target_path) setup() local keyfile = get_keyfile() local payload_table = {} print("sending " .. origin_path .. " to " .. to) local file_content = basic_functions.read_file_all(origin_path) payload_table[0] = target_path payload_table[1] = file_content send_message(to, "file_transfer", payload_table) sleep(0.5) end function receive_message() setup() local keyfile = get_keyfile() local id, rec_msg, prot = rednet.receive() local pcall_success, decr_msg = pcall(aes.decrypt, keyfile, rec_msg) if pcall_success and decr_msg ~= nil then local rec_table = textutils.unserialize(decr_msg) local from = rec_table[0] local to = rec_table[1] local what = rec_table[2] local payload = rec_table[3] if to == own_label or to == "all" then if what == "file_transfer" then basic_functions.write_to_file(payload[0], payload[1]) return "event: file transfer received" elseif what == "execute_script" then shell.run(payload) return elseif what == "script_command" then return rec_table[3] end return rec_table end else return "event: unencrypted message" end end return { send_message = send_message, send_file = send_file, receive_message = receive_message, }