lio-0.11.2.0: examples/dclabel.hs
module Main where
import LIO
import LIO.TCB
import LIO.DCLabel
-- | Simple secrecy component example
s :: CNF
s = ("Alice" \/ "Bob") /\ "Carla"
-- | Simple integrity component example
i :: CNF
i = "Alice" /\ "Carla"
-- | Simple label
l1 :: DCLabel
l1 = s %% i
-- | Simple label
l2 :: DCLabel
l2 = "Djon" %% "Alice"
-- | Creating privilege using constructor from TCB
p :: DCPriv
p = PrivTCB $ "Alice" /\ "Carla"
main = do
putStrLn $ "Label 1: " ++ show l1
putStrLn $ "Label 2: " ++ show l2
putStrLn $ "Join of labels: " ++ show (l1 `lub` l2)
putStrLn $ "Meet of labels: " ++ show (l1 `glb` l2)
putStrLn $ "Privileges: " ++ show p
putStrLn $ "Label 1 flows to Label 2? " ++ (show $ canFlowTo l1 l2)
putStrLn $ "Label 1 flows to Label 2 given privileges? " ++
(show $ canFlowToP p l1 l2)
{-
Output:
ghci> main
Label 1: "Carla" /\ ("Alice" \/ "Bob") %% "Alice" /\ "Carla"
Label 2: "Djon" %% "Alice"
Join of labels: "Carla" /\ "Djon" /\ ("Alice" \/ "Bob") %% "Alice"
Meet of labels: ("Carla" \/ "Djon") /\ ("Alice" \/ "Bob" \/ "Djon") %% "Alice" /\ "Carla"
Privileges: PrivTCB ("Alice" /\ "Carla")
Label 1 flows to Label 2? False
Label 1 flows to Label 2 given privileges? True
-}