#!/usr/bin/env python # -*- coding: utf-8 -*- import xmpp,sys # xmpp class sjabber: def __init__(self,xmpp_jid,xmpp_pwd): self.xmpp_jid = xmpp_jid self.xmpp_pwd = xmpp_pwd self.jid = xmpp.protocol.JID(xmpp_jid) self.client = xmpp.Client(self.jid.getDomain(),debug=[]) def connect(self): con=self.client.connect() if not con: print 'could not connect!' sys.exit() print 'connected with',con auth = self.client.auth(self.jid.getNode(),str(self.xmpp_pwd),resource='xmpppy') if not auth: print 'could not authenticate!' sys.exit() print 'authenticated using',auth # ! self.client.sendInitPresence(1) def Process(self): a = self.client.Process(1) def send(self,to,mess): id = self.client.send(xmpp.protocol.Message(to,mess)) print 'sent message with id',id def disconnect(self): self.client.sendInitPresence(1) self.client.disconnect() def userList(self): return self.client.getRoster().keys() def StepOn(self): try: self.Process() except: return 0 return 1 def setCB(self, CB): self.CB = CB self.client.RegisterHandler('message',self.messageCB) def messageCB(self,conn,mess): if ( mess.getBody() == None ): return self.CB(self,mess)
# -*- coding: utf-8 -*- import rsa class Crypt: def __init__(self): # self.keys = dict() # (a,b) = self.genKey(1024) self.privateKey = b self.pubKey = a def hasKey(self,id): # if self.keys.has_key(id)==False: return False else: return True def decodeKey(self,key): # return rsa.PublicKey(1,1).load_pkcs1(key,format='DER') def saveKey(self,id,key): # self.keys[id]= key def genKey(self,size): # return rsa.newkeys(size, poolsize=8) def cryptMesg(self,to,mesg): # getHex =mesg.encode('utf-8').encode('hex') a = rsa.encrypt(getHex, self.keys[to]) #print len(mesg),len(a) return a.encode('hex') def decryptMesg(self,mesg): # , try: mess = rsa.decrypt(mesg.decode("hex"),self.privateKey) except rsa.pkcs1.DecryptionError: print "cant decrypt" return "#errorDecrypt" return mess.decode('hex').decode('utf-8')
def __init__(self): # self.loadConfig() # self.crypt = Crypt() # self.jb = sjabber(self.xmpp_jid,self.xmpp_pwd) self.jb.connect() # self.jb.setCB(self.messageCB) # Qt- self.app = QApplication(sys.argv) self.window = QMainWindow() self.ui = Ui_MainWindow() self.ui.setupUi(self.window)
# self.ui.pushButton.clicked.connect(self.sendMsg) self.ui.lineEdit.returnPressed.connect(self.sendMsg) self.window.show() # userList = self.jb.userList() for i in userList: self.ui.listWidget.addItem(i) # self.ui.listWidget.currentRowChanged.connect(self.setToRow) # self.ui.listWidget.setCurrentRow(0) # "" self.workThread = WorkThread() self.workThread.setWorker(self.jb) self.workThread.start()
class WorkThread(QThread): def __init__(self): QThread.__init__(self) def setWorker(self,jb): self.jb = jb def run(self): while self.jb.StepOn(): pass
def messageCB(self,conn,mess): # , # , if ( mess.getBody() == None ): return msg = mess.getBody() patern = re.compile('^#(getkey|sendkey|mesg|getlastmesg) ?(.*)') res = patern.search(msg) if res: # a = res.groups()[0] if a == "getkey": self.sendKey(mess.getFrom()) if self.crypt.hasKey(mess.getFrom())!=False: conn.send(mess.getFrom(),"#getkey") elif a == "sendkey": if res.groups()[1]!='': a = self.crypt.decodeKey(res.groups()[1].decode("hex")) self.crypt.saveKey(mess.getFrom().getStripped(),a) elif a == "mesg": decryptMess = self.crypt.decryptMesg(res.groups()[1]) if decryptMess=="#errorDecrypt": self.sendKey(mess.getFrom()) self.print_("Error decrypt sendKey") else: self.print_(self.to+"--> "+decryptMess) elif a == "getlastmesg*": print a
Source: https://habr.com/ru/post/165243/
All Articles