Verification: close

Require ModelProperties.

Require AuxiliaryLemmas.

Section closeIsSecure.




Lemma ClosePSS:
 (s,t:SFSstate; u:SUBJECT)
  (FuncPre5 s)
  ->(SecureState s)->(TransFunc u s Close t)->(SecureState t).
Intros s t Sub FP5 SS TF; Inversion TF.
Inversion H.
Unfold SecureState.
BreakSS.
Split.
Unfold DACSecureState; Intros; Simpl.
Elim (OBJeq_dec o o0); Intro y0.
Rewrite <- y0.
Elim (SUBeq_dec Sub u0); Intro y1.
Rewrite <- y1.
Cut Cases (fsecmat (close_sm s Sub o) o) of
      None => True
    | (Some y) =>
       ~(set_In Sub (ActReaders y))/\~(set_In Sub (ActWriters y))
    end.
Elim (fsecmat (close_sm s Sub o) o).
Intros; Split; Intro; Tauto.

Auto.

Apply Close_smCorr; Auto.

Cut Cases (fsecmat (close_sm s Sub o) o) (fsecmat (secmat s) o) of
      _ None => False
    | None (Some z) => True
    | (Some y) (Some z) =>
       ((set_In u0 (ActReaders y))->(set_In u0 (ActReaders z)))
       /\((set_In u0 (ActWriters y))->(set_In u0 (ActWriters z)))
    end.
Cut Cases (fsecmat (secmat s) o) of
      None => True
    | (Some y) =>
       ((set_In u0 (ActReaders y))->(PreDACRead s u0 o))
       /\((set_In u0 (ActWriters y))->(PreDACWrite s u0 o))
    end.
Unfold 3 4 close_sm PreDACRead PreDACWrite; Simpl;
  Elim (fsecmat (secmat s) o); Elim (fsecmat (close_sm s Sub o) o).
Intros.
Elim H6; Elim H5; Intros.
Split; Intro.
Apply H7; Apply H9; Auto.

Apply H8; Apply H10; Auto.

Auto.

Tauto.

Auto.

Unfold DACSecureState in DAC; Apply DAC.

Apply Close_smCorr2; Auto.

Replace (fsecmat (close_sm s Sub o) o0) with (fsecmat (secmat s) o0).
Unfold close_sm PreDACRead PreDACWrite; Simpl;
  Unfold DACSecureState PreDACRead PreDACWrite in DAC; Apply DAC.

Auto.

Unfold SimpleSecurity; Intros; Simpl.
Elim (OBJeq_dec o o0); Intro y0.
Rewrite <- y0.
Cut Cases (fsecmat (close_sm s Sub o) o) (fsecmat (secmat s) o) of
      _ None => False
    | None (Some z) => True
    | (Some y) (Some z) =>
       ((set_In u0 (ActReaders y))->(set_In u0 (ActReaders z)))
       /\((set_In u0 (ActWriters y))->(set_In u0 (ActWriters z)))
    end.
Cut Cases
      (fsecmat (secmat s) o)
    (fOSC (objectSC s) o)
    (fSSC (subjectSC s) u0)
    of
      None _ _ => True
    | _ None _ => True
    | _ _ None => True
    | (Some x) (Some y) (Some z) =>
       (set_In u0 (ActReaders x))\/(set_In u0 (ActWriters x))
       ->(le_sc y z)
    end.
Elim (fsecmat (secmat s) o); Elim (fsecmat (close_sm s Sub o) o);
  Elim (fOSC (objectSC s) o); Elim (fSSC (subjectSC s) u0);
  Contradiction Orelse Trivial.
Tauto.

Unfold SimpleSecurity in MAC; Apply MAC.

Apply Close_smCorr2; Auto.

Replace (fsecmat (close_sm s Sub o) o0) with (fsecmat (secmat s) o0).
Unfold SimpleSecurity in MAC; Apply MAC.

Auto.

Qed.




Lemma ClosePSP:
 (s,t:SFSstate; u:SUBJECT)
  (FuncPre5 s)
  ->(StarProperty s)->(TransFunc u s Close t)->(StarProperty t).
