def __diffieHellmanSessionMessageHandler( self, sentSeqNumber, sessionID, iv, encryptedMessage, prevSeqNumber, mk, sessionKey, expirationDate ): iv = base64.b64decode(iv) self.__verifyExpirationDate(expirationDate) decryptedMessage = self.__decryptData(sessionKey, iv, encryptedMessage) sentSeqNumber = self.__decryptData(sessionKey, iv, sentSeqNumber) try: lastSeqNumber = self.activeUsers.getDiffieHellmanUserLastSeqNumber(sessionID) except Exception as e: raise e if lastSeqNumber > sentSeqNumber: raise Exception("Wrong SeqNumber") try: parsedMessage = unmarshal(decryptedMessage[:-1]) iv = self.__generateIV() newSeqNumber = self.__encryptData(sessionKey, iv, sentSeqNumber) except Exception as e: raise Exception("Unmarshal failed of: " + str(decryptedMessage) + ": " + str(e)) if isinstance(parsedMessage, ClientAuthentication): secretSignature = parsedMessage.secretSignature nBI = parsedMessage.nBI name = parsedMessage.name userName = parsedMessage.userName hostName = parsedMessage.hostName publicKey = self.__userRSAPublicKey(nBI) self.__verifySignature(base64.b64decode(mk), publicKey, secretSignature) timmer = time.time() self.activeUsers.addSessionEstablishedUser( nBI, name, userName, hostName, sessionID, sentSeqNumber, sessionKey, expirationDate, timmer ) ack = Acknowledge() ackXML = ack.creatXMLMessage() encryptedMessageText = self.__encryptData(sessionKey, iv, ackXML) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) else: notAck = NotAcknowledge() encryptedMessageText = self.__encryptData(sessionKey, iv, notAck.creatXMLMessage()) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) return encryptedMessage.creatXMLMessage()
def __sessionEstablishedMessageHandler( self, nBI, sentSeqNumber, sessionID, iv, encryptedMessage, prevSeqNumber, sessionKey, expirationDate ): iv = base64.b64decode(iv) decryptedMessage = self.__decryptData(sessionKey, iv, encryptedMessage) sentSeqNumber = self.__decryptData(sessionKey, iv, sentSeqNumber) try: lastSeqNumber = self.activeUsers.getSessionEstablishedUserLastSeqNumber(sessionID) except Exception as e: raise e if lastSeqNumber > sentSeqNumber: raise Exception("Wrong SeqNumber") try: parsedMessage = unmarshal(decryptedMessage[:-1]) iv = self.__generateIV() newSeqNumber = self.__encryptData(sessionKey, iv, sentSeqNumber) except Exception as e: raise Exception("Unmarshal failed: " + str(e)) if isinstance(parsedMessage, Command): self.__verifyExpirationDate(expirationDate) date = parsedMessage.date command = parsedMessage.command self.activeUsers.addCommand(sessionID, date, command) self.activeUsers.updateTimmerSessionEstablishedUsers(sessionID) self.activeUsers.updateSeqNumberSessionEstablishedUsers(sessionID, sentSeqNumber) ack = Acknowledge() ackXML = ack.creatXMLMessage() encryptedMessageText = self.__encryptData(sessionKey, iv, ackXML) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) elif isinstance(parsedMessage, TearDown): self.__verifyExpirationDate(expirationDate) try: self.activeUsers.removeSessionEstablished(sessionID) ack = Acknowledge() ackXML = ack.creatXMLMessage() encryptedMessageText = self.__encryptData(sessionKey, iv, ackXML) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) except: notAck = NotAcknowledge() encryptedMessageText = self.__encryptData(sessionKey, iv, notAck.creatXMLMessage()) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) elif isinstance(parsedMessage, NewSecretRequest): newSessionKey = hashlib.sha1(self.__generateSymmetricKey()).hexdigest() newExpirationDate = self.__generateExpirationDate(5) # 5min newSessionKeyResponse = NewSecretResponse( sessionID, newSessionKey, newExpirationDate, self.certificate, self.serverIP, Constants.UDP_PORT ) tokenSignature = self.__signMessage(newSessionKeyResponse.getTokenXML()) newSessionKeyResponse.tokenSignature = tokenSignature print "new sessionkey: " + newSessionKeyResponse.creatXMLMessage() encryptedMessageText = self.__encryptData(sessionKey, iv, newSessionKeyResponse.creatXMLMessage()) self.activeUsers.updateSessionEstablishedUsers(sessionID, sentSeqNumber, newSessionKey, newExpirationDate) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) else: notAck = NotAcknowledge() encryptedMessageText = self.__encryptData(sessionKey, iv, notAck.creatXMLMessage()) encryptedMessage = EncryptedMessage(newSeqNumber, sessionID, iv, encryptedMessageText) return encryptedMessage.creatXMLMessage()