author | paulson |
Wed, 11 Apr 2001 11:53:54 +0200 | |
changeset 11250 | c8bbf4c4bc2d |
child 16417 | 9bc16273c2d4 |
permissions | -rw-r--r-- |
paulson@11250 | 1 |
(* Title: HOL/Auth/Public |
paulson@11250 | 2 |
ID: $Id$ |
paulson@11250 | 3 |
Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
paulson@11250 | 4 |
Copyright 1996 University of Cambridge |
paulson@11250 | 5 |
|
paulson@11250 | 6 |
Theory of Public Keys (common to all public-key protocols) |
paulson@11250 | 7 |
|
paulson@11250 | 8 |
Private and public keys; initial states of agents |
paulson@11250 | 9 |
*) |
paulson@11250 | 10 |
|
paulson@11250 | 11 |
theory Public = Event |
paulson@11250 | 12 |
files ("Public_lemmas.ML"): |
paulson@11250 | 13 |
|
paulson@11250 | 14 |
consts |
paulson@11250 | 15 |
pubK :: "agent => key" |
paulson@11250 | 16 |
|
paulson@11250 | 17 |
syntax |
paulson@11250 | 18 |
priK :: "agent => key" |
paulson@11250 | 19 |
|
paulson@11250 | 20 |
translations (*BEWARE! expressions like (inj priK) will NOT work!*) |
paulson@11250 | 21 |
"priK x" == "invKey(pubK x)" |
paulson@11250 | 22 |
|
paulson@11250 | 23 |
primrec |
paulson@11250 | 24 |
(*Agents know their private key and all public keys*) |
paulson@11250 | 25 |
initState_Server: "initState Server = |
paulson@11250 | 26 |
insert (Key (priK Server)) (Key ` range pubK)" |
paulson@11250 | 27 |
initState_Friend: "initState (Friend i) = |
paulson@11250 | 28 |
insert (Key (priK (Friend i))) (Key ` range pubK)" |
paulson@11250 | 29 |
initState_Spy: "initState Spy = |
paulson@11250 | 30 |
(Key`invKey`pubK`bad) Un (Key ` range pubK)" |
paulson@11250 | 31 |
|
paulson@11250 | 32 |
|
paulson@11250 | 33 |
axioms |
paulson@11250 | 34 |
(*Public keys are disjoint, and never clash with private keys*) |
paulson@11250 | 35 |
inj_pubK: "inj pubK" |
paulson@11250 | 36 |
priK_neq_pubK: "priK A ~= pubK B" |
paulson@11250 | 37 |
|
paulson@11250 | 38 |
use "Public_lemmas.ML" |
paulson@11250 | 39 |
|
paulson@11250 | 40 |
(*Specialized methods*) |
paulson@11250 | 41 |
|
paulson@11250 | 42 |
method_setup possibility = {* |
paulson@11250 | 43 |
Method.no_args (Method.METHOD (fn facts => possibility_tac)) *} |
paulson@11250 | 44 |
"for proving possibility theorems" |
paulson@11250 | 45 |
|
paulson@11250 | 46 |
end |