@@ -563,35 +563,6 @@ \subsection{Monitoring for information flow}
563563
564564
565565
566- \paragraph {Implicit flows and type labels }
567- Type labels of values created in branches are also tainted by the pc-label.
568- Operations that check the type label, e.g., arithmetics or pattern
569- matching, use the information in the type label to appropriately taint the blocking level.
570- the value.
571- \ begin{lstlisting}
572- (* ifc_type_labels.trp *)
573- let val x = 100 raisedTo {alice}
574- val y = 200 raisedTo {bob}
575- val z = 300 raisedTo {charlie}
576- val a = let pini authority
577- val a = if y > 10 then z else "not an integer"
578- in a
579- end
580- val _ = printWithLabels a
581- val _ = debugpc()
582- val w = a + x
583- val _ = printWithLabels w
584- in debugpc()
585- end
586- \end {lstlisting }
587- \begin {verbatim }
588- 300@{charlie,bob}%{bob}
589- PID:2dfdc81f-1027-40e2-810c-11fadb2dd40f@{}%{} PC:{} BL:{}
590- 400@{charlie,bob,alice}%{}
591- PID:2dfdc81f-1027-40e2-810c-11fadb2dd40f@{}%{} PC:{} BL:{bob}
592- \end {verbatim }
593-
594-
595566\paragraph {Implementation note }
596567\troupelang \ implements information flow enforcement via inlining.
597568
@@ -708,6 +679,37 @@ \subsubsection{Declassification of the blocking level}
708679\code {pinipop} dynamically scope the part of the execution for which the blocking label is declassified.
709680
710681
682+
683+ \paragraph {Implicit flows and type labels }
684+ Type labels of values created in branches are also tainted by the pc-label.
685+ Operations that check the type label, e.g., arithmetics or pattern
686+ matching, use the information in the type label to appropriately taint the blocking level.
687+ the value.
688+ \ begin{lstlisting}
689+ (* ifc_type_labels.trp *)
690+ let val x = 100 raisedTo {alice}
691+ val y = 200 raisedTo {bob}
692+ val z = 300 raisedTo {charlie}
693+ val a = let pini authority
694+ val a = if y > 10 then z else "not an integer"
695+ in a
696+ end
697+ val _ = printWithLabels a
698+ val _ = debugpc()
699+ val w = a + x
700+ val _ = printWithLabels w
701+ in debugpc()
702+ end
703+ \end {lstlisting }
704+ \begin {verbatim }
705+ 300@{charlie,bob}%{bob}
706+ PID:2dfdc81f-1027-40e2-810c-11fadb2dd40f@{}%{} PC:{} BL:{}
707+ 400@{charlie,bob,alice}%{}
708+ PID:2dfdc81f-1027-40e2-810c-11fadb2dd40f@{}%{} PC:{} BL:{bob}
709+ \end {verbatim }
710+
711+
712+
711713\subsection {Information flow control with I/O primitives }
712714This section may be omitted upon first read as it has a number of information flow subtleties that
713715can be omitted when first starting to use the system.
0 commit comments