Compare commits
2 commits
master
...
WIP/dh_aut
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e5b3ad0a1 | ||
|
|
dead687e9f |
2 changed files with 34 additions and 2 deletions
18
bot.py
18
bot.py
|
|
@ -19,9 +19,11 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import re
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import re
|
|
||||||
|
|
||||||
import consumer
|
import consumer
|
||||||
import event
|
import event
|
||||||
|
|
@ -34,11 +36,23 @@ import response
|
||||||
ID_letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
ID_letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
|
||||||
class Bot:
|
class Bot:
|
||||||
def __init__(self, ip, realname, mp=list()):
|
def __init__(self, ip, realname, key=None, mp=list()):
|
||||||
# Bot general informations
|
# Bot general informations
|
||||||
self.version = 3.3
|
self.version = 3.3
|
||||||
self.version_txt = "3.3-dev"
|
self.version_txt = "3.3-dev"
|
||||||
|
|
||||||
|
if os.path.exists("datas/dhk"):
|
||||||
|
try:
|
||||||
|
self.key = int.from_bytes(open("datas/dhk", 'rb').read(), byteorder='big', signed=False)
|
||||||
|
except:
|
||||||
|
self.key = None
|
||||||
|
else:
|
||||||
|
self.key = None
|
||||||
|
if self.key is None:
|
||||||
|
print ("No key found for association, please wait while I generate it for you...")
|
||||||
|
self.key = random.getrandbits(1024)
|
||||||
|
open("datas/dhk", 'wb').write(self.key.to_bytes((self.key.bit_length() // 8) + 1, byteorder='big', signed=False))
|
||||||
|
|
||||||
# Save various informations
|
# Save various informations
|
||||||
self.ip = ip
|
self.ip = ip
|
||||||
self.realname = realname
|
self.realname = realname
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class NetworkBot:
|
||||||
self.context = context
|
self.context = context
|
||||||
self.srv = srv
|
self.srv = srv
|
||||||
self.dest = dest
|
self.dest = dest
|
||||||
|
self.key = None
|
||||||
|
|
||||||
self.dcc = dcc # DCC connection to the other bot
|
self.dcc = dcc # DCC connection to the other bot
|
||||||
if self.dcc is not None:
|
if self.dcc is not None:
|
||||||
|
|
@ -220,6 +221,23 @@ class NetworkBot:
|
||||||
self.my_tag = random.randint(0,255)
|
self.my_tag = random.randint(0,255)
|
||||||
self.send_ack(tag)
|
self.send_ack(tag)
|
||||||
|
|
||||||
|
elif cmd == b'AUTH': # Authenticate bot
|
||||||
|
if len(args) == 3: # Request pairing
|
||||||
|
g = int.from_bytes(args[0].decode('hex'), byteorder='big')
|
||||||
|
p = int.from_bytes(args[1].decode('hex'), byteorder='big')
|
||||||
|
A = int.from_bytes(args[2].decode('hex'), byteorder='big')
|
||||||
|
|
||||||
|
self.key = pow(A, b, p)
|
||||||
|
|
||||||
|
b = random.getrandbits(1024)
|
||||||
|
B = pow(g, b, p)
|
||||||
|
|
||||||
|
self.send_response_final(tag, pack("!x", pow(r, self.key, q)))
|
||||||
|
elif len(args) == 2: # Auth
|
||||||
|
r = int.from_bytes(args[0].decode('hex'), byteorder='big')
|
||||||
|
q = int.from_bytes(args[1].decode('hex'), byteorder='big')
|
||||||
|
self.send_response_final(tag, pack("!x", pow(r, self.key, q)))
|
||||||
|
|
||||||
elif cmd == b'FETCH': # Get known commands
|
elif cmd == b'FETCH': # Get known commands
|
||||||
for name in ["cmd_hook", "ask_hook", "msg_hook"]:
|
for name in ["cmd_hook", "ask_hook", "msg_hook"]:
|
||||||
elts = self.context.create_cache(name)
|
elts = self.context.create_cache(name)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue