def auth_publickey(self, packet):
     hasSig = ord(packet[0])
     algName, blob, rest = getNS(packet[1:], 2)
     pubKey = keys.getPublicKeyObject(data = blob)
     signature = hasSig and getNS(rest)[0] or None
     if hasSig:
         b = NS(self.transport.sessionID) + chr(MSG_USERAUTH_REQUEST) + \
             NS(self.user) + NS(self.nextService) + NS('publickey') + \
             chr(hasSig) +  NS(keys.objectType(pubKey)) + NS(blob)
         c = credentials.SSHPrivateKey(self.user, algName, blob, b, signature)
         return self.portal.login(c, None, interfaces.IConchUser)
     else:
         c = credentials.SSHPrivateKey(self.user, algName, blob, None, None)
         return self.portal.login(c, None, interfaces.IConchUser).addErrback(
                                                     self._ebCheckKey,
                                                     packet[1:])
예제 #2
0
 def auth_publickey(self, packet):
     hasSig = ord(packet[0])
     algName, blob, rest = getNS(packet[1:], 2)
     pubKey = keys.getPublicKeyObject(data=blob)
     signature = hasSig and getNS(rest)[0] or None
     if hasSig:
         b = NS(self.transport.sessionID) + chr(MSG_USERAUTH_REQUEST) + \
             NS(self.user) + NS(self.nextService) + NS('publickey') + \
             chr(hasSig) +  NS(keys.objectType(pubKey)) + NS(blob)
         c = credentials.SSHPrivateKey(self.user, algName, blob, b,
                                       signature)
         return self.portal.login(c, None, interfaces.IConchUser)
     else:
         c = credentials.SSHPrivateKey(self.user, algName, blob, None, None)
         return self.portal.login(c, None,
                                  interfaces.IConchUser).addErrback(
                                      self._ebCheckKey, packet[1:])
예제 #3
0
 def _continueGEX_GROUP(self, ignored, pubKey, f, signature):
     serverKey = keys.getPublicKeyObject(pubKey)
     sharedSecret = _MPpow(f, self.x, DH_PRIME)
     h = sha.new()
     h.update(NS(self.ourVersionString))
     h.update(NS(self.otherVersionString))
     h.update(NS(self.ourKexInitPayload))
     h.update(NS(self.serverKexInitPayload))
     h.update(NS(pubKey))
     h.update(MP(self.DHpubKey))
     h.update(MP(f))
     h.update(sharedSecret)
     exchangeHash = h.digest()
     if not keys.verifySignature(serverKey, signature, exchangeHash):
         self.sendDisconnect(DISCONNECT_KEY_EXCHANGE_FAILED, 'bad signature')
         return
     self._keySetup(sharedSecret, exchangeHash)
예제 #4
0
 def _continueGEX_GROUP(self, ignored, pubKey, f, signature):
     serverKey = keys.getPublicKeyObject(pubKey)
     sharedSecret = _MPpow(f, self.x, DH_PRIME)
     h = sha.new()
     h.update(NS(self.ourVersionString))
     h.update(NS(self.otherVersionString))
     h.update(NS(self.ourKexInitPayload))
     h.update(NS(self.serverKexInitPayload))
     h.update(NS(pubKey))
     h.update(MP(self.DHpubKey))
     h.update(MP(f))
     h.update(sharedSecret)
     exchangeHash = h.digest()
     if not keys.verifySignature(serverKey, signature, exchangeHash):
         self.sendDisconnect(DISCONNECT_KEY_EXCHANGE_FAILED, 'bad signature')
         return
     self._keySetup(sharedSecret, exchangeHash)