def process(self, state, msg): assert msg.contentType == ContentType.alert parser = Parser(msg.write()) alert = Alert() alert.parse(parser) problem_desc = "" if self.level is not None and alert.level != self.level: problem_desc += "Alert level {0} != {1}".format( alert.level, self.level) if self.description is not None: # allow for multiple choice for description if not isinstance(self.description, collections.Iterable): self.description = tuple([self.description]) if alert.description not in self.description: if problem_desc: problem_desc += ", " descriptions = [ "\"{0}\"".format(AlertDescription.toStr(i)) for i in self.description ] expected = ", ".join( itertools.chain( (i for i in descriptions[:-2]), [" or ".join(i for i in descriptions[-2:])])) received = AlertDescription.toStr(alert.description) problem_desc += ("Expected alert description {0} does not " "match received \"{1}\"".format( expected, received)) if problem_desc: raise AssertionError(problem_desc)
def guess_response(content_type, data, ssl2=False): """Guess which kind of message is in the record layer payload""" if content_type == ContentType.change_cipher_spec: if len(data) != 1: return "ChangeCipherSpec(invalid size)" return "ChangeCipherSpec()" elif content_type == ContentType.alert: if len(data) < 2: return "Alert(invalid size)" return "Alert({0}, {1})".format(AlertLevel.toStr(data[0]), AlertDescription.toStr(data[1])) elif content_type == ContentType.handshake: if not data: return "Handshake(invalid size)" if ssl2: return "Handshake({0})".format(SSL2HandshakeType.toStr(data[0])) else: return "Handshake({0})".format(HandshakeType.toStr(data[0])) elif content_type == ContentType.application_data: return "ApplicationData(len={0})".format(len(data)) else: return ("Message(content_type={0}, first_byte={1}, " "len={2})").format(ContentType.toStr(content_type), data[0], len(data))
def guess_response(content_type, data): """Guess which kind of message is in the record layer payload""" if content_type == ContentType.change_cipher_spec: if len(data) != 1: return "ChangeCipherSpec(invalid size)" return "ChangeCipherSpec()" elif content_type == ContentType.alert: if len(data) < 2: return "Alert(invalid size)" return "Alert({0}, {1})".format(AlertLevel.toStr(data[0]), AlertDescription.toStr(data[1])) elif content_type == ContentType.handshake: if not data: return "Handshake(invalid size)" return "Handshake({0})".format(HandshakeType.toStr(data[0])) elif content_type == ContentType.application_data: return "ApplicationData(len={0})".format(len(data)) else: return ("Message(content_type={0}, first_byte={1}, " "len={2})").format(ContentType.toStr(content_type), data[0], len(data))
def test_toRepr(self): self.assertEqual(AlertDescription.toStr(40), "handshake_failure")
def test_toRepr(self): self.assertEqual(AlertDescription.toStr(40), 'handshake_failure')