(* Proverif returns:
  Internal error: File "reduction_bipro.ml", line 2328, characters 11-17: Assertion failed
*)

free cp : channel. (* Public channel *)
free ja1 : bitstring. (* Values for the two choices *)
free secKey : bitstring [private].

(* Encryption scheme *)
fun pube(bitstring) : bitstring. (* The function to derive a public key from the private key *)
fun aenc(bitstring,bitstring) : bitstring. (* Encryption *)
reduc  forall Sk:bitstring , M:bitstring, R:bitstring;  adec(Sk,aenc(pube(Sk),M)) = M. (* Decryption *)

(* Main process  *)
process
    out(cp, aenc(pube(secKey), choice[ja1,ja1]));
    in(cp, y:bitstring);
    phase 1;
    out(cp, y);
    in(cp, c1:bitstring);
    in(cp, c2:bitstring);
    let v1 = adec(secKey, choice[c2,c1]) in
    0

(* EXPECTPV
RESULT Observational equivalence cannot be proved.
0.012s (user 0.008s + system 0.004s), max rss 9012K
END *)
