@@ -563,35 +563,6 @@ \subsection{Monitoring for information flow}
563
563
564
564
565
565
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
-
595
566
\paragraph {Implementation note }
596
567
\troupelang \ implements information flow enforcement via inlining.
597
568
@@ -708,6 +679,37 @@ \subsubsection{Declassification of the blocking level}
708
679
\code {pinipop} dynamically scope the part of the execution for which the blocking label is declassified.
709
680
710
681
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
+
711
713
\subsection {Information flow control with I/O primitives }
712
714
This section may be omitted upon first read as it has a number of information flow subtleties that
713
715
can be omitted when first starting to use the system.
0 commit comments