Beispiel #1
0
 def parsePayload(cls, data, private=False):
     p, data = read_mpi(data)
     q, data = read_mpi(data)
     g, data = read_mpi(data)
     y, data = read_mpi(data)
     if private:
         x, data = read_mpi(data)
         return cls((y, g, p, q, x), private=True), data
     return cls((y, g, p, q), private=False), data
Beispiel #2
0
 def parsePayload(cls, data, private=False):
     p, data = read_mpi(data)
     q, data = read_mpi(data)
     g, data = read_mpi(data)
     y, data = read_mpi(data)
     if private:
         x, data = read_mpi(data)
         return cls((y, g, p, q, x), private=True), data
     return cls((y, g, p, q), private=False), data
Beispiel #3
0
	def handleRevealSig(self, msg):
		if self.state != STATE_AWAITING_REVEALSIG:
			logger.error('bad state for RevealSig')
			raise InvalidParameterError

		self.r = msg.rkey
		gxmpi = AESCTR(self.r).decrypt(self.encgx)
		if SHA256(gxmpi) != self.hashgx:
			logger.error('Hashes don\'t match')
			logger.info('r=%r, hashgx=%r, computed hash=%r, gxmpi=%r',
					self.r, self.hashgx, SHA256(gxmpi), gxmpi)
			raise InvalidParameterError

		self.gy = read_mpi(gxmpi)[0]
		self.createAuthKeys()

		if msg.mac != SHA256HMAC160(self.mac_m2, msg.getMacedData()):
			logger.error('HMACs don\'t match')
			logger.info('mac=%r, mac_m2=%r, data=%r', msg.mac, self.mac_m2,
					msg.getMacedData())
			raise InvalidParameterError

		self.checkPubkeyAuth(self.enc_c, self.mac_m1, msg.encsig)

		aesxb = self.calculatePubkeyAuth(self.enc_cp, self.mac_m1p)
		self.sessionIdHalf = True

		self.onSuccess(self)

		self.ourKeyid = 0
		self.state = STATE_NONE

		cmpmac = struct.pack(b'!I', len(aesxb)) + aesxb

		return proto.Signature(aesxb, SHA256HMAC160(self.mac_m2p, cmpmac))
Beispiel #4
0
    def handleRevealSig(self, msg):
        if self.state != STATE_AWAITING_REVEALSIG:
            logger.error('bad state for RevealSig')
            raise InvalidParameterError

        self.r = msg.rkey
        gxmpi = AESCTR(self.r).decrypt(self.encgx)
        if SHA256(gxmpi) != self.hashgx:
            logger.error('Hashes don\'t match')
            logger.info('r=%r, hashgx=%r, computed hash=%r, gxmpi=%r',
                    self.r, self.hashgx, SHA256(gxmpi), gxmpi)
            raise InvalidParameterError

        self.gy = read_mpi(gxmpi)[0]
        self.createAuthKeys()

        if msg.mac != SHA256HMAC160(self.mac_m2, msg.getMacedData()):
            logger.error('HMACs don\'t match')
            logger.info('mac=%r, mac_m2=%r, data=%r', msg.mac, self.mac_m2,
                    msg.getMacedData())
            raise InvalidParameterError

        self.checkPubkeyAuth(self.enc_c, self.mac_m1, msg.encsig)

        aesxb = self.calculatePubkeyAuth(self.enc_cp, self.mac_m1p)
        self.sessionIdHalf = True

        self.onSuccess(self)

        self.ourKeyid = 0
        self.state = STATE_NONE

        cmpmac = struct.pack(b'!I', len(aesxb)) + aesxb

        return proto.Signature(aesxb, SHA256HMAC160(self.mac_m2p, cmpmac))
 def parsePayload(cls, data):
     mpis = []
     if cls.dlen > 0:
         count, data = unpack(b"!I", data)
         for i in range(count):
             n, data = read_mpi(data)
             mpis.append(n)
     if len(data) > 0:
         raise TypeError("too much data for {0} mpis".format(cls.dlen))
     return cls(mpis)
Beispiel #6
0
 def parsePayload(cls, data):
     mpis = []
     if cls.dlen > 0:
         count, data = unpack(b'!I', data)
         for _ in range(count):
             n, data = read_mpi(data)
             mpis.append(n)
     if len(data) > 0:
         raise TypeError('too much data for {0} mpis'.format(cls.dlen))
     return cls(mpis)
Beispiel #7
0
	def parse_serialized_pubKey(cls, serializedPubKey):
	
		a, data = read_mpi(serializedPubKey)
		b = read_mpi(data)[0]
		
		return (a, b)
Beispiel #8
0
	def parse_serialized_privKey(cls, serializedPrivKey):
		return read_mpi(serializedPrivKey)[0]