Example #1
0
 def test_no_extensions(self):
     c = tls.ClientHello(CLIENT_HELLO_NO_EXTENSIONS)
     assert repr(c)
     assert c.sni is None
     assert c.cipher_suites == [53, 47, 10, 5, 4, 9, 3, 6, 8, 96, 97, 98, 100]
     assert c.alpn_protocols == []
     assert c.extensions == []
Example #2
0
 def test_extensions(self):
     data = bytes.fromhex(
         "03033b70638d2523e1cba15f8364868295305e9c52aceabda4b5147210abc783e6e1000022c02bc02fc02cc030"
         "cca9cca8cc14cc13c009c013c00ac014009c009d002f0035000a0100006cff0100010000000010000e00000b65"
         "78616d706c652e636f6d0017000000230000000d00120010060106030501050304010403020102030005000501"
         "00000000001200000010000e000c02683208687474702f312e3175500000000b00020100000a00080006001d00"
         "170018"
     )
     c = tls.ClientHello(data)
     assert repr(c)
     assert c.sni == 'example.com'
     assert c.cipher_suites == [
         49195, 49199, 49196, 49200, 52393, 52392, 52244, 52243, 49161,
         49171, 49162, 49172, 156, 157, 47, 53, 10
     ]
     assert c.alpn_protocols == [b'h2', b'http/1.1']
     assert c.extensions == [
         (65281, b'\x00'),
         (0, b'\x00\x0e\x00\x00\x0bexample.com'),
         (23, b''),
         (35, b''),
         (13, b'\x00\x10\x06\x01\x06\x03\x05\x01\x05\x03\x04\x01\x04\x03\x02\x01\x02\x03'),
         (5, b'\x01\x00\x00\x00\x00'),
         (18, b''),
         (16, b'\x00\x0c\x02h2\x08http/1.1'),
         (30032, b''),
         (11, b'\x01\x00'),
         (10, b'\x00\x06\x00\x1d\x00\x17\x00\x18')
     ]
Example #3
0
def parse_client_hello(data: bytes) -> Optional[net_tls.ClientHello]:
    """
    Check if the supplied bytes contain a full ClientHello message,
    and if so, parse it.

    Returns:
        - A ClientHello object on success
        - None, if the TLS record is not complete

    Raises:
        - A ValueError, if the passed ClientHello is invalid
    """
    # Check if ClientHello is complete
    client_hello = get_client_hello(data)
    if client_hello:
        try:
            return net_tls.ClientHello(client_hello[4:])
        except EOFError as e:
            raise ValueError("Invalid ClientHello") from e
    return None