def test_decrypt_at_time(self, backend):
     f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend)
     f = MultiFernet([f1])
     pt = b"encrypt me"
     token = f.encrypt_at_time(pt, current_time=100)
     assert f.decrypt_at_time(token, ttl=1, current_time=100) == pt
     with pytest.raises(InvalidToken):
         f.decrypt_at_time(token, ttl=1, current_time=102)
     with pytest.raises(ValueError):
         f.decrypt_at_time(token, ttl=None, current_time=100)
    def test_rotate_preserves_timestamp(self, backend, monkeypatch):
        f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend)
        f2 = Fernet(base64.urlsafe_b64encode(b"\x01" * 32), backend=backend)

        mf1 = MultiFernet([f1])
        mf2 = MultiFernet([f2, f1])

        plaintext = b"abc"
        original_time = int(time.time()) - 5 * 60
        mf1_ciphertext = mf1.encrypt_at_time(plaintext, original_time)

        rotated_time, _ = Fernet._get_unverified_token_data(
            mf2.rotate(mf1_ciphertext))

        assert int(time.time()) != rotated_time
        assert original_time == rotated_time