typo
This commit is contained in:
parent
e442a087f8
commit
90e1709131
2
ccpi.lua
2
ccpi.lua
|
@ -62,7 +62,7 @@ local function draw(img, ox, oy, monitor)
|
|||
t.setPaletteColor(colors_list[i], img.palette[i])
|
||||
end
|
||||
|
||||
t.setTextScale(image.scale)
|
||||
t.setTextScale(img.scale)
|
||||
|
||||
for y = 1, img.h do
|
||||
t.setCursorPos(ox, oy + y - 1)
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
local ecc = require("ecc")
|
||||
|
||||
string.toHex = function(str)
|
||||
return str:gsub(".", function(ch) return string.format("%02x", ch:byte()) end)
|
||||
end
|
||||
string.fromHex = function(hex)
|
||||
return hex:gsub("%x%x", function(d) return string.char(tonumber(d, 16)) end)
|
||||
end
|
||||
|
||||
local keypair = {}
|
||||
if fs.exists("/.id_dh.json") then
|
||||
local fp = io.open("/.id_dh.json", "r")
|
||||
local d = textutils.unserializeJSON(fp:read())
|
||||
keypair.sk = string.fromHex(d.secret)
|
||||
keypair.pk = string.fromHex(d.public)
|
||||
fp:close()
|
||||
else
|
||||
printError("no identity found, generating...")
|
||||
local sk, pk = ecc.keypair(ecc.random.random())
|
||||
io.open("/.id_dh.json", "w"):write(textutils.serializeJSON({
|
||||
secret = string.toHex(sk),
|
||||
public = string.toHex(pk)
|
||||
})):close()
|
||||
keypair.sk = string.char(table.unpack(sk))
|
||||
keypair.pk = string.char(table.unpack(pk))
|
||||
end
|
||||
|
||||
print("pubkey: "..string.toHex(keypair.pk))
|
||||
|
||||
local running = true
|
||||
|
||||
local known_hosts = {}
|
||||
|
||||
parallel.waitForAll(function() while running do -- dh:discover sender
|
||||
rednet.broadcast(keypair.pk, "dh:discover")
|
||||
os.sleep(10)
|
||||
end end,
|
||||
function() while running do -- dh:discover handler
|
||||
local id, pk, proto = rednet.receive("dh:discover")
|
||||
if proto == "dh:discover" then
|
||||
print("DH discover from "..id.." with key "..pk)
|
||||
local nonce = string.toHex(ecc.random.random())
|
||||
local key = ecc.exchange(keypair.sk, pk)
|
||||
known_hosts[id] = {
|
||||
id = id,
|
||||
pk = pk,
|
||||
sk = key,
|
||||
verified = false,
|
||||
nonce = nonce,
|
||||
t = os.clock()
|
||||
}
|
||||
known_hosts[pk] = known_hosts[id]
|
||||
rednet.send(id, {
|
||||
pk = keypair.pk,
|
||||
msg = ecc.encrypt(nonce, key)
|
||||
}, "dh:pair")
|
||||
end
|
||||
end end,
|
||||
function() while running do -- dh:pair handler
|
||||
local id, msg, proto = rednet.receive("dh:pair")
|
||||
if proto == "dh:pair" then
|
||||
local key = ecc.exchange(keypair.sk, msg.pk)
|
||||
known_hosts[id] = {
|
||||
id = id,
|
||||
pk = msg.pk,
|
||||
sk = key,
|
||||
verified = false,
|
||||
nonce = ecc.decrypt(msg.msg, msg.msg)
|
||||
}
|
||||
end
|
||||
end end)
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue