示例#1
0
class User:
    def __int__(
        self
    ):  #construct the components NOT give values as Python returns no attributes...don't know why
        self.userID = None
        self.message = None
        """
        public key components of the server
        """
        self.n_RSA = 0  # n = p*q
        self.e_RSA = 0
        self.sigG_RSA = 0
        """
        public key components of the user DH
        """
        self.p_DH = 0
        self.q_DH = 0
        self.public_DH = 0
        """
        private key components of the user DH
        """
        self.private_DH = 0
        self.sessionKey = 0
        """
        HMAC 
        """
        self.demoHMAC = None
        self.messageHMAC = None

        self.taylorArray = []

    #setup phase

    def setUser(self, new_ID,
                new_message):  #update user here because of no attributes error
        self.userID = new_ID
        self.message = new_message

    def setRSA(self, new_e, new_N, new_sigG):  #update RSA
        self.e_RSA = new_e
        self.n_RSA = new_N
        self.sigG_RSA = new_sigG

    def sigVerfication(self):  #verify by the user
        hash = SHA256.new(data=self.message.encode('utf-8'))
        hash = hash.digest()
        hash = int.from_bytes(hash, byteorder='big')
        if hash == FME(self.sigG_RSA, self.e_RSA,
                       self.n_RSA):  #if hashed "hello" is sigG
            return True

    def getMessage(self):  #for printing out "Hello" can replace
        return self.message

    def getUserID(self):  #for sending USerID, that's all
        return self.userID

    #handshake phase

    def setDH(self, new_p, new_q):  #p and q are given
        self.p = new_p
        self.q = new_q

    def handshake(self, p, q):  #generating DH
        self.demoDH = DH()
        self.setDH(p, q)  #not necessary to do this as line 88
        self.demoDH.setSytemPrameters(self.p, self.q)
        self.private_DH = self.demoDH.setPrivate(
        )  #DH: selecting private key first then public key
        self.public_DH = self.demoDH.setPublic(
        )  #generate public key, this goes to the server

    def session(self, public_key_S):
        self.sessionKey = self.demoDH.setSession(
            public_key_S)  #by Server Public key

    def getPublic_DH(self):
        return self.public_DH

    def getSession_DH(self):
        return self.sessionKey

    #data exchange phase

    def dataExchange(self):  #generate data exchange components here
        self.demoHMAC = HMAC()
        self.demoCBC = CBC()
        self.demoCBC.createKey(
            self.sessionKey
        )  #user generate CBC keys: neither Server or User is okay, but only one of them

    def getKey(self):
        return self.demoCBC.getKey(
        )  #16 bytes Assume the connection is secured and this must be top-secret

    def getIV(self):
        return self.demoCBC.getIV(
        )  #16 bytes Assume the connection is secured and this must be top-secret

    def HMAC1(
        self
    ):  #Before exchange the message original one goes to the server for authorization
        taylor = "I was seven, and you were nine I looked at you like the stars th"
        m = self.demoHMAC.HMAC(self.sessionKey, taylor)  # assume this is tag
        return m  # string type

    def dataExchange2(self):  #encrypting the message return as array
        taylor = "I was seven, and you were nine I looked at you like the stars th"
        self.taylorArray = self.demoCBC.encrypt(
            taylor)  #already session and IV are created in line 106
        return self.taylorArray

    def setHMAC(self, m):  #set the server HMAC value for decrypted message
        self.messageHMAC = m

    def dataExchange3(self,
                      swift):  #decrypt partial messages and return as string
        msg = self.demoCBC.decrypt(swift)
        if self.messageHMAC == self.demoHMAC.HMAC(self.sessionKey,
                                                  msg):  # verification check
            print("Authorized Server")
        else:
            print("Who are you?")