Intros s t Sub FP5 SP TF; Inversion TF.
Inversion H.
Unfold StarProperty; Simpl; Intros.
Cut Cases
      (fsecmat (secmat s) o1)
    (fsecmat (secmat s) o2)
    (fOSC (objectSC s) o2)
    (fOSC (objectSC s) o1)
    of
      None _ _ _ => True
    | _ None _ _ => True
    | _ _ None _ => True
    | _ _ _ None => True
    | (Some w) (Some x) (Some y) (Some z) =>
       (set_In u0 (ActWriters w))
       ->(set_In u0 (ActReaders x))
       ->(le_sc y z)
    end.
Cut Cases (fsecmat (close_sm s Sub o) o) (fsecmat (secmat s) o) of
      _ None => False
    | None (Some z) => True
    | (Some y) (Some z) =>
       ((set_In u0 (ActReaders y))->(set_In u0 (ActReaders z)))
       /\((set_In u0 (ActWriters y))->(set_In u0 (ActWriters z)))
    end.
Elim (OBJeq_dec o o1); Elim (OBJeq_dec o o2); Intros EQ2 EQ1.
Rewrite <- EQ1; Rewrite <- EQ2.
Elim (fsecmat (secmat s) o); Elim (fOSC (objectSC s) o);
  Elim (fsecmat (close_sm s Sub o) o); Intros; Auto.

Replace (fsecmat (close_sm s Sub o) o2) with (fsecmat (secmat s) o2).
Rewrite <- EQ1.
Elim (fsecmat (secmat s) o2); Elim (fOSC (objectSC s) o);
  Elim (fOSC (objectSC s) o2); Elim (fsecmat (secmat s) o);
  Elim (fsecmat (close_sm s Sub o) o); Intros;
  Contradiction Orelse Auto.
Tauto.

Auto.

Replace (fsecmat (close_sm s Sub o) o1) with (fsecmat (secmat s) o1).
Rewrite <- EQ2.
Elim (fsecmat (secmat s) o1); Elim (fOSC (objectSC s) o);
  Elim (fOSC (objectSC s) o1); Elim (fsecmat (secmat s) o);
  Elim (fsecmat (close_sm s Sub o) o); Intros;
  Contradiction Orelse Auto.
Tauto.

Auto.

Replace (fsecmat (close_sm s Sub o) o2) with (fsecmat (secmat s) o2).
Replace (fsecmat (close_sm s Sub o) o1) with (fsecmat (secmat s) o1).
Auto.

Auto.

Auto.

Apply Close_smCorr2; Auto.

Unfold StarProperty in SP; Apply SP.

Qed.




Lemma ClosePCP:
 (s,t:SFSstate)(PreservesControlProp s Close t).
Intros; Unfold PreservesControlProp; Intros Sub TF; Inversion TF;
  Unfold ControlProperty.
Inversion H.
Split.
Intros.
Split.
Intros;
  Absurd (DACCtrlAttrHaveChanged s
           (mkSFS (groups s) (primaryGrp s) (subjectSC s) (AllGrp s)
             (RootGrp s) (SecAdmGrp s) (objectSC s) (acl s)
             (close_sm s Sub o) (files s) (directories s)) o0);
  Auto.

Intros;
  Absurd (MACObjCtrlAttrHaveChanged s
           (mkSFS (groups s) (primaryGrp s) (subjectSC s) (AllGrp s)
             (RootGrp s) (SecAdmGrp s) (objectSC s) (acl s)
             (close_sm s Sub o) (files s) (directories s)) o0);
  Auto.

Intros;
  Absurd (MACSubCtrlAttrHaveChanged s
           (mkSFS (groups s) (primaryGrp s) (subjectSC s) (AllGrp s)
             (RootGrp s) (SecAdmGrp s) (objectSC s) (acl s)
             (close_sm s Sub o) (files s) (directories s)) u0);
  Auto.

Qed.


End closeIsSecure.

Hints Resolve ClosePSS ClosePSP ClosePCP.


Index
This page has been generated by coqdoc