Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_receive_datagram_reserved_bits_non_zero(self):
client = create_standalone_client(self)
builder = QuicPacketBuilder(
host_cid=client._peer_cid,
is_client=False,
peer_cid=client.host_cid,
version=client._version,
)
crypto = CryptoPair()
crypto.setup_initial(client._peer_cid, is_client=False, version=client._version)
crypto.encrypt_packet_real = crypto.encrypt_packet
def encrypt_packet(plain_header, plain_payload, packet_number):
# mess with reserved bits
plain_header = bytes([plain_header[0] | 0x0C]) + plain_header[1:]
return crypto.encrypt_packet_real(
plain_header, plain_payload, packet_number
)
crypto.encrypt_packet = encrypt_packet
builder.start_packet(PACKET_TYPE_INITIAL, crypto)
buf = builder.start_frame(QuicFrameType.PADDING)
buf.push_bytes(bytes(builder.remaining_flight_space))
def test_decrypt_chacha20(self):
pair = CryptoPair()
pair.recv.setup(
cipher_suite=CipherSuite.CHACHA20_POLY1305_SHA256,
secret=binascii.unhexlify(
"b42772df33c9719a32820d302aa664d080d7f5ea7a71a330f87864cb289ae8c0"
),
version=PROTOCOL_VERSION,
)
plain_header, plain_payload, packet_number = pair.decrypt_packet(
CHACHA20_CLIENT_ENCRYPTED_PACKET, 25, 0
)
self.assertEqual(plain_header, CHACHA20_CLIENT_PLAIN_HEADER)
self.assertEqual(plain_payload, CHACHA20_CLIENT_PLAIN_PAYLOAD)
self.assertEqual(packet_number, CHACHA20_CLIENT_PACKET_NUMBER)
def test_encrypt_short_server(self):
pair = CryptoPair()
pair.send.setup(
cipher_suite=INITIAL_CIPHER_SUITE,
secret=binascii.unhexlify(
"310281977cb8c1c1c1212d784b2d29e5a6489e23de848d370a5a2f9537f3a100"
),
version=PROTOCOL_VERSION,
)
packet = pair.encrypt_packet(
SHORT_SERVER_PLAIN_HEADER,
SHORT_SERVER_PLAIN_PAYLOAD,
SHORT_SERVER_PACKET_NUMBER,
)
self.assertEqual(packet, SHORT_SERVER_ENCRYPTED_PACKET)
def test_receive_datagram_wrong_version(self):
client = create_standalone_client(self)
builder = QuicPacketBuilder(
host_cid=client._peer_cid,
is_client=False,
peer_cid=client.host_cid,
version=0xFF000011, # DRAFT_16
)
crypto = CryptoPair()
crypto.setup_initial(client._peer_cid, is_client=False, version=client._version)
builder.start_packet(PACKET_TYPE_INITIAL, crypto)
buf = builder.start_frame(QuicFrameType.PADDING)
buf.push_bytes(bytes(builder.remaining_flight_space))
for datagram in builder.flush()[0]:
client.receive_datagram(datagram, SERVER_ADDR, now=time.time())
self.assertEqual(drop(client), 0)
def test_decrypt_no_key(self):
pair = CryptoPair()
with self.assertRaises(CryptoError):
pair.decrypt_packet(LONG_SERVER_ENCRYPTED_PACKET, 18, 0)
def create_crypto():
crypto = CryptoPair()
crypto.setup_initial(bytes(8), is_client=True, version=QuicProtocolVersion.DRAFT_24)
return crypto
def create_crypto(self, is_client):
pair = CryptoPair()
pair.setup_initial(
cid=binascii.unhexlify("8394c8f03e515708"),
is_client=is_client,
version=PROTOCOL_VERSION,
)
return pair