From 48c2816bef33e81d59a93ea8246ac2c6b849b785 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 31 Jan 2004 10:12:58 +0000 Subject: [PATCH] Add an interaction diagram to CVS. It still to be edited, scaled, and incorporated into the paper. Maybe more. A good caption might be: "Alice builds a two-hop circuit and begins fetching a web page." svn:r1042 --- doc/interaction.eps | 463 ++++++++++++++++++++++++++++++++++++++++++++ doc/interaction.fig | 122 ++++++++++++ doc/interaction.pdf | Bin 0 -> 35551 bytes 3 files changed, 585 insertions(+) create mode 100644 doc/interaction.eps create mode 100644 doc/interaction.fig create mode 100644 doc/interaction.pdf diff --git a/doc/interaction.eps b/doc/interaction.eps new file mode 100644 index 0000000000..edb3119f05 --- /dev/null +++ b/doc/interaction.eps @@ -0,0 +1,463 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: interaction.fig +%%Creator: fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Sat Jan 31 05:09:42 2004 +%%For: nickm@totoro.wangafu.net () +%%BoundingBox: 0 0 449 235 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 235 moveto 0 0 lineto 449 0 lineto 449 235 lineto closepath clip newpath +-62.3 239.8 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/reencdict 12 dict def /ReEncode { reencdict begin +/newcodesandnames exch def /newfontname exch def /basefontname exch def +/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def +basefontdict { exch dup /FID ne { dup /Encoding eq +{ exch dup length array copy newfont 3 1 roll put } +{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall +newfont /FontName newfontname put newcodesandnames aload pop +128 1 255 { newfont /Encoding get exch /.notdef put } for +newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat +newfontname newfont definefont pop end } def +/isovec [ +8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde +8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis +8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron +8#220 /dotlessi 8#230 /oe 8#231 /OE +8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling +8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis +8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot +8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus +8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph +8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine +8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf +8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute +8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring +8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute +8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute +8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve +8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply +8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex +8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave +8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring +8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute +8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute +8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve +8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide +8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex +8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def +/Times-Bold /Times-Bold-iso isovec ReEncode +/Times-Roman /Times-Roman-iso isovec ReEncode +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit + 0.06000 0.06000 sc +% +% Fig objects follow +% +% Polyline +15.000 slw +n 6000 300 m + 6000 3975 l gs col0 s gr +% Polyline +7.500 slw +gs clippath +3615 555 m 3615 495 l 3464 495 l 3584 525 l 3464 555 l cp +eoclip +n 1200 525 m + 3600 525 l gs col0 s gr gr + +% arrowhead +n 3464 555 m 3584 525 l 3464 495 l 3464 555 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 795 m 1185 855 l 1336 855 l 1216 825 l 1336 795 l cp +eoclip +n 3600 825 m + 1200 825 l gs col0 s gr gr + +% arrowhead +n 1336 795 m 1216 825 l 1336 855 l 1336 795 l cp gs 0.00 setgray ef gr col0 s +% Polyline +15.000 slw +n 1200 300 m + 1200 3975 l gs col0 s gr +% Polyline +7.500 slw +gs clippath +3615 1155 m 3615 1095 l 3464 1095 l 3584 1125 l 3464 1155 l cp +eoclip +n 1200 1125 m + 3600 1125 l gs col0 s gr gr + +% arrowhead +n 3464 1155 m 3584 1125 l 3464 1095 l 3464 1155 l cp gs 0.00 setgray ef gr col0 s +% Polyline +15.000 slw +n 3600 300 m + 3600 3975 l gs col0 s gr +% Polyline +7.500 slw +gs clippath +6015 1230 m 6015 1170 l 5864 1170 l 5984 1200 l 5864 1230 l cp +eoclip +n 3600 1200 m + 6000 1200 l gs col0 s gr gr + +% arrowhead +n 5864 1230 m 5984 1200 l 5864 1170 l 5864 1230 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3585 1470 m 3585 1530 l 3736 1530 l 3616 1500 l 3736 1470 l cp +eoclip +n 6000 1500 m + 3600 1500 l gs col0 s gr gr + +% arrowhead +n 3736 1470 m 3616 1500 l 3736 1530 l 3736 1470 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 1545 m 1185 1605 l 1336 1605 l 1216 1575 l 1336 1545 l cp +eoclip +n 3600 1575 m + 1200 1575 l gs col0 s gr gr + +% arrowhead +n 1336 1545 m 1216 1575 l 1336 1605 l 1336 1545 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 45] 45 sd +n 1050 1800 m + 8325 1800 l gs col0 s gr [] 0 sd +% Polyline +gs clippath +3615 2130 m 3615 2070 l 3464 2070 l 3584 2100 l 3464 2130 l cp +eoclip +n 1200 2100 m + 3600 2100 l gs col0 s gr gr + +% arrowhead +n 3464 2130 m 3584 2100 l 3464 2070 l 3464 2130 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6015 2205 m 6015 2145 l 5864 2145 l 5984 2175 l 5864 2205 l cp +eoclip +n 3600 2175 m + 6000 2175 l gs col0 s gr gr + +% arrowhead +n 5864 2205 m 5984 2175 l 5864 2145 l 5864 2205 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +8190 2430 m 8190 2370 l 8039 2370 l 8159 2400 l 8039 2430 l cp +5985 2370 m 5985 2430 l 6136 2430 l 6016 2400 l 6136 2370 l cp +eoclip +n 6000 2400 m + 8175 2400 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 6136 2370 m 6016 2400 l 6136 2430 l 6136 2370 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 8039 2430 m 8159 2400 l 8039 2370 l 8039 2430 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3585 2520 m 3585 2580 l 3736 2580 l 3616 2550 l 3736 2520 l cp +eoclip +n 6000 2550 m + 3600 2550 l gs col0 s gr gr + +% arrowhead +n 3736 2520 m 3616 2550 l 3736 2580 l 3736 2520 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 2595 m 1185 2655 l 1336 2655 l 1216 2625 l 1336 2595 l cp +eoclip +n 3600 2625 m + 1200 2625 l gs col0 s gr gr + +% arrowhead +n 1336 2595 m 1216 2625 l 1336 2655 l 1336 2595 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3615 3030 m 3615 2970 l 3464 2970 l 3584 3000 l 3464 3030 l cp +eoclip +n 1200 3000 m + 3600 3000 l gs col0 s gr gr + +% arrowhead +n 3464 3030 m 3584 3000 l 3464 2970 l 3464 3030 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6015 3105 m 6015 3045 l 5864 3045 l 5984 3075 l 5864 3105 l cp +eoclip +n 3600 3075 m + 6000 3075 l gs col0 s gr gr + +% arrowhead +n 5864 3105 m 5984 3075 l 5864 3045 l 5864 3105 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +8190 3180 m 8190 3120 l 8039 3120 l 8159 3150 l 8039 3180 l cp +eoclip +n 6000 3150 m + 8175 3150 l gs col0 s gr gr + +% arrowhead +n 8039 3180 m 8159 3150 l 8039 3120 l 8039 3180 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +5985 3420 m 5985 3480 l 6136 3480 l 6016 3450 l 6136 3420 l cp +eoclip +n 8175 3450 m + 6000 3450 l gs col0 s gr gr + +% arrowhead +n 6136 3420 m 6016 3450 l 6136 3480 l 6136 3420 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +5985 3495 m 5985 3555 l 6136 3555 l 6016 3525 l 6136 3495 l cp +eoclip +n 8175 3525 m + 6000 3525 l gs col0 s gr gr + +% arrowhead +n 6136 3495 m 6016 3525 l 6136 3555 l 6136 3495 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +5985 3570 m 5985 3630 l 6136 3630 l 6016 3600 l 6136 3570 l cp +eoclip +n 8175 3600 m + 6000 3600 l gs col0 s gr gr + +% arrowhead +n 6136 3570 m 6016 3600 l 6136 3630 l 6136 3570 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3585 3495 m 3585 3555 l 3736 3555 l 3616 3525 l 3736 3495 l cp +eoclip +n 6000 3525 m + 3600 3525 l gs col0 s gr gr + +% arrowhead +n 3736 3495 m 3616 3525 l 3736 3555 l 3736 3495 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3585 3645 m 3585 3705 l 3736 3705 l 3616 3675 l 3736 3645 l cp +eoclip +n 6000 3675 m + 3600 3675 l gs col0 s gr gr + +% arrowhead +n 3736 3645 m 3616 3675 l 3736 3705 l 3736 3645 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3585 3570 m 3585 3630 l 3736 3630 l 3616 3600 l 3736 3570 l cp +eoclip +n 6000 3600 m + 3600 3600 l gs col0 s gr gr + +% arrowhead +n 3736 3570 m 3616 3600 l 3736 3630 l 3736 3570 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 3645 m 1185 3705 l 1336 3705 l 1216 3675 l 1336 3645 l cp +eoclip +n 3600 3675 m + 1200 3675 l gs col0 s gr gr + +% arrowhead +n 1336 3645 m 1216 3675 l 1336 3705 l 1336 3645 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 3720 m 1185 3780 l 1336 3780 l 1216 3750 l 1336 3720 l cp +eoclip +n 3600 3750 m + 1200 3750 l gs col0 s gr gr + +% arrowhead +n 1336 3720 m 1216 3750 l 1336 3780 l 1336 3720 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +1185 3795 m 1185 3855 l 1336 3855 l 1216 3825 l 1336 3795 l cp +eoclip +n 3600 3825 m + 1200 3825 l gs col0 s gr gr + +% arrowhead +n 1336 3795 m 1216 3825 l 1336 3855 l 1336 3795 l cp gs 0.00 setgray ef gr col0 s +% Polyline +15.000 slw +n 8175 300 m + 8175 3975 l gs col0 s gr +% Polyline +7.500 slw +n 6300 825 m 7950 825 l 7950 1725 l 6300 1725 l + cp gs col7 1.00 shd ef gr gs col0 s gr +/Times-Bold-iso ff 180.00 scf sf +3375 225 m +gs 1 -1 sc (OR 1) col0 sh gr +/Times-Bold-iso ff 180.00 scf sf +1050 225 m +gs 1 -1 sc (Alice) col0 sh gr +/Times-Bold-iso ff 180.00 scf sf +5775 225 m +gs 1 -1 sc (OR 2) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +6075 3075 m +gs 1 -1 sc ("HTTP GET...") col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +4800 3975 m +gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 3975 m +gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +2400 3975 m +gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 2325 m +gs 1 -1 sc (\(TCP handshake\)) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Bold-iso ff 180.00 scf sf +7875 225 m +gs 1 -1 sc (website) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 1425 m +gs 1 -1 sc ({X}--AES encryption) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 1200 m +gs 1 -1 sc (E\(x\)--RSA encryption) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 975 m +gs 1 -1 sc (Legend:) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +2400 225 m +gs 1 -1 sc (\(link is TLS-encrypted\)) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +1275 1050 m +gs 1 -1 sc (Relay c1 {Extend, OR2, E\(g^x2\)}) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +1275 2025 m +gs 1 -1 sc (Relay c1{{Begin :80}}) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3525 1500 m +gs 1 -1 sc (Relay c1 {Extended, g^y2, H\(K2\)}) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3675 2100 m +gs 1 -1 sc (Relay c2{Begin :80}) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3525 2550 m +gs 1 -1 sc (Relay c1{{Connected}}) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +5925 2475 m +gs 1 -1 sc (Relay c2{Connected}) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +1275 2925 m +gs 1 -1 sc (Relay c1{{Data, "HTTP GET..."}}) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3675 3000 m +gs 1 -1 sc (Relay c2{Data, "HTTP GET..."}) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +4800 225 m +gs 1 -1 sc (\(link is TLS encryped\)) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7050 225 m +gs 1 -1 sc (\(unencrypted\)) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +7125 1650 m +gs 1 -1 sc (cN--a circID) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3525 3600 m +gs 1 -1 sc (Relay c1{{Data, \(r response\)}}) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +8100 3375 m +gs 1 -1 sc (\(response\)) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +5925 3450 m +gs 1 -1 sc (Relay c2{Data, \(response\)}) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +5925 1425 m +gs 1 -1 sc (Created c2, g^y2, H\(K2\)) dup sw pop neg 0 rm col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3675 1125 m +gs 1 -1 sc (Create c2, E\(g^x2\)) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +1275 450 m +gs 1 -1 sc (Create c1, E\(g^x1\)) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +3525 750 m +gs 1 -1 sc (Created c1, g^y1, H\(K1\)) dup sw pop neg 0 rm col0 sh gr +$F2psEnd +rs diff --git a/doc/interaction.fig b/doc/interaction.fig new file mode 100644 index 0000000000..d7c47f9dbf --- /dev/null +++ b/doc/interaction.fig @@ -0,0 +1,122 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 6000 300 6000 3975 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1200 525 3600 525 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 825 1200 825 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 1200 300 1200 3975 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1200 1125 3600 1125 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3600 300 3600 3975 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 1200 6000 1200 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1500 3600 1500 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 1575 1200 1575 +2 1 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 1050 1800 8325 1800 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1200 2100 3600 2100 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 2175 6000 2175 +2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 6000 2400 8175 2400 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 2550 3600 2550 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 2625 1200 2625 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1200 3000 3600 3000 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3075 6000 3075 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 3150 8175 3150 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8175 3450 6000 3450 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8175 3525 6000 3525 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8175 3600 6000 3600 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 3525 3600 3525 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 3675 3600 3675 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 3600 3600 3600 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3675 1200 3675 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3750 1200 3750 +2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3600 3825 1200 3825 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 8175 300 8175 3975 +2 2 0 1 0 7 50 0 20 3.000 0 0 -1 0 0 5 + 6300 825 7950 825 7950 1725 6300 1725 6300 825 +4 0 0 50 0 2 12 0.0000 4 135 450 3375 225 OR 1\001 +4 0 0 50 0 2 12 0.0000 4 135 420 1050 225 Alice\001 +4 0 0 50 0 2 12 0.0000 4 135 450 5775 225 OR 2\001 +4 0 0 50 0 0 10 0.0000 4 105 960 6075 3075 "HTTP GET..."\001 +4 1 0 50 0 0 10 0.0000 4 15 135 4800 3975 ...\001 +4 1 0 50 0 0 10 0.0000 4 15 135 7125 3975 ...\001 +4 1 0 50 0 0 10 0.0000 4 15 135 2400 3975 ...\001 +4 1 0 50 0 0 10 0.0000 4 135 1050 7125 2325 (TCP handshake)\001 +4 0 0 50 0 2 12 0.0000 4 135 630 7875 225 website\001 +4 1 0 50 0 0 10 0.0000 4 135 1335 7125 1425 {X}--AES encryption\001 +4 1 0 50 0 0 10 0.0000 4 135 1410 7125 1200 E(x)--RSA encryption\001 +4 1 0 50 0 0 10 0.0000 4 135 480 7125 975 Legend:\001 +4 1 0 50 0 0 10 0.0000 4 135 1455 2400 225 (link is TLS-encrypted)\001 +4 0 0 50 0 0 10 0.0000 4 135 2085 1275 1050 Relay c1 {Extend, OR2, E(g^x2)}\001 +4 0 0 50 0 0 10 0.0000 4 135 1965 1275 2025 Relay c1{{Begin :80}}\001 +4 2 0 50 0 0 10 0.0000 4 135 2190 3525 1500 Relay c1 {Extended, g^y2, H(K2)}\001 +4 0 0 50 0 0 10 0.0000 4 135 1845 3675 2100 Relay c2{Begin :80}\001 +4 2 0 50 0 0 10 0.0000 4 135 1410 3525 2550 Relay c1{{Connected}}\001 +4 2 0 50 0 0 10 0.0000 4 135 1290 5925 2475 Relay c2{Connected}\001 +4 0 0 50 0 0 10 0.0000 4 135 2085 1275 2925 Relay c1{{Data, "HTTP GET..."}}\001 +4 0 0 50 0 0 10 0.0000 4 135 1965 3675 3000 Relay c2{Data, "HTTP GET..."}\001 +4 1 0 50 0 0 10 0.0000 4 135 1365 4800 225 (link is TLS encryped)\001 +4 1 0 50 0 0 10 0.0000 4 135 870 7050 225 (unencrypted)\001 +4 1 0 50 0 0 10 0.0000 4 105 780 7125 1650 cN--a circID\001 +4 2 0 50 0 0 10 0.0000 4 135 1860 3525 3600 Relay c1{{Data, (r response)}}\001 +4 2 0 50 0 0 10 0.0000 4 135 645 8100 3375 (response)\001 +4 2 0 50 0 0 10 0.0000 4 135 1650 5925 3450 Relay c2{Data, (response)}\001 +4 2 0 50 0 0 10 0.0000 4 135 1545 5925 1425 Created c2, g^y2, H(K2)\001 +4 0 0 50 0 0 10 0.0000 4 135 1170 3675 1125 Create c2, E(g^x2)\001 +4 0 0 50 0 0 10 0.0000 4 135 1170 1275 450 Create c1, E(g^x1)\001 +4 2 0 50 0 0 10 0.0000 4 135 1545 3525 750 Created c1, g^y1, H(K1)\001 diff --git a/doc/interaction.pdf b/doc/interaction.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b4a6d42a5a1d6c14f3f0fced297c5b34b6a9f45b GIT binary patch literal 35551 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 literal 0 HcmV?d00001