def handleCertCallResponse(self, result, node, challenge):
        logger(self.sourceNode, "handleCertCallResponse {}".format(str(result)))
        if 'value' in result[1]:
            try:
                cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,
                                                      result[1]['value'])
            except:
                logger(self.sourceNode, "RETFALSENONE: Invalid certificate "
                                        "response from {}".format(node))
                return (False, None)
            fingerprint = cert.digest("sha256")
            id = fingerprint.replace(":","")[-40:]
            if node.id.encode('hex').upper() == id:
                try:
                    OpenSSL.crypto.verify(cert,
                                         result[1]['signature'],
                                         challenge,
                                         "sha256")
                except:
                    logger(self.sourceNode,
                          "Invalid signature on certificate "
                          "response from {}".format(node))
                self.router.addContact(node)
                self.storeCert(result[1]['value'], id)
                if self.router.isNewNode(node):
                    self.transferKeyValues(node)
            else:
                logger(self.sourceNode, "RETFALSENONE: Certificate from {} does not match claimed node id".format(node))
                return (False, None)
        else:
            self.router.removeContact(node)
        return result
Add author information to the template document.
dataset/ETHPy150Open EricssonResearch/calvin-base/calvin/runtime/south/plugins/storage/twistedimpl/securedht/append_server.py/KademliaProtocolAppend.handleCertCallResponse--crossover with--dataset/ETHPy150Open nlloyd/SubliminalCollaborator/libs/twisted/lore/tree.py/setAuthors