def test_alignClientHelloPadding_length_256_bytes(self): clientHello = ClientHello() clientHello.create((3,0), bytearray(32), bytearray(0), []) clientHello.extensions = [] ext = SNIExtension() ext.create(hostNames=[ bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeee'), ]) clientHello.extensions.append(ext) clientHelloLength = len(clientHello.write()) # clientHello length (excluding 4B header) should equal to 256 self.assertEqual(256, clientHelloLength - 4) HandshakeHelpers.alignClientHelloPadding(clientHello) # clientHello length (excluding 4B header) should equal to 512 data = clientHello.write() self.assertEqual(512, len(data) - 4) # previously created data should be extended with the padding extension # starting with the padding extension type \x00\x15 (21) self.assertEqual(bytearray(b'\x00\x15'), data[clientHelloLength:clientHelloLength+2])
def test_alignClientHelloPadding_length_of_511_bytes(self): clientHello = ClientHello() clientHello.create((3,0), bytearray(32), bytearray(0), []) clientHello.extensions = [] ext = SNIExtension() ext.create(hostNames=[ bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddd'), ]) clientHello.extensions.append(ext) clientHelloLength = len(clientHello.write()) self.assertEqual(511, clientHelloLength - 4) HandshakeHelpers.alignClientHelloPadding(clientHello) # clientHello length should equal to 515, ignoring handshake # protocol header (4B) data = clientHello.write() self.assertEqual(515, len(data) - 4) # padding extension should have zero byte size self.assertEqual(bytearray(b'\x00\x15\x00\x00'), data[clientHelloLength:])
def test_alignClientHelloPadding_length_of_512_bytes(self): clientHello = ClientHello() clientHello.create((3,0), bytearray(32), bytearray(0), []) clientHello.extensions = [] ext = SNIExtension() ext.create(hostNames=[ bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee'), bytearray(b'aaaaaaaaaabbbbbbbbbbccccccccccdddddddd'), ]) clientHello.extensions.append(ext) clientHelloLength = len(clientHello.write()) self.assertEqual(512, clientHelloLength - 4) HandshakeHelpers.alignClientHelloPadding(clientHello) # clientHello should not be changed due to sufficient length (>=512) self.assertEqual(clientHelloLength, len(clientHello.write()))
def test_write_with_multiple_hostnames(self): server_name = SNIExtension() server_name = server_name.create( hostNames=[bytearray(b'example.com'), bytearray(b'example.org')]) self.assertEqual( bytearray(b'\x00\x1c' + # lenght of array - 28 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # utf-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' + b'\x00' + # type of elemnt - host_name (0) b'\x00\x0b' + # length of elemnet - 11 bytes # utf-8 encoding of example.org b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x6f\x72\x67'), server_name.extData) self.assertEqual( bytearray(b'\x00\x00' + # type of extension - SNI (0) b'\x00\x1e' + # length of extension - 26 bytes b'\x00\x1c' + # lenght of array - 24 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # utf-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' + b'\x00' + # type of elemnt - host_name (0) b'\x00\x0b' + # length of elemnet - 11 bytes # utf-8 encoding of example.org b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x6f\x72\x67'), server_name.write())
def test_write_with_multiple_hostnames(self): server_name = SNIExtension() server_name = server_name.create(host_names=[ bytearray(b'example.com'), bytearray(b'example.org')]) self.assertEqual(bytearray( b'\x00\x1c' + # lenght of array - 28 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # utf-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' + b'\x00' + # type of elemnt - host_name (0) b'\x00\x0b' + # length of elemnet - 11 bytes # utf-8 encoding of example.org b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x6f\x72\x67' ), server_name.ext_data) self.assertEqual(bytearray( b'\x00\x00' + # type of extension - SNI (0) b'\x00\x1e' + # length of extension - 26 bytes b'\x00\x1c' + # lenght of array - 24 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # utf-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' + b'\x00' + # type of elemnt - host_name (0) b'\x00\x0b' + # length of elemnet - 11 bytes # utf-8 encoding of example.org b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x6f\x72\x67' ), server_name.write())
def test_create_with_hostname(self): server_name = SNIExtension() server_name = server_name.create(bytearray(b'example.com')) self.assertEqual((bytearray(b'example.com'),), server_name.host_names) self.assertEqual([SNIExtension.ServerName( NameType.host_name, bytearray(b'example.com') )], server_name.server_names)
def test_create_with_hostname(self): server_name = SNIExtension() server_name = server_name.create(bytearray(b'example.com')) self.assertEqual((bytearray(b'example.com'), ), server_name.hostNames) self.assertEqual([ SNIExtension.ServerName(NameType.host_name, bytearray(b'example.com')) ], server_name.serverNames)
def test___repr__(self): server_name = SNIExtension() server_name = server_name.create(serverNames=[ SNIExtension.ServerName(0, bytearray(b'example.com')), SNIExtension.ServerName(1, bytearray(b'\x04\x01')) ]) self.assertEqual("SNIExtension(serverNames=["\ "ServerName(name_type=0, name=bytearray(b'example.com')), "\ "ServerName(name_type=1, name=bytearray(b'\\x04\\x01'))])", repr(server_name))
def test___repr__(self): server_name = SNIExtension() server_name = server_name.create( server_names=[ SNIExtension.ServerName(0, bytearray(b'example.com')), SNIExtension.ServerName(1, bytearray(b'\x04\x01'))]) self.assertEqual("SNIExtension(server_names=["\ "ServerName(name_type=0, name=bytearray(b'example.com')), "\ "ServerName(name_type=1, name=bytearray(b'\\x04\\x01'))])", repr(server_name))
def test_write_of_empty_list_of_names(self): server_name = SNIExtension() server_name = server_name.create(server_names=[]) self.assertEqual(bytearray( b'\x00\x00' # length of array - 0 bytes ), server_name.ext_data) self.assertEqual(bytearray( b'\x00\x00' + # type of extension - SNI 0 b'\x00\x02' + # length of extension - 2 bytes b'\x00\x00' # length of array of names - 0 bytes ), server_name.write())
def test_create_with_serverNames(self): server_name = SNIExtension() server_name = server_name.create(serverNames=[ SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')), SNIExtension.ServerName(0, bytearray(b'example.net')) ]) self.assertEqual((bytearray(b'example.net'), ), server_name.hostNames) self.assertEqual([ SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')), SNIExtension.ServerName(0, bytearray(b'example.net')) ], server_name.serverNames)
def test_host_names_delete(self): server_name = SNIExtension() server_name = server_name.create(server_names=[ SNIExtension.ServerName(0, bytearray(b'example.net')), SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')) ]) del server_name.host_names self.assertEqual(tuple(), server_name.host_names) self.assertEqual([ SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com'))], server_name.server_names)
def test_hostNames_delete(self): server_name = SNIExtension() server_name = server_name.create(serverNames=[ SNIExtension.ServerName(0, bytearray(b'example.net')), SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')) ]) del server_name.hostNames self.assertEqual(tuple(), server_name.hostNames) self.assertEqual([ SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')) ], server_name.serverNames)
def test_write_of_empty_list_of_names(self): server_name = SNIExtension() server_name = server_name.create(serverNames=[]) self.assertEqual( bytearray(b'\x00\x00' # length of array - 0 bytes ), server_name.extData) self.assertEqual( bytearray(b'\x00\x00' + # type of extension - SNI 0 b'\x00\x02' + # length of extension - 2 bytes b'\x00\x00' # length of array of names - 0 bytes ), server_name.write())
def test_create_with_server_names(self): server_name = SNIExtension() server_name = server_name.create(server_names=[ SNIExtension.ServerName(1, bytearray(b'example.com')), SNIExtension.ServerName(4, bytearray(b'www.example.com')), SNIExtension.ServerName(0, bytearray(b'example.net'))]) self.assertEqual((bytearray(b'example.net'),), server_name.host_names) self.assertEqual([ SNIExtension.ServerName( 1, bytearray(b'example.com')), SNIExtension.ServerName( 4, bytearray(b'www.example.com')), SNIExtension.ServerName( 0, bytearray(b'example.net'))], server_name.server_names)
def test_write(self): server_name = SNIExtension() server_name = server_name.create(bytearray(b'example.com')) self.assertEqual(bytearray( b'\x00\x0e' + # length of array - 14 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # UTF-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' ), server_name.ext_data) self.assertEqual(bytearray( b'\x00\x00' + # type of extension - SNI (0) b'\x00\x10' + # length of extension - 16 bytes b'\x00\x0e' + # length of array - 14 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # UTF-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d' ), server_name.write())
def test_write(self): server_name = SNIExtension() server_name = server_name.create(bytearray(b'example.com')) self.assertEqual( bytearray(b'\x00\x0e' + # length of array - 14 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # UTF-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d'), server_name.extData) self.assertEqual( bytearray(b'\x00\x00' + # type of extension - SNI (0) b'\x00\x10' + # length of extension - 16 bytes b'\x00\x0e' + # length of array - 14 bytes b'\x00' + # type of element - host_name (0) b'\x00\x0b' + # length of element - 11 bytes # UTF-8 encoding of example.com b'\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d'), server_name.write())
def test_create(self): server_name = SNIExtension() server_name = server_name.create() self.assertIsNone(server_name.serverNames) self.assertEqual(tuple(), server_name.hostNames)
def test_create(self): server_name = SNIExtension() server_name = server_name.create() self.assertEqual(None, server_name.server_names) self.assertEqual(tuple(), server_name.host_names)