opus/apps/trust.lua

60 lines
1.2 KiB
Lua
Raw Normal View History

2017-05-05 11:34:20 +00:00
require = requireInjector(getfenv(1))
local Socket = require('socket')
local SHA1 = require('sha1')
2017-05-06 01:43:17 +00:00
local Terminal = require('terminal')
local Crypto = require('crypto')
2017-05-05 11:34:20 +00:00
local remoteId
local args = { ... }
local exchange = {
base = 11,
primeMod = 625210769
}
if #args == 1 then
remoteId = tonumber(args[1])
else
print('Enter host ID')
remoteId = tonumber(read())
end
if not remoteId then
error('Syntax: trust <host ID>')
end
2017-05-06 01:43:17 +00:00
local password = Terminal.readPassword('Enter password: ')
if not password then
error('Invalid password')
end
2017-05-05 11:34:20 +00:00
print('connecting...')
local socket = Socket.connect(remoteId, 19)
if not socket then
error('Unable to connect to ' .. remoteId .. ' on port 19')
end
local function modexp(base, exponent, modulo)
local remainder = base
for i = 1, exponent-1 do
remainder = remainder * remainder
if remainder >= modulo then
remainder = remainder % modulo
end
end
return remainder
end
local secretKey = os.getSecretKey()
local publicKey = modexp(exchange.base, secretKey, exchange.primeMod)
2017-05-06 01:43:17 +00:00
local password = SHA1.sha1(password)
2017-05-05 11:34:20 +00:00
2017-05-09 05:57:00 +00:00
socket:write(Crypto.encrypt({ pk = publicKey, dh = os.getComputerID() }, password))
2017-05-05 11:34:20 +00:00
print(socket:read(2) or 'No response')
socket:close()