https://github.com/EasyCrypt/easycrypt
Raw File
Tip revision: f27fcaaaaf1690c77c1d306b4b3d137435475588 authored by Pierre-Yves Strub on 16 February 2019, 06:08:09 UTC
add a "rigid" meta-tactic for forcing rigid unification
Tip revision: f27fcaa
CCA1.eca
(* --------------------------------------------------------------------
 * Copyright (c) - 2012--2016 - IMDEA Software Institute
 * Copyright (c) - 2012--2018 - Inria
 * Copyright (c) - 2012--2018 - Ecole Polytechnique
 *
 * Distributed under the terms of the CeCILL-B-V1 license
 * -------------------------------------------------------------------- *)

require import Bool Core.
require (*--*) DBool NewSKE.

clone include NewSKE.

module type CCA1 = {
  proc enc(p: plain): cipher option
  proc dec(c: cipher): plain option
}.

module type Adv_CCA1 (O : CCA1) = {
  proc choose(): plain * plain
  proc guess(c: cipher): bool  { O.enc }
}.

module IND_CCA1 ( S : SKE, A : Adv_CCA1) = {
  module O = Wrap(S)
  module A = A(O)

  proc main(): bool = {
    var b, b', c, p0, p1, p;

    O.init();
    (p0,p1) = A.choose();
    b = ${0,1};
    p = b ? p1 : p0; (* FIXME: need to check whether plaintexts are both valid or both invalid *)
    c = O.enc(p);
    b' = A.guess(oget c);
    return b = b';
  }
}.
back to top