示例#2
0
class Server:
    def __int__(self):

        self.bits = 0
        self.IDs = 0
        self.serverID = None
        self.message = None
        self.demoRSA = None
        """
        pirvate key components must be hidden 
        """
        self.p_RSA = 0
        self.q_RSA = 0
        self.d_RSA = 0
        """
        public key components
        """
        self.n_RSA = 0  # n = p*q
        self.e_RSA = 0  # this value is given
        self.sigG_RSA = 0  #sigG = hash(message)^d mod n, I use SHA 256 for the hash
        self.hashedMessage_RSA = 0  #for verification phase
        self.sigV_RSA = None  #sigV = 1 is if hash(message) = sigG^e mod n

        self.demoDH = None
        """
        DH components
        """
        self.p_DH = 0
        self.q_DH = 0
        self.public_DH = 0
        """
        private key components of the user DH
        """
        self.private_DH = 0
        self.sessionKey = 0
        """
        HMAC 
        """
        self.demoHMAC = None
        self.messageHMAC = None

        self.swiftArray = []

    # set up phase

    def updateRSAKeys(self):
        """
        pirvate key components must be hidden 
        """
        self.p_RSA = self.demoRSA.getP()
        self.q_RSA = self.demoRSA.getQ()
        self.d_RSA = self.demoRSA.getD()
        """
        public key components
        """
        self.n_RSA = self.demoRSA.getN()

        self.sigG_RSA = self.demoRSA.getSigG(
        )  #sigG = hash(message)^d mod n, I use SHA 256 for the hash
        self.hashedMessage_RSA = self.demoRSA.getHashedM(
        )  #for verification phase

        self.sigV_RSA = None  #sigV = 1 is if hash(message) = sigG^e mod n

    def setKey(self, message, new_bits):  #generate the RSA ans IDs

        self.message = message

        self.bits = new_bits

        self.e_RSA = 65537  # this value is given

        self.demoRSA = RSA()

        self.demoRSA.RSA(self.bits, self.e_RSA)

        self.demoRSA.sigGeneration(self.message)

        self.updateRSAKeys()

        self.IDs = int(1780119054 *
                       random.random())  #not necessary to generate

        self.serverID = 1780119054  #just give -> can change any numbers

    """
    public key components
    """

    def getN(self):
        return self.n_RSA

    def getE(self):
        return self.e_RSA

    def getSigG(self):
        return self.sigG_RSA

    def getIDs(self):
        return self.IDs

    def getServerID(self):
        return self.serverID

    #handshake phase

    def setDH(self, new_p, new_q):  #p and q are given
        self.p = new_p
        self.q = new_q

    def handshake(self, p, q):  # generate DH
        self.demoDH = DH()
        self.setDH(p, q)  #not necessary to do this
        self.demoDH.setSytemPrameters(self.p, self.q)
        self.private_DH = self.demoDH.setPrivate(
        )  #private first and public after private is random select
        self.public_DH = self.demoDH.setPublic(
        )  # for create session key and this goes to the user

    def session(self, public_key_U):
        self.sessionKey = self.demoDH.setSession(
            public_key_U)  #generate by User public key

    def getPublic_DH(self):
        return self.public_DH

    def getSession_HD(self):
        return self.sessionKey

    #data exchange phase

    def dataExchange(
        self
    ):  #generate components no need to create session and IV as the user does
        self.demoHMAC = HMAC()
        self.demoCBC = CBC()

    def setData(self, sessionkey, IVA):  #this must be top-secret
        self.demoCBC.setkey(sessionkey, IVA)

    def setHMAC(self, m):  #for the user verfication message
        self.messageHMAC = m

    def dataExchange2(self,
                      taylor):  #decrypt the partial messages, para is arrray
        msg = self.demoCBC.decrypt(taylor)  # return as string
        if self.messageHMAC == self.demoHMAC.HMAC(self.sessionKey,
                                                  msg):  #check verification
            print("Authorized User")
        else:
            print("Who are you?")

    def HMAC1(self):  #for the server verfication message
        swift = "at shined In the sky, the pretty lights. And our daddies used to"
        m = self.demoHMAC.HMAC(self.sessionKey, swift)
        return m  # string type

    def dataExchange3(self):  #encrypt the message
        swift = "at shined In the sky, the pretty lights. And our daddies used to"
        self.swiftArray = self.demoCBC.encrypt(swift)
        return self.swiftArray