Section PRF_Encryption_concrete.
Variable eta : nat.
Definition Key := Bvector eta.
Definition Plaintext := Bvector eta.
Definition Ciphertext := Bvector eta * Bvector eta.
Variable f : Bvector eta -> Bvector eta -> Bvector eta.
Definition PRFE_KeyGen :=
{0, 1} ^ eta.
Definition PRFE_Encrypt (k : Key )(p : Plaintext) :=
r <-$ {0, 1} ^ eta;
pad <- f k r;
ret (r, p xor pad).
Definition PRFE_Decrypt (k : Key)(c : Ciphertext) :=
r <- fst c;
pad <- f k r;
(snd c) xor pad.

Theorem PRF_Encrypt_correct :
forall k p c,
In c (getSupport (PRFE_Encrypt k p)) ->
PRFE_Decrypt k c = p.