def test_process(self): exp = ExpectServerHello2() state = ConnectionState() state.msg_sock = mock.MagicMock() msg = ServerHello2() msg.session_id_hit = 1 msg.session_id = bytearray(b'\x12') msg.certificate = X509().parse(srv_raw_certificate).writeBytes() ret = exp.process(state, msg) self.assertEqual(state.session_id, msg.session_id)
def process(self, state, msg): """ Process the message and update state accordingly @type state: ConnectionState @param state: overall state of TLS connection @type msg: Message @param msg: TLS Message read from socket """ # the value is faked for SSLv2 protocol, but let's just check sanity assert msg.contentType == ContentType.handshake parser = Parser(msg.write()) hs_type = parser.get(1) assert hs_type == SSL2HandshakeType.server_hello server_hello = ServerHello2().parse(parser) state.handshake_messages.append(server_hello) state.handshake_hashes.update(msg.write()) if self.version is not None: assert self.version == server_hello.server_version if server_hello.session_id_hit: state.resuming = True state.session_id = server_hello.session_id state.server_random = server_hello.session_id state.version = server_hello.server_version state.msg_sock.version = server_hello.server_version # fake a certificate message so finding the server public key works x509 = X509() x509.parseBinary(server_hello.certificate) cert_chain = X509CertChain([x509]) certificate = Certificate(CertificateType.x509) certificate.create(cert_chain) state.handshake_messages.append(certificate)