def test_encdec_one(self):
        """Test using values from RFC8439 section 2.3.2."""

        key = bytes(range(32))
        nonce = b"\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00"
        ##nonce = b"\x00\x00\x00\x09\x00\x00\x00\x4a\x00\x00\x00\x00"
        counter = 1
        plain_text = (b"Ladies and Gentlemen of the class of '99: If I could"
                      b" offer you only one tip for the future,"
                      b" sunscreen would be it.")

        cipher_text = encrypt(plain_text,
                              key,
                              self.algo_name,
                              nonce=nonce,
                              counter=counter)

        expected_cipher_text = (
            b"\x6e\x2e\x35\x9a\x25\x68\xf9\x80\x41\xba\x07\x28\xdd\x0d\x69\x81"
            b"\xe9\x7e\x7a\xec\x1d\x43\x60\xc2\x0a\x27\xaf\xcc\xfd\x9f\xae\x0b"
            b"\xf9\x1b\x65\xc5\x52\x47\x33\xab\x8f\x59\x3d\xab\xcd\x62\xb3\x57"
            b"\x16\x39\xd6\x24\xe6\x51\x52\xab\x8f\x53\x0c\x35\x9f\x08\x61\xd8"
            b"\x07\xca\x0d\xbf\x50\x0d\x6a\x61\x56\xa3\x8e\x08\x8a\x22\xb6\x5e"
            b"\x52\xbc\x51\x4d\x16\xcc\xf8\x06\x81\x8c\xe9\x1a\xb7\x79\x37\x36"
            b"\x5a\xf9\x0b\xbf\x74\xa3\x5b\xe6\xb4\x0b\x8e\xed\xf2\x78\x5e\x42"
            b"\x87\x4d")

        self.assertEqual(cipher_text,
                         expected_cipher_text,
                         msg="Checking cipher text matches expected value")

        decrypted_text = decrypt(cipher_text,
                                 key,
                                 self.algo_name,
                                 nonce=nonce,
                                 counter=counter)

        self.assertEqual(
            plain_text,
            decrypted_text,
            msg=
            "Checking decryption of encrypted text gives original plain text")
    def test_encdec_two(self):
        """Test using values approximating that from RPS game."""

        key = b"TPSecret" * 4
        nonce = bytearray(range(12, 0, -1))
        plain_text = b"rock"

        cipher_text = encrypt(plain_text, key, self.algo_name, nonce=nonce)

        decrypted_text = decrypt(cipher_text, key, self.algo_name, nonce=nonce)

        ### It is possible for these to match but very unlikely in the general case
        self.assertNotEqual(plain_text,
                            cipher_text,
                            msg="Check cipher_text is not plain_text")
        self.assertEqual(
            plain_text,
            decrypted_text,
            msg=
            "Checking decryption of encrypted text gives original plain text")
                if (cipher_ad is None and isinstance(opponent_msgs[msg_idx][0],
                                                     RpsEncDataAdvertisement)):
                    cipher_ad = opponent_msgs[msg_idx][0]
                    cipher_bytes = cipher_ad.enc_data
                    cipher_round = cipher_ad.round_no
                elif (key_ad is None and isinstance(opponent_msgs[msg_idx][0],
                                                    RpsKeyDataAdvertisement)):
                    key_ad = opponent_msgs[msg_idx][0]
                    key_bytes = key_ad.key_data
                    key_round = key_ad.round_no

            if cipher_ad and key_ad:
                if round_no == cipher_round == key_round:
                    key = enlargeKey(key_bytes, KEY_ENLARGE)
                    plain_bytes = decrypt(cipher_bytes,
                                          key,
                                          CRYPTO_ALGO,
                                          nonce=static_nonce)
                    opponent_choice = strUnpad(plain_bytes)
                else:
                    print("Received wrong round for {:d} {:d}: {:d} {:d}",
                          opponent_name, round_no, cipher_round, key_round)
            else:
                print(
                    "Missing packets: RpsEncDataAdvertisement "
                    "and RpsKeyDataAdvertisement:", cipher_ad, key_ad)
            player_choices.append(opponent_choice)

        ### Free up some memory by deleting any data that's no longer needed
        del allmsg_by_addr
        gc.collect()  ### TODO - try removing this
        d_print(2, "GC after comms", gc.mem_free())