Пример #1
0
 def sendPacket(self, messageType, payload):
     payload = chr(messageType) + payload
     if self.outgoingCompression:
         payload = self.outgoingCompression.compress(
             payload) + self.outgoingCompression.flush(2)
     if self.currentEncryptions:
         bs = self.currentEncryptions.enc_block_size
     else:
         bs = 8
     totalSize = 5 + len(payload)
     lenPad = bs - (totalSize % bs)
     if lenPad < 4:
         lenPad = lenPad + bs
     packet = struct.pack('!LB', totalSize+lenPad-4, lenPad)+ \
             payload+entropy.get_bytes(lenPad)
     assert len(packet) % bs == 0, '%s extra bytes in packet' % (
         len(packet) % bs)
     if self.currentEncryptions:
         encPacket = self.currentEncryptions.encrypt(
             packet) + self.currentEncryptions.makeMAC(
                 self.outgoingPacketSequence, packet)
     else:
         encPacket = packet
     self.transport.write(encPacket)
     self.outgoingPacketSequence += 1
Пример #2
0
 def sendKexInit(self):
     self.ourKexInitPayload = chr(MSG_KEXINIT)+entropy.get_bytes(16)+ \
                    NS(','.join(self.supportedKeyExchanges))+ \
                    NS(','.join(self.supportedPublicKeys))+ \
                    NS(','.join(self.supportedCiphers))+ \
                    NS(','.join(self.supportedCiphers))+ \
                    NS(','.join(self.supportedMACs))+ \
                    NS(','.join(self.supportedMACs))+ \
                    NS(','.join(self.supportedCompressions))+ \
                    NS(','.join(self.supportedCompressions))+ \
                    NS(','.join(self.supportedLanguages))+ \
                    NS(','.join(self.supportedLanguages))+ \
                    '\000'+'\000\000\000\000'
     self.sendPacket(MSG_KEXINIT, self.ourKexInitPayload[1:])
Пример #3
0
 def sendKexInit(self):
     self.ourKexInitPayload = chr(MSG_KEXINIT)+entropy.get_bytes(16)+ \
                    NS(','.join(self.supportedKeyExchanges))+ \
                    NS(','.join(self.supportedPublicKeys))+ \
                    NS(','.join(self.supportedCiphers))+ \
                    NS(','.join(self.supportedCiphers))+ \
                    NS(','.join(self.supportedMACs))+ \
                    NS(','.join(self.supportedMACs))+ \
                    NS(','.join(self.supportedCompressions))+ \
                    NS(','.join(self.supportedCompressions))+ \
                    NS(','.join(self.supportedLanguages))+ \
                    NS(','.join(self.supportedLanguages))+ \
                    '\000'+'\000\000\000\000'
     self.sendPacket(MSG_KEXINIT, self.ourKexInitPayload[1:])
Пример #4
0
 def ssh_KEX_DH_GEX_GROUP(self, packet):
     if self.kexAlg == 'diffie-hellman-group1-sha1':
         pubKey, packet = getNS(packet)
         f, packet = getMP(packet)
         signature, packet = getNS(packet)
         fingerprint = ':'.join(map(lambda c: '%02x'%ord(c), md5.new(pubKey).digest()))
         d = self.verifyHostKey(pubKey, fingerprint)
         d.addCallback(self._continueGEX_GROUP, pubKey, f, signature)
         d.addErrback(lambda unused,self=self:self.sendDisconnect(DISCONNECT_HOST_KEY_NOT_VERIFIABLE, 'bad host key'))
     else:
         self.p, rest = getMP(packet)
         self.g, rest = getMP(rest)
         self.x = getMP('\x00\x00\x00\x40'+entropy.get_bytes(64))[0]
         self.DHpubKey = pow(self.g, self.x, self.p)
         self.sendPacket(MSG_KEX_DH_GEX_INIT, MP(self.DHpubKey))
Пример #5
0
 def ssh_KEX_DH_GEX_GROUP(self, packet):
     if self.kexAlg == 'diffie-hellman-group1-sha1':
         pubKey, packet = getNS(packet)
         f, packet = getMP(packet)
         signature, packet = getNS(packet)
         fingerprint = ':'.join(map(lambda c: '%02x'%ord(c), md5.new(pubKey).digest()))
         d = self.verifyHostKey(pubKey, fingerprint)
         d.addCallback(self._continueGEX_GROUP, pubKey, f, signature)
         d.addErrback(lambda unused,self=self:self.sendDisconnect(DISCONNECT_HOST_KEY_NOT_VERIFIABLE, 'bad host key'))
     else:
         self.p, rest = getMP(packet)
         self.g, rest = getMP(rest)
         self.x = getMP('\x00\x00\x00\x40'+entropy.get_bytes(64))[0]
         self.DHpubKey = pow(self.g, self.x, self.p)
         self.sendPacket(MSG_KEX_DH_GEX_INIT, MP(self.DHpubKey))
Пример #6
0
 def sendPacket(self, messageType, payload):
     payload = chr(messageType)+payload
     if self.outgoingCompression:
         payload = self.outgoingCompression.compress(payload) + self.outgoingCompression.flush(2)
     if self.currentEncryptions:
         bs = self.currentEncryptions.enc_block_size
     else:
         bs = 8
     totalSize = 5+len(payload)
     lenPad = bs-(totalSize%bs)
     if lenPad < 4:
         lenPad = lenPad+bs
     packet = struct.pack('!LB', totalSize+lenPad-4, lenPad)+ \
             payload+entropy.get_bytes(lenPad)
     assert len(packet)%bs == 0, '%s extra bytes in packet'%(len(packet)%bs)
     if self.currentEncryptions:
         encPacket = self.currentEncryptions.encrypt(packet) + self.currentEncryptions.makeMAC(self.outgoingPacketSequence, packet)
     else:
         encPacket = packet
     self.transport.write(encPacket)
     self.outgoingPacketSequence+=1