src/Pure/General/secure.ML
author wenzelm
Sun, 13 Mar 2016 12:44:24 +0100
changeset 62612 cf48f41a9278
parent 62508 d0b68218ea55
permissions -rw-r--r--
clarified env;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62508
d0b68218ea55 discontinued RAW session: bootstrap directly from isabelle_process RAW_ML_SYSTEM;
wenzelm
parents: 62493
diff changeset
     1
(*  Title:      Pure/General/secure.ML
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     3
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     4
Secure critical operations.
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     5
*)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     6
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     7
signature SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     8
sig
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
     9
  val set_secure: unit -> unit
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    10
  val is_secure: unit -> bool
62493
dd154240a53c load secure.ML earlier;
wenzelm
parents: 62356
diff changeset
    11
  val deny: string -> unit
dd154240a53c load secure.ML earlier;
wenzelm
parents: 62356
diff changeset
    12
  val deny_ml: unit -> unit
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    13
end;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    14
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    15
structure Secure: SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    16
struct
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    17
32738
15bb09ca0378 explicit indication of Unsynchronized.ref;
wenzelm
parents: 31473
diff changeset
    18
val secure = Unsynchronized.ref false;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    19
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
    20
fun set_secure () = secure := true;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    21
fun is_secure () = ! secure;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    22
62493
dd154240a53c load secure.ML earlier;
wenzelm
parents: 62356
diff changeset
    23
fun deny msg = if is_secure () then error msg else ();
20992
05c3703cc6c5 added execute/system;
wenzelm
parents: 20977
diff changeset
    24
62493
dd154240a53c load secure.ML earlier;
wenzelm
parents: 62356
diff changeset
    25
fun deny_ml () = deny "Cannot evaluate ML source in secure mode";
23922
707639e9497d marked some CRITICAL sections (for multithreading);
wenzelm
parents: 22567
diff changeset
    26
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    27
end;