cpsa-3.6.0: doc/examples/envelope.xhtml
<?xml version="1.0"?>
<!-- CPSA 3.6.0 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Envelope Protocol</title>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<style>
svg.diagram { border-width: 1px; border-style: solid }
</style>
</head>
<body>
<pre>(herald "Envelope Protocol" (bound 20))
(comment "CPSA 3.6.0")
(comment "All input read from envelope.scm")
(comment "Strand count bounded at 20")</pre>
<p id="top">Trees: <a href="#t0">0</a> <a href="#t59">59</a>.</p>
<p id="t0">Tree <a href="#top">0</a>.</p>
<div>
<svg
class='diagram' width='978.480pt' height='1729.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 978.480 1729.920' font-size='12.000'>
<text
x='688.920' y='1676.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k41", "_self")'>41</text>
<line
x1='639.000' y1='1689.960' x2='688.920' y2='1689.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1676.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k37", "_self")'>37</text>
<line
x1='589.080' y1='1652.460' x2='639.000' y2='1689.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1601.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k36", "_self")'>36</text>
<line
x1='589.080' y1='1652.460' x2='639.000' y2='1614.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1638.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k32", "_self")'>32</text>
<line
x1='539.160' y1='1539.960' x2='589.080' y2='1652.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1526.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k31", "_self")'>31</text>
<line
x1='539.160' y1='1539.960' x2='589.080' y2='1539.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='688.920' y='1451.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k40", "_self")'>40</text>
<line
x1='639.000' y1='1464.960' x2='688.920' y2='1464.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1451.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k35", "_self")'>35</text>
<line
x1='589.080' y1='1427.460' x2='639.000' y2='1464.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1376.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k34", "_self")'>34</text>
<line
x1='589.080' y1='1427.460' x2='639.000' y2='1389.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1413.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k30", "_self")'>30</text>
<line
x1='539.160' y1='1539.960' x2='589.080' y2='1427.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='1526.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k26", "_self")'>26</text>
<line
x1='489.240' y1='1502.460' x2='539.160' y2='1539.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1301.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k29", "_self")'>29</text>
<line
x1='539.160' y1='1314.960' x2='589.080' y2='1314.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='1301.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k25", "_self")'>25</text>
<line
x1='489.240' y1='1502.460' x2='539.160' y2='1314.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='1488.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k20", "_self")'>20</text>
<line
x1='439.320' y1='1464.960' x2='489.240' y2='1502.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1226.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k28", "_self")'>28</text>
<line
x1='539.160' y1='1239.960' x2='589.080' y2='1239.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='1226.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k24", "_self")'>24</text>
<line
x1='489.240' y1='1239.960' x2='539.160' y2='1239.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='1226.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k19", "_self")'>19</text>
<line
x1='439.320' y1='1464.960' x2='489.240' y2='1239.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='1451.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k14", "_self")'>14</text>
<line
x1='389.400' y1='1014.960' x2='439.320' y2='1464.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='1151.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k23", "_self")'>23</text>
<line
x1='489.240' y1='1164.960' x2='539.160' y2='1164.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='1151.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k18", "_self")'>18</text>
<line
x1='439.320' y1='789.960' x2='489.240' y2='1164.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='1076.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k17", "_self")'>17</text>
<line
x1='439.320' y1='789.960' x2='489.240' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='1001.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k22", "_self")'>22</text>
<line
x1='489.240' y1='714.960' x2='539.160' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='938.520' y='926.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k58", "_self")'>58</text>
<line
x1='888.600' y1='939.960' x2='938.520' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='888.600' y='926.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k56", "_self")'>56</text>
<line
x1='838.680' y1='902.460' x2='888.600' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='888.600' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k55", "_self")'>55</text>
<line
x1='838.680' y1='902.460' x2='888.600' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='838.680' y='888.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k52", "_self")'>52</text>
<line
x1='788.760' y1='789.960' x2='838.680' y2='902.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='838.680' y='776.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k51", "_self")'>51</text>
<line
x1='788.760' y1='789.960' x2='838.680' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='938.520' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k57", "_self")'>57</text>
<line
x1='888.600' y1='714.960' x2='938.520' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='888.600' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k54", "_self")'>54</text>
<line
x1='838.680' y1='677.460' x2='888.600' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='888.600' y='626.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k53", "_self")'>53</text>
<line
x1='838.680' y1='677.460' x2='888.600' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='838.680' y='663.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k50", "_self")'>50</text>
<line
x1='788.760' y1='789.960' x2='838.680' y2='677.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='788.760' y='776.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k47", "_self")'>47</text>
<line
x1='738.840' y1='752.460' x2='788.760' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='838.680' y='551.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k49", "_self")'>49</text>
<line
x1='788.760' y1='564.960' x2='838.680' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='788.760' y='551.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k46", "_self")'>46</text>
<line
x1='738.840' y1='752.460' x2='788.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='738.840' y='738.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k44", "_self")'>44</text>
<line
x1='688.920' y1='714.960' x2='738.840' y2='752.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='838.680' y='476.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k48", "_self")'>48</text>
<line
x1='788.760' y1='489.960' x2='838.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='788.760' y='476.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k45", "_self")'>45</text>
<line
x1='738.840' y1='489.960' x2='788.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='738.840' y='476.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k43", "_self")'>43</text>
<line
x1='688.920' y1='714.960' x2='738.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='688.920' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k39", "_self")'>39</text>
<line
x1='639.000' y1='677.460' x2='688.920' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='738.840' y='401.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k42", "_self")'>42</text>
<line
x1='688.920' y1='414.960' x2='738.840' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='688.920' y='401.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k38", "_self")'>38</text>
<line
x1='639.000' y1='677.460' x2='688.920' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='663.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k33", "_self")'>33</text>
<line
x1='589.080' y1='677.460' x2='639.000' y2='677.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='663.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k27", "_self")'>27</text>
<line
x1='539.160' y1='677.460' x2='589.080' y2='677.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='663.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k21", "_self")'>21</text>
<line
x1='489.240' y1='714.960' x2='539.160' y2='677.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k16", "_self")'>16</text>
<line
x1='439.320' y1='789.960' x2='489.240' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='776.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k13", "_self")'>13</text>
<line
x1='389.400' y1='1014.960' x2='439.320' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='326.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k15", "_self")'>15</text>
<line
x1='439.320' y1='339.960' x2='489.240' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='326.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k12", "_self")'>12</text>
<line
x1='389.400' y1='1014.960' x2='439.320' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='389.400' y='1001.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k11", "_self")'>11</text>
<line
x1='339.480' y1='1014.960' x2='389.400' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='339.480' y='1001.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k10", "_self")'>10</text>
<line
x1='289.560' y1='1014.960' x2='339.480' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='289.560' y='1001.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k9", "_self")'>9</text>
<line
x1='239.640' y1='977.460' x2='289.560' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='289.560' y='251.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k8", "_self")'>8</text>
<line
x1='239.640' y1='977.460' x2='289.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='239.640' y='963.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k7", "_self")'>7</text>
<line
x1='189.720' y1='939.960' x2='239.640' y2='977.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k6", "_self")'>6</text>
<line
x1='189.720' y1='939.960' x2='239.640' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='189.720' y='926.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k5", "_self")'>5</text>
<line
x1='139.800' y1='902.460' x2='189.720' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k4", "_self")'>4</text>
<line
x1='139.800' y1='902.460' x2='189.720' y2='114.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='139.800' y='888.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k3", "_self")'>3</text>
<line
x1='89.880' y1='864.960' x2='139.800' y2='902.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k2", "_self")'>2</text>
<line
x1='89.880' y1='864.960' x2='139.800' y2='39.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='89.880' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k1", "_self")'>1</text>
<line
x1='39.960' y1='864.960' x2='89.880' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='39.960' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k0", "_self")'>0</text>
</svg></div>
<pre>(defprotocol envelope basic
(defrole tpm-power-on (vars) (trace (init "0")))
(defrole tpm-quote
(vars (nonce pcr mesg) (aik akey))
(trace (recv (cat "quote" nonce)) (obsv pcr)
(send (enc "quote" pcr nonce aik)))
(non-orig aik))
(defrole tpm-extend-enc
(vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
(trace (recv (cat "establish transport" tpmkey (enc esk tpmkey)))
(send (cat "establish transport" tne))
(recv
(cat "execute transport" (cat "extend" (enc value esk)) tno
"false"
(hash esk
(hash "execute transport" (hash "extend" (enc value esk)))
tne tno "false"))) (tran state (hash value state)))
(non-orig (invk tpmkey))
(uniq-orig tne))
(defrole tpm-create-key
(vars (k aik akey) (pcr mesg) (esk skey))
(trace (recv (enc "create key" pcr esk))
(send (enc "created" k pcr aik)))
(non-orig (invk k) aik esk)
(uniq-orig k))
(defrole tpm-decrypt
(vars (m pcr mesg) (k aik akey))
(trace (recv (cat "decrypt" (enc m k)))
(recv (enc "created" k pcr aik)) (obsv pcr) (send m))
(non-orig aik))
(defrole alice
(vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
(pcr mesg))
(trace (send (cat "establish transport" tpmkey (enc esk tpmkey)))
(recv (cat "establish transport" tne))
(send
(cat "execute transport" (cat "extend" (enc n esk)) tno "false"
(hash esk
(hash "execute transport" (hash "extend" (enc n esk))) tne
tno "false"))) (recv pcr)
(send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
(recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
(send (enc v k)))
(non-orig aik esk1 (invk tpmkey))
(uniq-orig v n tno esk)
(neq (tno n))))</pre>
<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
<div>
<svg
class='diagram' width='279.840pt' height='604.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 279.840 604.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='114.960' x2='39.960' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: red;' cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='189.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='139.920' y='39.960' style='text-anchor: middle;'>envelope 0</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(neq (tno n))
(non-orig esk1 aik (invk tpmkey))
(uniq-orig v n tno esk)
(label 0)
(unrealized (0 0) (1 0) (2 5))
(preskeleton)
(comment "Not a skeleton"))</pre>
<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Children: <a href="#k2">2</a> <a href="#k3">3</a>.</p>
<div>
<svg
class='diagram' width='279.840pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 279.840 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='564.960' x2='139.920' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: red;' cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='139.920' y='39.960' style='text-anchor: middle;'>envelope 1</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(precedes ((2 6) (0 0)) ((2 6) (1 0)))
(neq (tno n))
(non-orig esk1 aik (invk tpmkey))
(uniq-orig v n tno esk)
(label 1)
(parent 0)
(unrealized (0 0) (2 5))
(origs (esk (2 0)) (n (2 2)) (tno (2 2)) (v (2 6)))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='114.960' x2='339.840' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='564.960' x2='139.920' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 264.960 Q 291.078 374.718 242.316 484.477'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" k (hash "obtain" (hash n pcr)) aik) nonce aik-0)</title>
<circle cx='339.840' cy='264.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: orange;' cx='339.840' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" k (hash "obtain" (hash n pcr)) aik)) (aik aik-0))</title>
<text
x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960' style='text-anchor: middle;'>envelope 2</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" k (hash "obtain" (hash n pcr)) aik))
(aik aik-0))
(precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 2) (2 5)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk tpmkey))
(uniq-orig v n tno esk)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" k (hash "obtain" (hash n pcr)) aik) (2 5))
(label 2)
(parent 1)
(unrealized (0 0) (3 1))
(comment "empty cohort"))</pre>
<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k4">4</a> <a href="#k5">5</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='114.960' x2='339.840' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='564.960' x2='139.920' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 189.960 Q 290.808 337.114 241.777 484.268'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='189.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960' style='text-anchor: middle;'>envelope 3</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
(k aik tpmkey akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk-0) (k k) (aik aik))
(precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
(neq (tno n))
(non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-create-key 2)
(enc "created" k (hash "obtain" (hash n pcr)) aik) (2 5))
(label 3)
(parent 1)
(unrealized (0 0) (1 0) (3 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k3">3</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='114.960' x2='439.800' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='264.960' x2='339.840' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='564.960' x2='139.920' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 264.960 Q 392.820 264.960 345.840 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "create key" (hash "obtain" (hash n pcr)) esk-0) nonce aik-0)</title>
<circle cx='439.800' cy='264.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: orange;' cx='439.800' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 339.960 Q 291.524 412.464 243.207 484.967'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='339.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0)) (aik aik-0))</title>
<text
x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960' style='text-anchor: middle;'>envelope 4</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
(k aik tpmkey aik-0 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk-0) (k k) (aik aik))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
(aik aik-0))
(precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)) ((4 2) (3 0)))
(neq (tno n))
(non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "create key" (hash "obtain" (hash n pcr)) esk-0) (3 0))
(label 4)
(parent 3)
(unrealized (0 0) (1 0) (4 1))
(comment "empty cohort"))</pre>
<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k3">3</a>, Children: <a href="#k6">6</a> <a href="#k7">7</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='564.960' x2='139.920' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960' style='text-anchor: middle;'>envelope 5</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (displaced 4 2 alice 5)
(enc "create key" (hash "obtain" (hash n pcr)) esk-0) (3 0))
(label 5)
(parent 3)
(unrealized (0 0) (1 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k5">5</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='754.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 754.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='489.960' x2='439.800' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='639.960' x2='139.920' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 639.960 Q 292.860 602.460 145.920 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" v nonce aik-0)</title>
<circle cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: orange;' cx='439.800' cy='564.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='714.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr v) (aik aik-0))</title>
<text
x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960' style='text-anchor: middle;'>envelope 6</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 1)) ((3 1) (2 5))
((4 2) (1 0)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation nonce-test (added-strand tpm-quote 3) v (1 0) (enc v k))
(label 6)
(parent 5)
(unrealized (0 0) (4 1))
(comment "empty cohort"))</pre>
<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k5">5</a>, Children: <a href="#k8">8</a> <a href="#k9">9</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>pcr-0</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: red;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960' style='text-anchor: middle;'>envelope 7</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
((4 3) (1 0)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation nonce-test (added-strand tpm-decrypt 4) v (1 0) (enc v k))
(label 7)
(parent 5)
(unrealized (0 0) (4 1))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k7">7</a>.</p>
<div>
<svg
class='diagram' width='579.720pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 579.720 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='539.760' y1='414.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 539.760 564.960 Q 492.180 600.660 444.599 636.359'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" k pcr-0 aik-0) nonce aik-1)</title>
<circle cx='539.760' cy='564.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: orange;' cx='539.760' cy='489.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>pcr-0</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 339.840 489.960 Q 436.800 452.460 533.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))</title>
<text
x='539.760' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='289.860' y='39.960' style='text-anchor: middle;'>envelope 8</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 aik-1 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
((3 1) (5 1)) ((4 3) (1 0)) ((5 2) (4 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" k pcr-0 aik-0) (4 1))
(label 8)
(parent 7)
(unrealized (0 0) (5 1))
(comment "empty cohort"))</pre>
<p id="k9">Item <a href="#t0">9</a>, Parent: <a href="#k7">7</a>, Child: <a href="#k10">10</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n pcr))</title>
<circle style='fill: orange;' cx='439.800' cy='714.960' r='6.000'/>
</g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n pcr))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960' style='text-anchor: middle;'>envelope 9</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
(k k) (aik aik))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
((4 3) (1 0)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (displaced 5 3 tpm-create-key 2)
(enc "created" k pcr-0 aik-0) (4 1))
(label 9)
(parent 7)
(unrealized (0 0) (4 2))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k10">Item <a href="#t0">10</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k11">11</a>.</p>
<div>
<svg
class='diagram' width='579.720pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 579.720 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n pcr) (hash "obtain" (hash n pcr)))</title>
<circle style='fill: orange;' cx='539.760' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n pcr))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value "obtain") (state (hash n pcr)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n pcr))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='289.860' y='39.960'
style='text-anchor: middle;'>envelope 10</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 akey))
(deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n pcr))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)))
(leadsto ((5 3) (4 2)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tno tne-0 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "obtain" (hash n pcr)) (4 2))
(label 10)
(parent 9)
(unrealized (0 0) (5 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k11">Item <a href="#t0">11</a>, Parent: <a href="#k10">10</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a> <a href="#k14">14</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 11</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash n state) (5 3))
(label 11)
(parent 10)
(unrealized (0 0) (6 2))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k12">Item <a href="#t0">12</a>, Parent: <a href="#k11">11</a>, Child: <a href="#k15">15</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") nonce aik-0)</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g>
<title>(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 12</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false")) (aik aik-0))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3))
((7 2) (6 2)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (6 2))
(label 12)
(parent 11)
(unrealized (0 0) (6 2) (7 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k13">Item <a href="#t0">13</a>, Parent: <a href="#k11">11</a>, Children: <a href="#k16">16</a> <a href="#k17">17</a> <a href="#k18">18</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 13</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (displaced 7 2 alice 3)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (6 2))
(label 13)
(parent 11)
(unrealized (0 0) (6 0))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k14">Item <a href="#t0">14</a>, Parent: <a href="#k11">11</a>, Children: <a href="#k19">19</a> <a href="#k20">20</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='189.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: red;' cx='739.680' cy='189.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 686.700 189.960 733.680 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 14</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener
(cat esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false"))
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (6 2))
(label 14)
(parent 11)
(unrealized (0 0) (6 2) (7 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k15">Item <a href="#t0">15</a>, Parent: <a href="#k12">12</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='264.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='264.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (cat (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc esk-1 esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc esk-1 esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") nonce aik-0)</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 736.680 302.460 833.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 490.998 599.718 442.236 709.477'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.991 301.406 634.102 412.852'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value esk-1) (state (cat (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 15</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false")) (aik aik-0))
(defstrand tpm-extend-enc 4 (value esk-1)
(state
(cat (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2)
(tpmkey tpmkey-2))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (8 3))
((6 3) (5 3)) ((7 2) (6 2)) ((8 3) (7 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (7 1))
(label 15)
(parent 12)
(unrealized (0 0) (6 2) (8 3))
(comment "empty cohort"))</pre>
<p id="k16">Item <a href="#t0">16</a>, Parent: <a href="#k13">13</a>, Children: <a href="#k21">21</a> <a href="#k22">22</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 16</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (6 0)
(enc esk tpmkey))
(label 16)
(parent 13)
(unrealized (0 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k17">Item <a href="#t0">17</a>, Parent: <a href="#k13">13</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='1054.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 1054.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='264.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='714.960' x2='439.800' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='189.960' x2='239.880' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='939.960' x2='139.920' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 442.800 302.460 245.880 339.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 490.553 674.561 441.345 859.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 939.960 Q 292.860 902.460 145.920 939.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='939.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
<path
d='M 339.840 639.960 Q 292.860 639.960 245.880 639.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 714.960 Q 142.920 677.460 45.960 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 714.960 Q 336.840 677.460 433.800 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 286.860 564.960 333.840 564.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 436.800 377.460 633.720 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 189.960 Q 486.780 152.460 733.680 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='189.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='1014.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='939.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 17</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((2 0) (7 1)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (6 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (6 0)
(enc esk tpmkey))
(label 17)
(parent 13)
(unrealized (0 0) (7 1))
(comment "empty cohort"))</pre>
<p id="k18">Item <a href="#t0">18</a>, Parent: <a href="#k13">13</a>, Child: <a href="#k23">23</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='1129.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 1129.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='789.960' x2='439.800' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='639.960' x2='339.840' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='1014.960' x2='139.920' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='739.680' cy='339.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='739.680' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='739.680' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 442.800 377.460 245.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 490.553 749.561 441.345 934.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 1014.960 Q 292.860 977.460 145.920 1014.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='1014.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='939.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='864.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='789.960' r='6.000'/></g>
<path
d='M 339.840 714.960 Q 292.860 714.960 245.880 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<path
d='M 239.880 789.960 Q 142.920 752.460 45.960 789.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 789.960 Q 336.840 752.460 433.800 789.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='714.960' r='6.000'/></g>
<path
d='M 239.880 639.960 Q 286.860 639.960 333.840 639.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='639.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 436.800 452.460 633.720 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 486.780 77.460 733.680 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='1089.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='1014.960' r='6.000'/>
</g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='739.680' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 18</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
(enc esk tpmkey))
(label 18)
(parent 13)
(unrealized (0 0) (7 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k19">Item <a href="#t0">19</a>, Parent: <a href="#k14">14</a>, Child: <a href="#k24">24</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='264.960' x2='739.680' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='189.960' x2='639.720' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='189.960' x2='539.760' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='839.640' cy='264.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='339.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 264.960 Q 686.700 264.960 733.680 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 490.728 562.114 441.697 709.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.851 264.407 633.823 338.854'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 19</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "execute transport" (hash "extend" (enc n esk-1))) (7 0))
(label 19)
(parent 14)
(unrealized (0 0) (6 2) (8 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k20">Item <a href="#t0">20</a>, Parent: <a href="#k14">14</a>, Children: <a href="#k25">25</a> <a href="#k26">26</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='189.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 189.960 Q 792.660 189.960 745.680 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: red;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 686.700 189.960 733.680 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 20</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener
(cat "execute transport" (hash "extend" (enc n esk-1))))
(hash "execute transport" (hash "extend" (enc n esk-1))) (7 0))
(label 20)
(parent 14)
(unrealized (0 0) (6 2) (8 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k21">Item <a href="#t0">21</a>, Parent: <a href="#k16">16</a>, Child: <a href="#k27">27</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: orange;' cx='739.680' cy='639.960' r='6.000'/>
</g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 21</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik) (0 0))
(label 21)
(parent 16)
(unrealized (7 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k22">Item <a href="#t0">22</a>, Parent: <a href="#k16">16</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='489.960' x2='739.680' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='639.960' x2='39.960' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 639.960 Q 392.820 602.460 45.960 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik) nonce aik-0)</title>
<circle cx='739.680' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: orange;' cx='739.680' cy='564.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 22</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(aik aik-0))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
((2 6) (7 1)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik) (0 0))
(label 22)
(parent 16)
(unrealized (7 1))
(comment "empty cohort"))</pre>
<p id="k23">Item <a href="#t0">23</a>, Parent: <a href="#k18">18</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='1204.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 1204.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='189.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='864.960' x2='439.800' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='714.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='189.960' x2='239.880' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='1089.960' x2='139.920' y2='1164.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='864.960' x2='39.960' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='739.680' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 442.800 452.460 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 490.553 824.561 441.345 1009.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 1089.960 Q 292.860 1052.460 145.920 1089.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='1089.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='1014.960' r='6.000'/>
</g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='939.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='864.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 292.860 789.960 245.880 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
<path
d='M 239.880 864.960 Q 142.920 827.460 45.960 864.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 864.960 Q 336.840 827.460 433.800 864.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='789.960' r='6.000'/></g>
<path
d='M 239.880 714.960 Q 286.860 714.960 333.840 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='714.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 436.800 527.460 633.720 564.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 189.960 Q 486.780 152.460 733.680 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='189.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='1164.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='1089.960' r='6.000'/>
</g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='939.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='864.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='739.680' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 23</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)) ((8 2) (7 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (7 1))
(label 23)
(parent 18)
(unrealized (0 0) (8 1))
(comment "empty cohort"))</pre>
<p id="k24">Item <a href="#t0">24</a>, Parent: <a href="#k19">19</a>, Child: <a href="#k28">28</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-1)) (hash "execute transport" (hash "extend" (enc n esk-1))))</title>
<circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "execute transport" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 437.186 338.489 634.491 487.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 24</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
(esk esk-2) (tpmkey tpmkey-2))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "execute transport" (hash "extend" (enc n esk-1))) (8 1))
(label 24)
(parent 19)
(unrealized (0 0) (6 2) (9 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k25">Item <a href="#t0">25</a>, Parent: <a href="#k20">20</a>, Child: <a href="#k29">29</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='264.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 264.960 Q 892.620 264.960 845.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)</title>
<circle cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-1))</title>
<circle style='fill: orange;' cx='939.600' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 686.700 339.960 733.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 490.998 599.718 442.236 709.477'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.991 301.406 634.102 412.852'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-1))) (aik aik-0))</title>
<text
x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 25</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-1))) (aik aik-0))
(precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "extend" (enc n esk-1)) (8 0))
(label 25)
(parent 20)
(unrealized (0 0) (6 2) (9 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k26">Item <a href="#t0">26</a>, Parent: <a href="#k20">20</a>, Children: <a href="#k30">30</a> <a href="#k31">31</a> <a href="#k32">32</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 26</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(precedes ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener (cat "extend" (enc n esk-1)))
(hash "extend" (enc n esk-1)) (8 0))
(label 26)
(parent 20)
(unrealized (0 0) (9 0))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k27">Item <a href="#t0">27</a>, Parent: <a href="#k21">21</a>, Child: <a href="#k33">33</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 27</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 tne-1 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "refuse" (hash n state)) (7 1))
(label 27)
(parent 21)
(unrealized (8 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k28">Item <a href="#t0">28</a>, Parent: <a href="#k24">24</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-1) (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc "extend" esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='1039.560' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-1)) (hash "execute transport" (hash "extend" (enc n esk-1))))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "execute transport" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 636.733 264.680 1033.586 339.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-1)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 28</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
(esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
(esk esk-2) (tpmkey tpmkey-2))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
(tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
(precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1))
((10 3) (9 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)) ((10 3) (9 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
(uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-1)) (9 3))
(label 28)
(parent 24)
(unrealized (0 0) (6 2) (10 3))
(comment "empty cohort"))</pre>
<p id="k29">Item <a href="#t0">29</a>, Parent: <a href="#k25">25</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='489.960' x2='739.680' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-1) (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "extend" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='1039.560' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-1))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 636.733 264.680 1033.586 339.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-1)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-1))) (aik aik-0))</title>
<text
x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 29</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-1))) (aik aik-0))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
(tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0))
((10 3) (9 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((10 3) (9 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-1)) (9 1))
(label 29)
(parent 25)
(unrealized (0 0) (6 2) (10 3))
(comment "empty cohort"))</pre>
<p id="k30">Item <a href="#t0">30</a>, Parent: <a href="#k26">26</a>, Children: <a href="#k34">34</a> <a href="#k35">35</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: red;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 30</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(precedes ((2 0) (6 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
((9 1) (8 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (contracted (esk-1 esk)) n (9 0) (enc n esk))
(label 30)
(parent 26)
(unrealized (0 0) (6 0) (7 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k31">Item <a href="#t0">31</a>, Parent: <a href="#k26">26</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='189.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='489.960' x2='739.680' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" n nonce aik-0)</title>
<circle cx='1039.560' cy='339.960' r='6.000'/></g>
<g><title>n</title>
<circle style='fill: orange;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 636.720 227.460 1033.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 31</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
(precedes ((2 2) (10 1)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0))
((10 2) (9 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) n (9 0) (enc n esk))
(label 31)
(parent 26)
(unrealized (0 0) (10 1))
(comment "empty cohort"))</pre>
<p id="k32">Item <a href="#t0">32</a>, Parent: <a href="#k26">26</a>, Children: <a href="#k36">36</a> <a href="#k37">37</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 189.960 Q 991.980 225.660 944.399 261.359'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='189.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: red;' cx='1039.560' cy='114.960' r='6.000'/></g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 636.720 77.460 1033.560 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 32</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(precedes ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
((9 1) (8 0)) ((10 1) (9 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-listener esk) n (9 0) (enc n esk))
(label 32)
(parent 26)
(unrealized (0 0) (10 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k33">Item <a href="#t0">33</a>, Parent: <a href="#k27">27</a>, Children: <a href="#k38">38</a> <a href="#k39">39</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 33</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 3) (8 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash n state) (8 3))
(label 33)
(parent 27)
(unrealized (9 2))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k34">Item <a href="#t0">34</a>, Parent: <a href="#k30">30</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 264.960 Q 892.303 301.118 745.046 412.276'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 636.733 114.680 1033.586 189.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 34</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (10 1)) ((2 2) (9 0)) ((2 4) (3 0))
((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
((8 1) (7 0)) ((9 1) (8 0)) ((10 2) (7 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (7 0)
(enc esk tpmkey))
(label 34)
(parent 30)
(unrealized (0 0) (6 0) (10 1))
(comment "empty cohort"))</pre>
<p id="k35">Item <a href="#t0">35</a>, Parent: <a href="#k30">30</a>, Child: <a href="#k40">40</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 339.960 Q 892.530 339.232 745.501 413.504'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 636.720 77.460 1033.560 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 35</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (7 0)
(enc esk tpmkey))
(label 35)
(parent 30)
(unrealized (0 0) (6 0) (10 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k36">Item <a href="#t0">36</a>, Parent: <a href="#k32">32</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='264.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='489.960' x2='739.680' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='1139.520' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.757 264.640 933.634 339.321'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 686.710 114.711 1133.541 189.462'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 36</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((2 0) (11 1)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
((9 1) (8 0)) ((10 1) (9 0)) ((11 2) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (10 0)
(enc esk tpmkey))
(label 36)
(parent 32)
(unrealized (0 0) (11 1))
(comment "empty cohort"))</pre>
<p id="k37">Item <a href="#t0">37</a>, Parent: <a href="#k32">32</a>, Child: <a href="#k41">41</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='339.960' x2='1039.560' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='414.960' x2='939.600' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='489.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='489.960' x2='639.720' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='489.960' x2='539.760' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1139.520' cy='339.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='1139.520' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<path
d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='489.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.660 564.960 745.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<path
d='M 739.680 639.960 Q 692.700 639.960 645.720 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='639.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 714.960 Q 592.740 714.960 545.760 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='639.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 686.700 564.960 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 714.960 Q 492.780 714.960 445.800 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='639.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 686.700 77.460 1133.520 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 37</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
(enc esk tpmkey))
(label 37)
(parent 32)
(unrealized (0 0) (11 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k38">Item <a href="#t0">38</a>, Parent: <a href="#k33">33</a>, Child: <a href="#k42">42</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false") nonce aik-0)</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g>
<title>(hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 38</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-2
(hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
tno-2 "false")) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 3) (8 3)) ((10 2) (9 2)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false") (9 2))
(label 38)
(parent 33)
(unrealized (9 2) (10 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k39">Item <a href="#t0">39</a>, Parent: <a href="#k33">33</a>, Children: <a href="#k43">43</a> <a href="#k44">44</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='189.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 939.600 189.960 Q 986.580 189.960 1033.560 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 39</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test
(added-listener
(cat esk-2
(hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
tno-2 "false"))
(hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false") (9 2))
(label 39)
(parent 33)
(unrealized (9 2) (10 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k40">Item <a href="#t0">40</a>, Parent: <a href="#k35">35</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='189.960' x2='1039.560' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1139.520' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 414.960 Q 892.620 377.460 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 636.733 114.680 1033.586 189.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 40</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)) ((11 2) (10 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (10 1))
(label 40)
(parent 35)
(unrealized (0 0) (6 0) (11 1))
(comment "empty cohort"))</pre>
<p id="k41">Item <a href="#t0">41</a>, Parent: <a href="#k37">37</a>.</p>
<div>
<svg
class='diagram' width='1279.440pt' height='979.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1279.440 979.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1239.480' y1='114.960' x2='1239.480' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='189.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='489.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='564.960' x2='839.640' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='639.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='564.960' x2='639.720' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='564.960' x2='539.760' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='639.960' x2='439.800' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='864.960' x2='139.920' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1239.480 264.960 Q 1192.500 264.960 1145.520 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1239.480' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1239.480' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1139.520' cy='414.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1139.520' cy='189.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='489.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='939.600' cy='564.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='839.640' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 692.700 714.960 645.720 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='739.680' cy='639.960' r='6.000'/></g>
<path
d='M 639.720 789.960 Q 592.740 789.960 545.760 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='714.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 686.700 639.960 733.680 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 789.960 Q 492.780 789.960 445.800 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='714.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 439.800 864.960 Q 292.860 827.460 145.920 864.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='864.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 337.031 563.906 434.182 637.853'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 586.884 339.042 933.888 488.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 686.710 114.711 1133.541 189.462'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='939.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1239.480' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='639.720' y='39.960'
style='text-anchor: middle;'>envelope 41</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)) ((12 2) (11 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (11 1))
(label 41)
(parent 37)
(unrealized (0 0) (12 1))
(comment "empty cohort"))</pre>
<p id="k42">Item <a href="#t0">42</a>, Parent: <a href="#k38">38</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='264.960' x2='1039.560' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (cat (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false") (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: orange;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc esk-2 esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc esk-2 esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='1139.520' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false") nonce aik-0)</title>
<circle cx='1039.560' cy='414.960' r='6.000'/></g>
<g>
<title>(hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<path
d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 939.600 339.960 Q 1036.560 302.460 1133.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 791.324 562.464 743.007 634.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value esk-2) (state (cat (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 42</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
(esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-2
(hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
tno-2 "false")) (aik aik-0))
(defstrand tpm-extend-enc 4 (value esk-2)
(state
(cat (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false")) (tne tne-3) (tno tno-3) (esk esk-3)
(tpmkey tpmkey-3))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (11 3)) ((9 3) (8 3)) ((10 2) (9 2))
((11 3) (10 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
((11 3) (10 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false") (10 1))
(label 42)
(parent 38)
(unrealized (9 2) (11 3))
(comment "empty cohort"))</pre>
<p id="k43">Item <a href="#t0">43</a>, Parent: <a href="#k39">39</a>, Child: <a href="#k45">45</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='264.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='189.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='189.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-2))) nonce aik-0)</title>
<circle cx='1139.520' cy='264.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='339.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 939.600 264.960 Q 986.580 264.960 1033.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 790.878 524.718 742.116 634.477'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='189.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.757 264.640 933.634 339.321'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-2)))) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 43</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
(aik aik-0))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 2) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "execute transport" (hash "extend" (enc n esk-2))) (10 0))
(label 43)
(parent 39)
(unrealized (9 2) (11 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k44">Item <a href="#t0">44</a>, Parent: <a href="#k39">39</a>, Children: <a href="#k46">46</a> <a href="#k47">47</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='189.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 189.960 Q 1092.540 189.960 1045.560 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: red;' cx='1139.520' cy='114.960' r='6.000'/></g>
<path
d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 939.600 189.960 Q 986.580 189.960 1033.560 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 44</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 1) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test
(added-listener
(cat "execute transport" (hash "extend" (enc n esk-2))))
(hash "execute transport" (hash "extend" (enc n esk-2))) (10 0))
(label 44)
(parent 39)
(unrealized (9 2) (11 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k45">Item <a href="#t0">45</a>, Parent: <a href="#k43">43</a>, Child: <a href="#k48">48</a>.</p>
<div>
<svg
class='diagram' width='1279.440pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1279.440 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1239.480' y1='114.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='264.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-2)) (hash "execute transport" (hash "extend" (enc n esk-2))))</title>
<circle style='fill: orange;' cx='1239.480' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc "execute transport" esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='1239.480' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-2))) nonce aik-0)</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.884 339.042 933.888 488.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='1239.480' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-2)))) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='639.720' y='39.960'
style='text-anchor: middle;'>envelope 45</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
(esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3)
(esk esk-3) (tpmkey tpmkey-3))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 2) (10 0)) ((12 3) (11 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
((12 3) (11 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "execute transport" (hash "extend" (enc n esk-2))) (11 1))
(label 45)
(parent 43)
(unrealized (9 2) (12 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k46">Item <a href="#t0">46</a>, Parent: <a href="#k44">44</a>, Child: <a href="#k49">49</a>.</p>
<div>
<svg
class='diagram' width='1279.440pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1279.440 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1239.480' y1='114.960' x2='1239.480' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='264.960' x2='1139.520' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='339.960' x2='1039.560' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1239.480 264.960 Q 1192.500 264.960 1145.520 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-2)) nonce aik-0)</title>
<circle cx='1239.480' cy='264.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-2))</title>
<circle style='fill: orange;' cx='1239.480' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
</g>
<path
d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<path
d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='414.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<path
d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 939.600 339.960 Q 986.580 339.960 1033.560 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 791.324 562.464 743.007 634.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-2))) (aik aik-0))</title>
<text
x='1239.480' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='639.720' y='39.960'
style='text-anchor: middle;'>envelope 46</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-2))) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 1) (10 0)) ((12 2) (11 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "extend" (enc n esk-2)) (11 0))
(label 46)
(parent 44)
(unrealized (9 2) (12 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k47">Item <a href="#t0">47</a>, Parent: <a href="#k44">44</a>, Children: <a href="#k50">50</a> <a href="#k51">51</a> <a href="#k52">52</a>.</p>
<div>
<svg
class='diagram' width='1279.440pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1279.440 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: red;' cx='1239.480' cy='264.960' r='6.000'/></g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='639.720' y='39.960'
style='text-anchor: middle;'>envelope 47</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (12 0)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 1) (10 0)) ((12 1) (11 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test
(added-listener (cat "extend" (enc n esk-2)))
(hash "extend" (enc n esk-2)) (11 0))
(label 47)
(parent 44)
(unrealized (12 0))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k48">Item <a href="#t0">48</a>, Parent: <a href="#k45">45</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='114.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='264.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-2) (hash "extend" (enc n esk-2)))</title>
<circle style='fill: orange;' cx='1339.440' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-4)) tno-4 "false" (hash esk-4 (hash "execute transport" (hash "extend" (enc "extend" esk-4))) tne-4 tno-4 "false"))</title>
<circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-4)</title>
<circle cx='1339.440' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-4 (enc esk-4 tpmkey-4))</title>
<circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
</g>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-2)) (hash "execute transport" (hash "extend" (enc n esk-2))))</title>
<circle style='fill: gray;' cx='1239.480' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc "execute transport" esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='1239.480' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-2))) nonce aik-0)</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 786.667 264.756 1333.454 339.552'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-2)) (tne tne-4) (tno tno-4) (esk esk-4) (tpmkey tpmkey-4))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='1239.480' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-2)))) (aik aik-0))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 48</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 tne-4
tno-4 data) (esk1 esk esk-0 esk-1 esk-2 esk-3 esk-4 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 tpmkey-4
akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3)
(esk esk-3) (tpmkey tpmkey-3))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-2))
(tne tne-4) (tno tno-4) (esk esk-4) (tpmkey tpmkey-4))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 2) (10 0)) ((12 3) (11 1)) ((13 3) (12 3)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
((12 3) (11 1)) ((13 3) (12 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3) (invk tpmkey-4))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 tne-4 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-2)) (12 3))
(label 48)
(parent 45)
(unrealized (9 2) (13 3))
(comment "empty cohort"))</pre>
<p id="k49">Item <a href="#t0">49</a>, Parent: <a href="#k46">46</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='414.960' x2='939.600' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-2) (hash "extend" (enc n esk-2)))</title>
<circle style='fill: orange;' cx='1339.440' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc "extend" esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='1339.440' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
</g>
<path
d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-2)) nonce aik-0)</title>
<circle cx='1239.480' cy='414.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-2))</title>
<circle style='fill: gray;' cx='1239.480' cy='339.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
</g>
<path
d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
</g>
<path
d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: red;' cx='939.600' cy='564.960' r='6.000'/></g>
<path
d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 786.667 264.756 1333.454 339.552'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-2)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-2))) (aik aik-0))</title>
<text
x='1239.480' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 49</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
(esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-2))) (aik aik-0))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-2))
(tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 1) (10 0)) ((12 2) (11 0)) ((13 3) (12 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
((13 3) (12 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-2)) (12 1))
(label 49)
(parent 46)
(unrealized (9 2) (13 3))
(comment "empty cohort"))</pre>
<p id="k50">Item <a href="#t0">50</a>, Parent: <a href="#k47">47</a>, Children: <a href="#k53">53</a> <a href="#k54">54</a>.</p>
<div>
<svg
class='diagram' width='1279.440pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1279.440 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle style='fill: red;' cx='1039.560' cy='414.960' r='6.000'/></g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-2 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk tpmkey-2))</title>
<circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='639.720' y='39.960'
style='text-anchor: middle;'>envelope 50</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk) (tpmkey tpmkey-2))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 2) (6 2)) ((2 2) (12 0))
((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (contracted (esk-2 esk)) n (12 0) (enc n esk))
(label 50)
(parent 47)
(unrealized (9 0) (10 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k51">Item <a href="#t0">51</a>, Parent: <a href="#k47">47</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='189.960' x2='1339.440' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='339.960' x2='1239.480' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='414.960' x2='939.600' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" n nonce aik-0)</title>
<circle cx='1339.440' cy='339.960' r='6.000'/></g>
<g><title>n</title>
<circle style='fill: orange;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1339.440' cy='189.960' r='6.000'/>
</g>
<path
d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: blue;' cx='1239.480' cy='339.960' r='6.000'/>
</g>
<path
d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
</g>
<path
d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
</g>
<path
d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
<path
d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 786.660 227.460 1333.440 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 51</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 1)) ((2 4) (3 0))
((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
((11 1) (10 0)) ((12 1) (11 0)) ((13 2) (12 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-strand tpm-quote 3) n (12 0) (enc n esk))
(label 51)
(parent 47)
(unrealized (13 1))
(comment "empty cohort"))</pre>
<p id="k52">Item <a href="#t0">52</a>, Parent: <a href="#k47">47</a>, Children: <a href="#k55">55</a> <a href="#k56">56</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='114.960' x2='1339.440' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 189.960 Q 1291.860 225.660 1244.279 261.359'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='189.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: red;' cx='1339.440' cy='114.960' r='6.000'/></g>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 786.660 77.460 1333.440 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 52</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(deflistener esk)
(precedes ((2 0) (6 0)) ((2 0) (13 0)) ((2 2) (6 2)) ((2 2) (12 0))
((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-listener esk) n (12 0) (enc n esk))
(label 52)
(parent 47)
(unrealized (13 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k53">Item <a href="#t0">53</a>, Parent: <a href="#k50">50</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='114.960' x2='1339.440' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 264.960 Q 1192.183 301.118 1044.926 412.276'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='1339.440' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='1339.440' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
</g>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-2 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk tpmkey-2))</title>
<circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 786.667 114.756 1333.454 189.552'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 53</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk) (tpmkey tpmkey-2))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 1)) ((2 2) (6 2))
((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
((13 2) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (10 0)
(enc esk tpmkey))
(label 53)
(parent 50)
(unrealized (9 0) (13 1))
(comment "empty cohort"))</pre>
<p id="k54">Item <a href="#t0">54</a>, Parent: <a href="#k50">50</a>, Child: <a href="#k57">57</a>.</p>
<div>
<svg
class='diagram' width='1379.400pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1379.400 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1339.440 339.960 Q 1192.410 339.232 1045.381 413.504'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='339.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='1339.440' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
</g>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-2 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk tpmkey-2))</title>
<circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 786.660 77.460 1333.440 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='689.700' y='39.960'
style='text-anchor: middle;'>envelope 54</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk) (tpmkey tpmkey-2))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
((13 3) (10 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
(enc esk tpmkey))
(label 54)
(parent 50)
(unrealized (9 0) (13 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k55">Item <a href="#t0">55</a>, Parent: <a href="#k52">52</a>.</p>
<div>
<svg
class='diagram' width='1479.360pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1479.360 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1439.400' y1='114.960' x2='1439.400' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1339.440' y1='264.960' x2='1339.440' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='339.960' x2='1239.480' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='414.960' x2='939.600' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1439.400 264.960 Q 1392.420 264.960 1345.440 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='1439.400' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='1439.400' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
</g>
<path
d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='339.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<path
d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: blue;' cx='1239.480' cy='339.960' r='6.000'/>
</g>
<path
d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
</g>
<path
d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
</g>
<path
d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
<path
d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.688 264.736 1233.497 339.511'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 836.646 114.773 1433.412 189.586'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='1439.400' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='739.680' y='39.960'
style='text-anchor: middle;'>envelope 55</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(deflistener esk)
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (14 1)) ((2 2) (6 2)) ((2 2) (12 0))
((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
((14 2) (13 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (13 0)
(enc esk tpmkey))
(label 55)
(parent 52)
(unrealized (14 1))
(comment "empty cohort"))</pre>
<p id="k56">Item <a href="#t0">56</a>, Parent: <a href="#k52">52</a>, Child: <a href="#k58">58</a>.</p>
<div>
<svg
class='diagram' width='1479.360pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1479.360 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1439.400' y1='114.960' x2='1439.400' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1339.440' y1='339.960' x2='1339.440' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='414.960' x2='1239.480' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='489.960' x2='1139.520' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='564.960' x2='1039.560' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='489.960' x2='939.600' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='489.960' x2='839.640' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='639.960' x2='739.680' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1439.400 339.960 Q 1392.420 339.960 1345.440 339.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1439.400' cy='339.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1439.400' cy='264.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='1439.400' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
</g>
<path
d='M 1339.440 414.960 Q 1292.460 414.960 1245.480 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='414.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1339.440' cy='339.960' r='6.000'/>
</g>
<path
d='M 1239.480 489.960 Q 1192.500 489.960 1145.520 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='489.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: blue;' cx='1239.480' cy='414.960' r='6.000'/>
</g>
<path
d='M 1139.520 564.960 Q 1092.540 564.960 1045.560 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='489.960' r='6.000'/>
</g>
<path
d='M 1039.560 639.960 Q 992.580 639.960 945.600 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='639.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='564.960' r='6.000'/>
</g>
<path
d='M 939.600 714.960 Q 892.620 714.960 845.640 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='639.960' r='6.000'/></g>
<path
d='M 939.600 564.960 Q 986.580 564.960 1033.560 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 839.640 714.960 Q 792.660 714.960 745.680 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='639.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<path
d='M 739.680 789.960 Q 392.820 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='789.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='639.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.813 564.515 733.746 639.070'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.713 302.015 1233.546 414.070'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 836.640 77.460 1433.400 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1439.400' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='739.680' y='39.960'
style='text-anchor: middle;'>envelope 56</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
((14 3) (13 0)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (13 0)
(enc esk tpmkey))
(label 56)
(parent 52)
(unrealized (14 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k57">Item <a href="#t0">57</a>, Parent: <a href="#k54">54</a>.</p>
<div>
<svg
class='diagram' width='1479.360pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1479.360 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1439.400' y1='114.960' x2='1439.400' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1339.440' y1='189.960' x2='1339.440' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='714.960' x2='39.960' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1439.400 264.960 Q 1392.420 264.960 1345.440 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1439.400' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1439.400' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
</g>
<path
d='M 1339.440 414.960 Q 1192.500 377.460 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='414.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1339.440' cy='339.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1339.440' cy='189.960' r='6.000'/>
</g>
<path
d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='1239.480' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
</g>
<path
d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='1139.520' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
</g>
<path
d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
</g>
<path
d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-2 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
<path
d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk tpmkey-2))</title>
<circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='714.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 786.667 114.756 1333.454 189.552'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1439.400' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1339.440' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='739.680' y='39.960'
style='text-anchor: middle;'>envelope 57</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk) (tpmkey tpmkey-2))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
((13 3) (10 0)) ((14 2) (13 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (13 1))
(label 57)
(parent 54)
(unrealized (9 0) (14 1))
(comment "empty cohort"))</pre>
<p id="k58">Item <a href="#t0">58</a>, Parent: <a href="#k56">56</a>.</p>
<div>
<svg
class='diagram' width='1579.320pt' height='979.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1579.320 979.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1539.360' y1='114.960' x2='1539.360' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1439.400' y1='189.960' x2='1439.400' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1339.440' y1='414.960' x2='1339.440' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1239.480' y1='489.960' x2='1239.480' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1139.520' y1='564.960' x2='1139.520' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='639.960' x2='1039.560' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='564.960' x2='939.600' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='564.960' x2='839.640' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='714.960' x2='739.680' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='414.960' x2='339.840' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='114.960' x2='239.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='789.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='864.960' x2='39.960' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1539.360 264.960 Q 1492.380 264.960 1445.400 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1539.360' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1539.360' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1539.360' cy='114.960' r='6.000'/>
</g>
<path
d='M 1439.400 414.960 Q 1392.420 414.960 1345.440 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1439.400' cy='414.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1439.400' cy='339.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='1439.400' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1439.400' cy='189.960' r='6.000'/>
</g>
<path
d='M 1339.440 489.960 Q 1292.460 489.960 1245.480 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1339.440' cy='489.960' r='6.000'/>
</g>
<g><title>esk</title>
<circle style='fill: blue;' cx='1339.440' cy='414.960' r='6.000'/>
</g>
<path
d='M 1239.480 564.960 Q 1192.500 564.960 1145.520 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle cx='1239.480' cy='564.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-2))</title>
<circle style='fill: blue;' cx='1239.480' cy='489.960' r='6.000'/>
</g>
<path
d='M 1139.520 639.960 Q 1092.540 639.960 1045.560 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle cx='1139.520' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-2)))</title>
<circle style='fill: blue;' cx='1139.520' cy='564.960' r='6.000'/>
</g>
<path
d='M 1039.560 714.960 Q 992.580 714.960 945.600 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle cx='1039.560' cy='714.960' r='6.000'/></g>
<g>
<title>(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false")</title>
<circle style='fill: blue;' cx='1039.560' cy='639.960' r='6.000'/>
</g>
<path
d='M 939.600 789.960 Q 892.620 789.960 845.640 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='939.600' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='714.960' r='6.000'/></g>
<path
d='M 939.600 639.960 Q 986.580 639.960 1033.560 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
<path
d='M 839.640 789.960 Q 792.660 789.960 745.680 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "refuse" (hash n state)))</title>
<circle style='fill: gray;' cx='839.640' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "refuse" esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='714.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='839.640' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
<path
d='M 739.680 864.960 Q 392.820 827.460 45.960 864.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='739.680' cy='864.960' r='6.000'/></g>
<g><title>(hash "refuse" (hash n state))</title>
<circle style='fill: gray;' cx='739.680' cy='789.960' r='6.000'/></g>
<g><title>(cat "quote" (enc v k))</title>
<circle style='fill: blue;' cx='739.680' cy='714.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='639.720' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='339.840' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
<path
d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 564.960 Q 486.907 601.598 733.933 713.235'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='239.880' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='239.880' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
<path
d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 264.960 Q 736.753 339.301 1233.626 488.642'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
<path
d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 114.960 Q 836.646 114.773 1433.412 189.586'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='239.880' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle cx='39.960' cy='939.960' r='6.000'/></g>
<g>
<title>(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)</title>
<circle style='fill: blue;' cx='39.960' cy='864.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1539.360' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1439.400' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "refuse") (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce (enc v k)) (pcr (hash "refuse" (hash n state))) (aik aik))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='789.660' y='39.960'
style='text-anchor: middle;'>envelope 58</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
(deflistener
(enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce (enc v k))
(pcr (hash "refuse" (hash n state))) (aik aik))
(defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
(tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
(tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(deflistener
(cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
tne-2 tno-2 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
(deflistener (cat "extend" (enc n esk-2)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
((14 3) (13 0)) ((15 2) (14 1)))
(leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (14 1))
(label 58)
(parent 56)
(unrealized (15 1))
(comment "empty cohort"))</pre>
<p id="t59">Tree <a href="#top">59</a>.</p>
<div>
<svg
class='diagram' width='728.880pt' height='1129.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 728.880 1129.920' font-size='12.000'>
<text
x='688.920' y='1076.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k94", "_self")'>94</text>
<line
x1='639.000' y1='1089.960' x2='688.920' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1076.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k92", "_self")'>92</text>
<line
x1='589.080' y1='1052.460' x2='639.000' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='1001.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k91", "_self")'>91</text>
<line
x1='589.080' y1='1052.460' x2='639.000' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='1038.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k88", "_self")'>88</text>
<line
x1='539.160' y1='939.960' x2='589.080' y2='1052.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='926.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k87", "_self")'>87</text>
<line
x1='539.160' y1='939.960' x2='589.080' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='688.920' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k93", "_self")'>93</text>
<line
x1='639.000' y1='864.960' x2='688.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k90", "_self")'>90</text>
<line
x1='589.080' y1='827.460' x2='639.000' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='639.000' y='776.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k89", "_self")'>89</text>
<line
x1='589.080' y1='827.460' x2='639.000' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='813.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k86", "_self")'>86</text>
<line
x1='539.160' y1='939.960' x2='589.080' y2='827.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='926.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k83", "_self")'>83</text>
<line
x1='489.240' y1='902.460' x2='539.160' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k85", "_self")'>85</text>
<line
x1='539.160' y1='714.960' x2='589.080' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='701.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k82", "_self")'>82</text>
<line
x1='489.240' y1='902.460' x2='539.160' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='888.540' style='text-anchor: middle; fill: red;'
onclick='window.open("#k79", "_self")'>79</text>
<line
x1='439.320' y1='864.960' x2='489.240' y2='902.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='589.080' y='626.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k84", "_self")'>84</text>
<line
x1='539.160' y1='639.960' x2='589.080' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='626.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k81", "_self")'>81</text>
<line
x1='489.240' y1='639.960' x2='539.160' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='626.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k78", "_self")'>78</text>
<line
x1='439.320' y1='864.960' x2='489.240' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='851.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k73", "_self")'>73</text>
<line
x1='389.400' y1='714.960' x2='439.320' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='539.160' y='551.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k80", "_self")'>80</text>
<line
x1='489.240' y1='564.960' x2='539.160' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='551.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k77", "_self")'>77</text>
<line
x1='439.320' y1='489.960' x2='489.240' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='476.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k76", "_self")'>76</text>
<line
x1='439.320' y1='489.960' x2='489.240' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='401.040'
style='font-weight: bold; text-anchor: middle; fill: blue;'
onclick='window.open("#k75", "_self")'>75</text>
<line
x1='439.320' y1='489.960' x2='489.240' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='476.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k72", "_self")'>72</text>
<line
x1='389.400' y1='714.960' x2='439.320' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='489.240' y='326.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k74", "_self")'>74</text>
<line
x1='439.320' y1='339.960' x2='489.240' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='439.320' y='326.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k71", "_self")'>71</text>
<line
x1='389.400' y1='714.960' x2='439.320' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='389.400' y='701.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k70", "_self")'>70</text>
<line
x1='339.480' y1='714.960' x2='389.400' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='339.480' y='701.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k69", "_self")'>69</text>
<line
x1='289.560' y1='714.960' x2='339.480' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='289.560' y='701.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k68", "_self")'>68</text>
<line
x1='239.640' y1='677.460' x2='289.560' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='289.560' y='251.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k67", "_self")'>67</text>
<line
x1='239.640' y1='677.460' x2='289.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='239.640' y='663.540' style='text-anchor: middle; fill: black;'
onclick='window.open("#k66", "_self")'>66</text>
<line
x1='189.720' y1='639.960' x2='239.640' y2='677.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k65", "_self")'>65</text>
<line
x1='189.720' y1='639.960' x2='239.640' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='189.720' y='626.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k64", "_self")'>64</text>
<line
x1='139.800' y1='602.460' x2='189.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k63", "_self")'>63</text>
<line
x1='139.800' y1='602.460' x2='189.720' y2='114.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='139.800' y='588.540' style='text-anchor: middle; fill: black;'
onclick='window.open("#k62", "_self")'>62</text>
<line
x1='89.880' y1='564.960' x2='139.800' y2='602.460'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
onclick='window.open("#k61", "_self")'>61</text>
<line
x1='89.880' y1='564.960' x2='139.800' y2='39.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='89.880' y='551.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k60", "_self")'>60</text>
<line
x1='39.960' y1='564.960' x2='89.880' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<text
x='39.960' y='551.040' style='text-anchor: middle; fill: black;'
onclick='window.open("#k59", "_self")'>59</text>
</svg></div>
<pre>(defprotocol envelope basic
(defrole tpm-power-on (vars) (trace (init "0")))
(defrole tpm-quote
(vars (nonce pcr mesg) (aik akey))
(trace (recv (cat "quote" nonce)) (obsv pcr)
(send (enc "quote" pcr nonce aik)))
(non-orig aik))
(defrole tpm-extend-enc
(vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
(trace (recv (cat "establish transport" tpmkey (enc esk tpmkey)))
(send (cat "establish transport" tne))
(recv
(cat "execute transport" (cat "extend" (enc value esk)) tno
"false"
(hash esk
(hash "execute transport" (hash "extend" (enc value esk)))
tne tno "false"))) (tran state (hash value state)))
(non-orig (invk tpmkey))
(uniq-orig tne))
(defrole tpm-create-key
(vars (k aik akey) (pcr mesg) (esk skey))
(trace (recv (enc "create key" pcr esk))
(send (enc "created" k pcr aik)))
(non-orig (invk k) aik esk)
(uniq-orig k))
(defrole tpm-decrypt
(vars (m pcr mesg) (k aik akey))
(trace (recv (cat "decrypt" (enc m k)))
(recv (enc "created" k pcr aik)) (obsv pcr) (send m))
(non-orig aik))
(defrole alice
(vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
(pcr mesg))
(trace (send (cat "establish transport" tpmkey (enc esk tpmkey)))
(recv (cat "establish transport" tne))
(send
(cat "execute transport" (cat "extend" (enc n esk)) tno "false"
(hash esk
(hash "execute transport" (hash "extend" (enc n esk))) tne
tno "false"))) (recv pcr)
(send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
(recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
(send (enc v k)))
(non-orig aik esk1 (invk tpmkey))
(uniq-orig v n tno esk)
(neq (tno n))))</pre>
<p id="k59">Item <a href="#t59">59</a>, Child: <a href="#k60">60</a>.</p>
<div>
<svg
class='diagram' width='179.880pt' height='604.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 179.880 604.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='114.960' x2='39.960' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: red;' cx='139.920' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='89.940' y='39.960' style='text-anchor: middle;'>envelope 59</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(neq (tno n))
(non-orig esk1 aik (invk tpmkey))
(uniq-orig v n tno esk)
(label 59)
(unrealized (0 0) (1 5))
(preskeleton)
(comment "Not a skeleton"))</pre>
<p id="k60">Item <a href="#t59">60</a>, Parent: <a href="#k59">59</a>, Children: <a href="#k61">61</a> <a href="#k62">62</a>.</p>
<div>
<svg
class='diagram' width='179.880pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 179.880 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: red;' cx='139.920' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='89.940' y='39.960' style='text-anchor: middle;'>envelope 60</text>
</svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(precedes ((1 6) (0 0)))
(neq (tno n))
(non-orig esk1 aik (invk tpmkey))
(uniq-orig v n tno esk)
(label 60)
(parent 59)
(unrealized (1 5))
(origs (esk (1 0)) (n (1 2)) (tno (1 2)) (v (1 6)))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k61">Item <a href="#t59">61</a>, Parent: <a href="#k60">60</a>.</p>
<div>
<svg
class='diagram' width='279.840pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 279.840 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='239.880' y1='114.960' x2='239.880' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 239.880 264.960 Q 191.118 374.718 142.356 484.477'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" k (hash "obtain" (hash n pcr)) aik) nonce aik-0)</title>
<circle cx='239.880' cy='264.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: orange;' cx='239.880' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" k (hash "obtain" (hash n pcr)) aik)) (aik aik-0))</title>
<text
x='239.880' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='139.920' y='39.960'
style='text-anchor: middle;'>envelope 61</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" k (hash "obtain" (hash n pcr)) aik))
(aik aik-0))
(precedes ((1 6) (0 0)) ((2 2) (1 5)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk tpmkey))
(uniq-orig v n tno esk)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" k (hash "obtain" (hash n pcr)) aik) (1 5))
(label 61)
(parent 60)
(unrealized (2 1))
(comment "empty cohort"))</pre>
<p id="k62">Item <a href="#t59">62</a>, Parent: <a href="#k60">60</a>, Children: <a href="#k63">63</a> <a href="#k64">64</a>.</p>
<div>
<svg
class='diagram' width='279.840pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 279.840 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='239.880' y1='114.960' x2='239.880' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 239.880 189.960 Q 190.848 337.114 141.817 484.268'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='189.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='139.920' y='39.960'
style='text-anchor: middle;'>envelope 62</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
(k aik tpmkey akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk-0) (k k) (aik aik))
(precedes ((1 6) (0 0)) ((2 1) (1 5)))
(neq (tno n))
(non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-create-key 2)
(enc "created" k (hash "obtain" (hash n pcr)) aik) (1 5))
(label 62)
(parent 60)
(unrealized (0 0) (2 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k63">Item <a href="#t59">63</a>, Parent: <a href="#k62">62</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='114.960' x2='339.840' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='264.960' x2='239.880' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "create key" (hash "obtain" (hash n pcr)) esk-0) nonce aik-0)</title>
<circle cx='339.840' cy='264.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: orange;' cx='339.840' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
<path
d='M 239.880 339.960 Q 191.564 412.464 143.247 484.967'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='339.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk-0)</title>
<circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0)) (aik aik-0))</title>
<text
x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960'
style='text-anchor: middle;'>envelope 63</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
(k aik tpmkey aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk-0) (k k) (aik aik))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
(aik aik-0))
(precedes ((1 6) (0 0)) ((2 1) (1 5)) ((3 2) (2 0)))
(neq (tno n))
(non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "create key" (hash "obtain" (hash n pcr)) esk-0) (2 0))
(label 63)
(parent 62)
(unrealized (0 0) (3 1))
(comment "empty cohort"))</pre>
<p id="k64">Item <a href="#t59">64</a>, Parent: <a href="#k62">62</a>, Children: <a href="#k65">65</a> <a href="#k66">66</a>.</p>
<div>
<svg
class='diagram' width='279.840pt' height='679.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 279.840 679.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='564.960' x2='39.960' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='139.920' y='39.960'
style='text-anchor: middle;'>envelope 64</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(precedes ((1 4) (2 0)) ((1 6) (0 0)) ((2 1) (1 5)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (displaced 3 1 alice 5)
(enc "create key" (hash "obtain" (hash n pcr)) esk-0) (2 0))
(label 64)
(parent 62)
(unrealized (0 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k65">Item <a href="#t59">65</a>, Parent: <a href="#k64">64</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='754.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 754.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='489.960' x2='339.840' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='639.960' x2='39.960' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 639.960 Q 192.900 602.460 45.960 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" v nonce aik-0)</title>
<circle cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: orange;' cx='339.840' cy='564.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='339.840' cy='489.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='714.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='639.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr v) (aik aik-0))</title>
<text
x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960'
style='text-anchor: middle;'>envelope 65</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
(precedes ((1 4) (2 0)) ((1 6) (3 1)) ((2 1) (1 5)) ((3 2) (0 0)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation nonce-test (added-strand tpm-quote 3) v (0 0) (enc v k))
(label 65)
(parent 64)
(unrealized (3 1))
(comment "empty cohort"))</pre>
<p id="k66">Item <a href="#t59">66</a>, Parent: <a href="#k64">64</a>, Children: <a href="#k67">67</a> <a href="#k68">68</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>pcr-0</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: red;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960'
style='text-anchor: middle;'>envelope 66</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
(precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation nonce-test (added-strand tpm-decrypt 4) v (0 0) (enc v k))
(label 66)
(parent 64)
(unrealized (3 1))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k67">Item <a href="#t59">67</a>, Parent: <a href="#k66">66</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='414.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 564.960 Q 392.220 600.660 344.639 636.359'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" k pcr-0 aik-0) nonce aik-1)</title>
<circle cx='439.800' cy='564.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: orange;' cx='439.800' cy='489.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>pcr-0</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g><title>(enc "created" k pcr-0 aik-0)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 239.880 489.960 Q 336.840 452.460 433.800 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))</title>
<text
x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960'
style='text-anchor: middle;'>envelope 67</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey aik-0 aik-1 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))
(precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((2 1) (4 1))
((3 3) (0 0)) ((4 2) (3 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" k pcr-0 aik-0) (3 1))
(label 67)
(parent 66)
(unrealized (4 1))
(comment "empty cohort"))</pre>
<p id="k68">Item <a href="#t59">68</a>, Parent: <a href="#k66">66</a>, Child: <a href="#k69">69</a>.</p>
<div>
<svg
class='diagram' width='379.800pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 379.800 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n pcr))</title>
<circle style='fill: orange;' cx='339.840' cy='714.960' r='6.000'/>
</g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n pcr))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='189.900' y='39.960'
style='text-anchor: middle;'>envelope 68</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
(k aik tpmkey akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
(k k) (aik aik))
(precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey))
(uniq-orig v n tno esk k)
(operation encryption-test (displaced 4 2 tpm-create-key 2)
(enc "created" k pcr-0 aik-0) (3 1))
(label 68)
(parent 66)
(unrealized (3 2))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k69">Item <a href="#t59">69</a>, Parent: <a href="#k68">68</a>, Child: <a href="#k70">70</a>.</p>
<div>
<svg
class='diagram' width='479.760pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 479.760 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n pcr) (hash "obtain" (hash n pcr)))</title>
<circle style='fill: orange;' cx='439.800' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n pcr))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n pcr)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n pcr)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value "obtain") (state (hash n pcr)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n pcr))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='239.880' y='39.960'
style='text-anchor: middle;'>envelope 69</text></svg></div>
<pre>(defskeleton envelope
(vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 akey))
(deflistener v)
(defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n pcr))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0))
((4 3) (3 2)))
(leadsto ((4 3) (3 2)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tno tne-0 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "obtain" (hash n pcr)) (3 2))
(label 69)
(parent 68)
(unrealized (4 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k70">Item <a href="#t59">70</a>, Parent: <a href="#k69">69</a>, Children: <a href="#k71">71</a> <a href="#k72">72</a> <a href="#k73">73</a>.</p>
<div>
<svg
class='diagram' width='579.720pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 579.720 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='289.860' y='39.960'
style='text-anchor: middle;'>envelope 70</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash n state) (4 3))
(label 70)
(parent 69)
(unrealized (5 2))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k71">Item <a href="#t59">71</a>, Parent: <a href="#k70">70</a>, Child: <a href="#k74">74</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") nonce aik-0)</title>
<circle cx='639.720' cy='264.960' r='6.000'/></g>
<g>
<title>(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: orange;' cx='639.720' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (aik aik-0))</title>
<text
x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 71</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false")) (aik aik-0))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)) ((6 2) (5 2)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (5 2))
(label 71)
(parent 70)
(unrealized (5 2) (6 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k72">Item <a href="#t59">72</a>, Parent: <a href="#k70">70</a>, Children: <a href="#k75">75</a> <a href="#k76">76</a> <a href="#k77">77</a>.</p>
<div>
<svg
class='diagram' width='579.720pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 579.720 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 189.960 Q 342.840 152.460 145.920 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 336.840 77.460 533.760 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='289.860' y='39.960'
style='text-anchor: middle;'>envelope 72</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
((5 3) (4 3)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (displaced 6 1 alice 3)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (5 2))
(label 72)
(parent 70)
(unrealized (5 0))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k73">Item <a href="#t59">73</a>, Parent: <a href="#k70">70</a>, Children: <a href="#k78">78</a> <a href="#k79">79</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='189.960' x2='639.720' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: red;' cx='639.720' cy='189.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 189.960 Q 586.740 189.960 633.720 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 73</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener
(cat esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false"))
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (5 2))
(label 73)
(parent 70)
(unrealized (5 2) (6 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k74">Item <a href="#t59">74</a>, Parent: <a href="#k71">71</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='264.960' x2='639.720' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='264.960' x2='439.800' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (cat (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: orange;' cx='739.680' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc esk-1 esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc esk-1 esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='739.680' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false") nonce aik-0)</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 636.720 302.460 733.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 489.960 Q 391.038 599.718 342.276 709.477'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 337.031 301.406 534.142 412.852'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value esk-1) (state (cat (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='739.680' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")) (aik aik-0))</title>
<text
x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 74</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce)
(pcr
(hash esk-1
(hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
tno-1 "false")) (aik aik-0))
(defstrand tpm-extend-enc 4 (value esk-1)
(state
(cat (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2)
(tpmkey tpmkey-2))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (7 3)) ((5 3) (4 3))
((6 2) (5 2)) ((7 3) (6 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((7 3) (6 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false") (6 1))
(label 74)
(parent 71)
(unrealized (5 2) (7 3))
(comment "empty cohort"))</pre>
<p id="k75">Item <a href="#t59">75</a>, Parent: <a href="#k72">72</a>.</p>
<div>
<svg
class='diagram' width='579.720pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 579.720 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 189.960 Q 342.840 152.460 145.920 189.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 336.840 77.460 533.760 114.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='289.860' y='39.960'
style='text-anchor: middle;'>envelope 75 (realized)</text></svg>
</div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey))
(precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
((5 3) (4 3)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (5 0)
(enc esk tpmkey))
(label 75)
(parent 72)
(unrealized)
(shape)
(maps
((0 1)
((v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k)
(aik aik) (tpmkey tpmkey) (pcr state))))
(origs (n (1 2)) (tno (1 2)) (esk (1 0)) (tne (5 1)) (tne-0 (4 1))
(k (2 1)) (v (1 6))))</pre>
<p id="k76">Item <a href="#t59">76</a>, Parent: <a href="#k72">72</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='1054.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 1054.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='264.960' x2='439.800' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='714.960' x2='339.840' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='564.960' x2='239.880' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='189.960' x2='139.920' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='939.960' x2='39.960' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='639.720' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='639.720' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 342.840 302.460 145.920 339.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 489.960 Q 390.593 674.561 341.385 859.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<path
d='M 339.840 939.960 Q 192.900 902.460 45.960 939.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='939.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
<path
d='M 239.880 639.960 Q 192.900 639.960 145.920 639.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='639.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='564.960' r='6.000'/></g>
<path
d='M 139.920 714.960 Q 236.880 677.460 333.840 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 186.900 564.960 233.880 564.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 336.840 377.460 533.760 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 189.960 Q 386.820 152.460 633.720 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='189.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='1014.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='939.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 76</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((1 0) (6 1)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
((5 3) (4 3)) ((6 2) (5 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (5 0)
(enc esk tpmkey))
(label 76)
(parent 72)
(unrealized (6 1))
(comment "empty cohort"))</pre>
<p id="k77">Item <a href="#t59">77</a>, Parent: <a href="#k72">72</a>, Child: <a href="#k80">80</a>.</p>
<div>
<svg
class='diagram' width='679.680pt' height='1129.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 679.680 1129.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='639.720' y1='114.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='789.960' x2='339.840' y2='1014.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='639.960' x2='239.880' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='1014.960' x2='39.960' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='639.720' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='639.720' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 342.840 377.460 145.920 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 390.593 749.561 341.385 934.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 1014.960 Q 192.900 977.460 45.960 1014.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='1014.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='939.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='864.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='789.960' r='6.000'/></g>
<path
d='M 239.880 714.960 Q 192.900 714.960 145.920 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
<path
d='M 139.920 789.960 Q 236.880 752.460 333.840 789.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='714.960' r='6.000'/></g>
<path
d='M 139.920 639.960 Q 186.900 639.960 233.880 639.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='639.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
<path
d='M 139.920 489.960 Q 336.840 452.460 533.760 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 386.820 77.460 633.720 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='1089.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='1014.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='339.840' y='39.960'
style='text-anchor: middle;'>envelope 77</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
((5 3) (4 3)) ((6 3) (5 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (5 0)
(enc esk tpmkey))
(label 77)
(parent 72)
(unrealized (6 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k78">Item <a href="#t59">78</a>, Parent: <a href="#k73">73</a>, Child: <a href="#k81">81</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='264.960' x2='639.720' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='189.960' x2='539.760' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='189.960' x2='439.800' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='339.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 492.780 414.960 445.800 414.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 264.960 Q 586.740 264.960 633.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
<path
d='M 439.800 414.960 Q 390.768 562.114 341.737 709.268'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='264.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.891 264.407 533.863 338.854'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 78</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 2) (6 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "execute transport" (hash "extend" (enc n esk-1))) (6 0))
(label 78)
(parent 73)
(unrealized (5 2) (7 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k79">Item <a href="#t59">79</a>, Parent: <a href="#k73">73</a>, Children: <a href="#k82">82</a> <a href="#k83">83</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='189.960' x2='639.720' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='114.960' x2='539.760' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='114.960' x2='439.800' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 189.960 Q 692.700 189.960 645.720 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: red;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='264.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 539.760 189.960 Q 586.740 189.960 633.720 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
<path
d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 79</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 1) (6 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener
(cat "execute transport" (hash "extend" (enc n esk-1))))
(hash "execute transport" (hash "extend" (enc n esk-1))) (6 0))
(label 79)
(parent 73)
(unrealized (5 2) (7 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k80">Item <a href="#t59">80</a>, Parent: <a href="#k77">77</a>.</p>
<div>
<svg
class='diagram' width='779.640pt' height='1204.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 779.640 1204.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='739.680' y1='114.960' x2='739.680' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='189.960' x2='639.720' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='414.960' x2='439.800' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='864.960' x2='339.840' y2='1089.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='714.960' x2='239.880' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='189.960' x2='139.920' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='1089.960' x2='39.960' y2='1164.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='739.680' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='639.720' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 342.840 452.460 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 639.960 Q 390.593 824.561 341.385 1009.162'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<path
d='M 339.840 1089.960 Q 192.900 1052.460 45.960 1089.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='1089.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='1014.960' r='6.000'/>
</g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='939.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='864.960' r='6.000'/></g>
<path
d='M 239.880 789.960 Q 192.900 789.960 145.920 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='714.960' r='6.000'/></g>
<path
d='M 139.920 864.960 Q 236.880 827.460 333.840 864.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='864.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
<path
d='M 139.920 714.960 Q 186.900 714.960 233.880 714.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='714.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 336.840 527.460 533.760 564.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 189.960 Q 386.820 152.460 633.720 189.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='189.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='1164.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='1089.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='639.720' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='389.820' y='39.960'
style='text-anchor: middle;'>envelope 80</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
(esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
(tno tno) (esk esk) (tpmkey tpmkey-1))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
((5 3) (4 3)) ((6 3) (5 0)) ((7 2) (6 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tne tno tne-0 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (6 1))
(label 80)
(parent 77)
(unrealized (7 1))
(comment "empty cohort"))</pre>
<p id="k81">Item <a href="#t59">81</a>, Parent: <a href="#k78">78</a>, Child: <a href="#k84">84</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='264.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-1)) (hash "execute transport" (hash "extend" (enc n esk-1))))</title>
<circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "execute transport" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 337.226 338.489 534.531 487.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 81</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
(esk esk-2) (tpmkey tpmkey-2))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "execute transport" (hash "extend" (enc n esk-1))) (7 1))
(label 81)
(parent 78)
(unrealized (5 2) (8 3))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k82">Item <a href="#t59">82</a>, Parent: <a href="#k79">79</a>, Child: <a href="#k85">85</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='114.960' x2='839.640' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='264.960' x2='739.680' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='339.960' x2='639.720' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='264.960' x2='539.760' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='264.960' x2='439.800' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)</title>
<circle cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-1))</title>
<circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='414.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 339.960 Q 586.740 339.960 633.720 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
<path
d='M 439.800 489.960 Q 391.038 599.718 342.276 709.477'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 337.031 301.406 534.142 412.852'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-1))) (aik aik-0))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 82</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-1))) (aik aik-0))
(precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(hash "extend" (enc n esk-1)) (7 0))
(label 82)
(parent 79)
(unrealized (5 2) (8 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k83">Item <a href="#t59">83</a>, Parent: <a href="#k79">79</a>, Children: <a href="#k86">86</a> <a href="#k87">87</a> <a href="#k88">88</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: red;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 83</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(precedes ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test
(added-listener (cat "extend" (enc n esk-1)))
(hash "extend" (enc n esk-1)) (7 0))
(label 83)
(parent 79)
(unrealized (8 0))
(comment "3 in cohort - 3 not yet seen"))</pre>
<p id="k84">Item <a href="#t59">84</a>, Parent: <a href="#k81">81</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='114.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='264.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-1) (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-3)) tno-3 "false" (hash esk-3 (hash "execute transport" (hash "extend" (enc "extend" esk-3))) tne-3 tno-3 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-3)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash "extend" (enc n esk-1)) (hash "execute transport" (hash "extend" (enc n esk-1))))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "execute transport" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "execute transport" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='839.640' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "execute transport" (hash "extend" (enc n esk-1))) nonce aik-0)</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(hash "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 536.773 264.680 933.626 339.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-1)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "execute transport") (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='839.640' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "execute transport" (hash "extend" (enc n esk-1)))) (aik aik-0))</title>
<text
x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 84</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
(esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
(aik aik-0))
(defstrand tpm-extend-enc 4 (value "execute transport")
(state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
(esk esk-2) (tpmkey tpmkey-2))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
(tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
(precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)) ((9 3) (8 3)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)) ((9 3) (8 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
(uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-1)) (8 3))
(label 84)
(parent 81)
(unrealized (5 2) (9 3))
(comment "empty cohort"))</pre>
<p id="k85">Item <a href="#t59">85</a>, Parent: <a href="#k82">82</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='489.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='414.960' x2='439.800' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (enc n esk-1) (hash "extend" (enc n esk-1)))</title>
<circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
</g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "extend" esk-2)) tno-2 "false" (hash esk-2 (hash "execute transport" (hash "extend" (enc "extend" esk-2))) tne-2 tno-2 "false"))</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-2)</title>
<circle cx='939.600' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g><title>(hash "extend" (enc n esk-1))</title>
<circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: red;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 536.773 264.680 933.626 339.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value "extend") (state (enc n esk-1)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((nonce nonce) (pcr (hash "extend" (enc n esk-1))) (aik aik-0))</title>
<text
x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 85</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
(esk1 esk esk-0 esk-1 esk-2 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (hash "extend" (enc n esk-1))) (aik aik-0))
(defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
(tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
(precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)) ((9 3) (8 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((9 3) (8 1)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1) (invk tpmkey-2))
(uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
(operation state-passing-test (added-strand tpm-extend-enc 4)
(hash "extend" (enc n esk-1)) (8 1))
(label 85)
(parent 82)
(unrealized (5 2) (9 3))
(comment "empty cohort"))</pre>
<p id="k86">Item <a href="#t59">86</a>, Parent: <a href="#k83">83</a>, Children: <a href="#k89">89</a> <a href="#k90">90</a>.</p>
<div>
<svg
class='diagram' width='879.600pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 879.600 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='439.800' y='39.960'
style='text-anchor: middle;'>envelope 86</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(precedes ((1 0) (5 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (contracted (esk-1 esk)) n (8 0) (enc n esk))
(label 86)
(parent 83)
(unrealized (5 0) (6 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k87">Item <a href="#t59">87</a>, Parent: <a href="#k83">83</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='189.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='489.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='414.960' x2='439.800' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" n nonce aik-0)</title>
<circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>n</title>
<circle style='fill: orange;' cx='939.600' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 536.760 227.460 933.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
<text
x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 87</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
(precedes ((1 2) (9 1)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)) ((9 2) (8 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) n (8 0) (enc n esk))
(label 87)
(parent 83)
(unrealized (9 1))
(comment "empty cohort"))</pre>
<p id="k88">Item <a href="#t59">88</a>, Parent: <a href="#k83">83</a>, Children: <a href="#k91">91</a> <a href="#k92">92</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='189.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 189.960 Q 892.020 225.660 844.439 261.359'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='189.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: red;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 536.760 77.460 933.600 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 88</text></svg></div>
<pre>(defskeleton envelope
(vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(precedes ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
((9 1) (8 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-listener esk) n (8 0) (enc n esk))
(label 88)
(parent 83)
(unrealized (9 0))
(comment "2 in cohort - 2 not yet seen"))</pre>
<p id="k89">Item <a href="#t59">89</a>, Parent: <a href="#k86">86</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 264.960 Q 792.343 301.118 645.086 412.276'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='939.600' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 139.920 114.960 Q 536.773 114.680 933.626 189.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
</g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 89</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((1 0) (5 0)) ((1 0) (9 1)) ((1 2) (8 0)) ((1 4) (2 0))
((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
((8 1) (7 0)) ((9 2) (6 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (6 0)
(enc esk tpmkey))
(label 89)
(parent 86)
(unrealized (5 0) (9 1))
(comment "empty cohort"))</pre>
<p id="k90">Item <a href="#t59">90</a>, Parent: <a href="#k86">86</a>, Child: <a href="#k93">93</a>.</p>
<div>
<svg
class='diagram' width='979.560pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 979.560 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='939.600' y1='114.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 939.600 339.960 Q 792.570 339.232 645.541 413.504'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='939.600' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 139.920 114.960 Q 536.760 77.460 933.600 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='489.780' y='39.960'
style='text-anchor: middle;'>envelope 90</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
((8 1) (7 0)) ((9 3) (6 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
(enc esk tpmkey))
(label 90)
(parent 86)
(unrealized (5 0) (9 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k91">Item <a href="#t59">91</a>, Parent: <a href="#k88">88</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='264.960' x2='939.600' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='339.960' x2='839.640' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='414.960' x2='739.680' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='489.960' x2='639.720' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='414.960' x2='539.760' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='414.960' x2='439.800' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc "quote" esk nonce aik-0)</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<path
d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='414.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
<path
d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
<path
d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='564.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
<path
d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='489.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.797 264.640 833.674 339.321'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 586.750 114.711 1033.581 189.462'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 91</text></svg></div>
<pre>(defskeleton envelope
(vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
(precedes ((1 0) (10 1)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
((9 1) (8 0)) ((10 2) (9 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-quote 3) esk (9 0)
(enc esk tpmkey))
(label 91)
(parent 88)
(unrealized (10 1))
(comment "empty cohort"))</pre>
<p id="k92">Item <a href="#t59">92</a>, Parent: <a href="#k88">88</a>, Child: <a href="#k94">94</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='339.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='414.960' x2='839.640' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='489.960' x2='739.680' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='564.960' x2='639.720' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='489.960' x2='539.760' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='489.960' x2='439.800' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='414.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
<path
d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='489.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
<path
d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
<path
d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='639.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
<path
d='M 539.760 714.960 Q 492.780 714.960 445.800 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='639.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 586.740 564.960 633.720 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 439.800 714.960 Q 392.820 714.960 345.840 714.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.847 301.831 833.773 413.702'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 586.740 77.460 1033.560 114.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 92</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
((9 1) (8 0)) ((10 3) (9 0)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation nonce-test (added-strand tpm-decrypt 4) esk (9 0)
(enc esk tpmkey))
(label 92)
(parent 88)
(unrealized (10 1))
(comment "1 in cohort - 1 not yet seen"))</pre>
<p id="k93">Item <a href="#t59">93</a>, Parent: <a href="#k90">90</a>.</p>
<div>
<svg
class='diagram' width='1079.520pt' height='904.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1079.520 904.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='189.960' x2='939.600' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='264.960' x2='839.640' y2='339.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='339.960' x2='739.680' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='414.960' x2='639.720' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='339.960' x2='539.760' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='339.960' x2='439.800' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='564.960' x2='339.840' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='789.960' x2='39.960' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1039.560' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
</g>
<path
d='M 939.600 414.960 Q 792.660 377.460 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='414.960' r='6.000'/></g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
<path
d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk))</title>
<circle cx='839.640' cy='339.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk))</title>
<circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
<path
d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle cx='739.680' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk)))</title>
<circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
<path
d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='489.960' r='6.000'/></g>
<g>
<title>(cat esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
<path
d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno-1 "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
<path
d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk tpmkey-1))</title>
<circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
<path
d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='414.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
<path
d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<path
d='M 139.920 114.960 Q 536.773 114.680 933.626 189.400'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='939.600' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='539.760' y='39.960'
style='text-anchor: middle;'>envelope 93</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk) (tpmkey tpmkey-1))
(deflistener
(cat esk (hash "execute transport" (hash "extend" (enc n esk)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk))))
(deflistener (cat "extend" (enc n esk)))
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
((8 1) (7 0)) ((9 3) (6 0)) ((10 2) (9 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (9 1))
(label 93)
(parent 90)
(unrealized (5 0) (10 1))
(comment "empty cohort"))</pre>
<p id="k94">Item <a href="#t59">94</a>, Parent: <a href="#k92">92</a>.</p>
<div>
<svg
class='diagram' width='1179.480pt' height='979.920pt'
xmlns='http://www.w3.org/2000/svg' version='1.1'
viewBox='0 0 1179.480 979.920' font-size='12.000'>
<defs>
<marker
id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
refY='5'>
<path
d='M 0 0 5 5 0 10'
style='stroke-width: 2; fill: none; stroke: black;'/></marker>
</defs>
<line
x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='1039.560' y1='189.960' x2='1039.560' y2='414.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='939.600' y1='414.960' x2='939.600' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='839.640' y1='489.960' x2='839.640' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='739.680' y1='564.960' x2='739.680' y2='639.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='639.720' y1='639.960' x2='639.720' y2='714.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='539.760' y1='564.960' x2='539.760' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='439.800' y1='564.960' x2='439.800' y2='789.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='339.840' y1='639.960' x2='339.840' y2='864.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='239.880' y1='414.960' x2='239.880' y2='489.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='139.920' y1='114.960' x2='139.920' y2='564.960'
style='stroke-width: 0.960; stroke: gray;'/>
<line
x1='39.960' y1='864.960' x2='39.960' y2='939.960'
style='stroke-width: 0.960; stroke: gray;'/>
<path
d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1)</title>
<circle cx='1139.520' cy='264.960' r='6.000'/></g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
</g>
<g><title>(cat "quote" nonce)</title>
<circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
</g>
<path
d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
</g>
<g><title>pcr</title>
<circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
</g>
<g><title>(enc "created" tpmkey pcr aik-0)</title>
<circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
</g>
<g><title>(cat "decrypt" (enc esk tpmkey))</title>
<circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
</g>
<path
d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>esk</title><circle cx='939.600' cy='489.960' r='6.000'/></g>
<g><title>esk</title>
<circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
<path
d='M 839.640 564.960 Q 792.660 564.960 745.680 564.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle cx='839.640' cy='564.960' r='6.000'/></g>
<g><title>(cat "extend" (enc n esk-1))</title>
<circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
<path
d='M 739.680 639.960 Q 692.700 639.960 645.720 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle cx='739.680' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (hash "extend" (enc n esk-1)))</title>
<circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
<path
d='M 639.720 714.960 Q 592.740 714.960 545.760 714.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle cx='639.720' cy='714.960' r='6.000'/></g>
<g>
<title>(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false")</title>
<circle style='fill: blue;' cx='639.720' cy='639.960' r='6.000'/></g>
<path
d='M 539.760 789.960 Q 492.780 789.960 445.800 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g><title>(tran state (hash n state))</title>
<circle style='fill: gray;' cx='539.760' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk-1)) tno-1 "false" (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1 tno-1 "false"))</title>
<circle style='fill: blue;' cx='539.760' cy='714.960' r='6.000'/></g>
<path
d='M 539.760 639.960 Q 586.740 639.960 633.720 639.960'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(cat "establish transport" tne-1)</title>
<circle cx='539.760' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1))</title>
<circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
<path
d='M 439.800 789.960 Q 392.820 789.960 345.840 789.960'
style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(tran (hash n state) (hash "obtain" (hash n state)))</title>
<circle style='fill: gray;' cx='439.800' cy='789.960' r='6.000'/></g>
<g>
<title>(cat "execute transport" (cat "extend" (enc "obtain" esk-0)) tno-0 "false" (hash esk-0 (hash "execute transport" (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0 "false"))</title>
<circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne-0)</title>
<circle cx='439.800' cy='639.960' r='6.000'/></g>
<g>
<title>(cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0))</title>
<circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
<path
d='M 339.840 864.960 Q 192.900 827.460 45.960 864.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>v</title><circle cx='339.840' cy='864.960' r='6.000'/></g>
<g><title>(hash "obtain" (hash n state))</title>
<circle style='fill: gray;' cx='339.840' cy='789.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
<g><title>(cat "decrypt" (enc v k))</title>
<circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
<path
d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle cx='239.880' cy='489.960' r='6.000'/></g>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
<path
d='M 139.920 564.960 Q 237.071 563.906 334.222 637.853'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g><title>(enc v k)</title>
<circle cx='139.920' cy='564.960' r='6.000'/></g>
<g>
<title>(enc "created" k (hash "obtain" (hash n state)) aik)</title>
<circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
<path
d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(enc "create key" (hash "obtain" (hash n state)) esk1)</title>
<circle cx='139.920' cy='414.960' r='6.000'/></g>
<g><title>state</title>
<circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
<path
d='M 139.920 264.960 Q 486.924 339.042 833.928 488.123'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "execute transport" (cat "extend" (enc n esk)) tno "false" (hash esk (hash "execute transport" (hash "extend" (enc n esk))) tne tno "false"))</title>
<circle cx='139.920' cy='264.960' r='6.000'/></g>
<g><title>(cat "establish transport" tne)</title>
<circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
<path
d='M 139.920 114.960 Q 586.750 114.711 1033.581 189.462'
style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
<g>
<title>(cat "establish transport" tpmkey (enc esk tpmkey))</title>
<circle cx='139.920' cy='114.960' r='6.000'/></g>
<g><title>v</title><circle cx='39.960' cy='939.960' r='6.000'/></g>
<g><title>v</title>
<circle style='fill: blue;' cx='39.960' cy='864.960' r='6.000'/></g>
<g>
<title>((nonce nonce) (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))</title>
<text
x='1139.520' y='77.460'
style='text-anchor: middle;'>tpm-quote</text></g>
<g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
<text
x='1039.560' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
<text
x='539.760' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((value "obtain") (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
<text
x='439.800' y='77.460'
style='text-anchor: middle;'>tpm-extend-enc</text></g>
<g>
<title>((m v) (pcr (hash "obtain" (hash n state))) (k k) (aik aik))</title>
<text
x='339.840' y='77.460'
style='text-anchor: middle;'>tpm-decrypt</text></g>
<g>
<title>((pcr (hash "obtain" (hash n state))) (esk esk1) (k k) (aik aik))</title>
<text
x='239.880' y='77.460'
style='text-anchor: middle;'>tpm-create-key</text></g>
<g>
<title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
<text
x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
<text
x='589.740' y='39.960'
style='text-anchor: middle;'>envelope 94</text></svg></div>
<pre>(defskeleton envelope
(vars (state pcr nonce mesg)
(v n tne tno tne-0 tno-0 tne-1 tno-1 data)
(esk1 esk esk-0 esk-1 skey)
(k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
(deflistener v)
(defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
(esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
(defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
(esk esk1) (k k) (aik aik))
(defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
(k k) (aik aik))
(defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
(tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
(defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
(tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
(deflistener
(cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
tne-1 tno-1 "false"))
(deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
(deflistener (cat "extend" (enc n esk-1)))
(deflistener esk)
(defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
(defstrand tpm-quote 3 (nonce nonce)
(pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
(precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
((9 1) (8 0)) ((10 3) (9 0)) ((11 2) (10 1)))
(leadsto ((4 3) (3 2)) ((5 3) (4 3)))
(neq (tno n))
(non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
(invk tpmkey-1))
(uniq-orig v n tno tne-0 tne-1 esk k)
(operation encryption-test (added-strand tpm-quote 3)
(enc "created" tpmkey pcr aik-0) (10 1))
(label 94)
(parent 92)
(unrealized (11 1))
(comment "empty cohort"))</pre>
</body>
</html>