def test_crypto_container_increments_sequence_number(self): client_seq_num = self.tls_ctx.crypto.session.key.client.seq_num server_seq_num = self.tls_ctx.crypto.session.key.server.seq_num tlsc.CryptoContainer(self.tls_ctx) client_seq_num += 1 self.assertEqual(self.tls_ctx.crypto.session.key.client.seq_num, client_seq_num) self.assertEqual(self.tls_ctx.crypto.session.key.server.seq_num, server_seq_num) self.tls_ctx.client = False tlsc.CryptoContainer(self.tls_ctx) self.assertEqual(self.tls_ctx.crypto.session.key.client.seq_num, client_seq_num) self.assertEqual(self.tls_ctx.crypto.session.key.server.seq_num, server_seq_num + 1)
def test_generated_mac_can_be_overiden(self): data = b"C" * 102 self.tls_ctx.client = False crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) initial_mac = crypto_container.mac crypto_container.hmac(data_len=1024) self.assertNotEqual(initial_mac, crypto_container.mac)
def test_tls_1_1_and_above_has_a_random_explicit_iv_with_block_cipher(self): data = b"C" * 102 self._do_kex(tls.TLSVersion.TLS_1_1) crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) self.assertNotEqual(crypto_container.explicit_iv, "") self.assertEqual(len(crypto_container.explicit_iv), AES.block_size) self.assertTrue(str(crypto_container).startswith(crypto_container.explicit_iv))
def test_crypto_container_returns_ciphertext(self): data = b"C" * 102 self.tls_ctx.client = False crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) cleartext = str(crypto_container) ciphertext = crypto_container.encrypt() self.assertEqual(cleartext, self.tls_ctx.crypto.server.dec.decrypt(ciphertext))
def test_crypto_container_str_returns_cipher_payload(self): data = b"abcde" crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) padding = crypto_container.padding self.assertEqual( "%s%s%s%s" % (data, crypto_container.mac, padding, chr(len(padding))), str(crypto_container))
def test_tls_1_0_and_below_has_no_explicit_iv(self): data = b"C" * 102 crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) self.assertEqual(crypto_container.explicit_iv, "") self.assertTrue(str(crypto_container).startswith(data))
def test_cipher_payload_is_block_size_aligned(self): data = b"A" * 1025 crypto_container = tlsc.CryptoContainer(self.tls_ctx, data) self.assertTrue(len(crypto_container) % AES.block_size == 0)