This commit is contained in:
parent
6155955cca
commit
79b0491a75
@ -260,11 +260,11 @@
|
|||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
</diagram>
|
</diagram>
|
||||||
<diagram id="4Sb7mgJDpsadGym-U4wz" name="Echanges">
|
<diagram id="4Sb7mgJDpsadGym-U4wz" name="Echanges">
|
||||||
<mxGraphModel dx="1434" dy="793" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
<mxGraphModel dx="1062" dy="587" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0" />
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="1" parent="0" />
|
||||||
<mxCell id="b_xV4iUWIxmdZCAYY4YR-1" value="0" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
<mxCell id="b_xV4iUWIxmdZCAYY4YR-1" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="160" y="120" width="440" height="120" as="geometry" />
|
<mxGeometry x="160" y="120" width="440" height="120" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="O_eM33N56VtHnDaMz1H4-1" value="ALICE" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};participant=umlEntity;strokeWidth=2;" parent="1" vertex="1">
|
<mxCell id="O_eM33N56VtHnDaMz1H4-1" value="ALICE" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};participant=umlEntity;strokeWidth=2;" parent="1" vertex="1">
|
||||||
@ -281,55 +281,58 @@
|
|||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="n3lF8vaYaHAhAfaeaFZn-6" value="<div>sha256 (</div><div>numéro alice +</div><div>numéro bob +</div><div>timestamp +</div><div>random<br></div><div>)<br></div>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=7;" parent="n3lF8vaYaHAhAfaeaFZn-1" vertex="1">
|
<mxCell id="n3lF8vaYaHAhAfaeaFZn-6" value="<div>sha256 (</div><div>numéro alice +</div><div>numéro bob +</div><div>timestamp +</div><div>random<br></div><div>) / ~2 (left part)<br></div>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=7;" parent="n3lF8vaYaHAhAfaeaFZn-1" vertex="1">
|
||||||
<mxGeometry y="25" width="100" height="55" as="geometry" />
|
<mxGeometry y="25" width="100" height="55" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="n3lF8vaYaHAhAfaeaFZn-2" value="Version" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="n3lF8vaYaHAhAfaeaFZn-2" value="Version" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="312.5" y="130" width="105" height="80" as="geometry" />
|
<mxGeometry x="305" y="130" width="58.75" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-1" value="(0-128)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="n3lF8vaYaHAhAfaeaFZn-2">
|
||||||
|
<mxGeometry x="3.75" y="30" width="51.25" height="25" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="n3lF8vaYaHAhAfaeaFZn-4" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="n3lF8vaYaHAhAfaeaFZn-4" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="130" width="105" height="80" as="geometry" />
|
<mxGeometry x="455" y="130" width="90" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="n3lF8vaYaHAhAfaeaFZn-7" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="n3lF8vaYaHAhAfaeaFZn-4" vertex="1">
|
<mxCell id="n3lF8vaYaHAhAfaeaFZn-7" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="n3lF8vaYaHAhAfaeaFZn-4" vertex="1">
|
||||||
<mxGeometry x="23" y="25" width="60" height="30" as="geometry" />
|
<mxGeometry x="15" y="25" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-1" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;rotation=-180;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-1" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;rotation=-180;" parent="1" vertex="1">
|
||||||
<mxGeometry x="280" y="300" width="410" height="120" as="geometry" />
|
<mxGeometry x="280" y="280" width="410" height="190" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-2" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-2" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="300" y="310" width="90" height="80" as="geometry">
|
<mxGeometry x="300" y="290" width="90" height="60" as="geometry">
|
||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-3" value="timestamp" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;strokeWidth=1;" parent="XvZTtdEB18xY6m2a5fJO-2" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-3" value="timestamp" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;strokeWidth=1;" parent="XvZTtdEB18xY6m2a5fJO-2" vertex="1">
|
||||||
<mxGeometry x="11.25" y="32.5" width="67.5" height="25" as="geometry" />
|
<mxGeometry x="11.25" y="27.5" width="67.5" height="25" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-4" value="Version" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-4" value="Version" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="410" y="310" width="58.75" height="80" as="geometry" />
|
<mxGeometry x="405.63" y="290" width="58.75" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-11" value="0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-4" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-11" value="0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-4" vertex="1">
|
||||||
<mxGeometry x="-1.25" y="30" width="60" height="30" as="geometry" />
|
<mxGeometry y="25" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-5" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-5" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="560" y="310" width="105" height="80" as="geometry" />
|
<mxGeometry x="590" y="380" width="85" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-6" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-5" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-6" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-5" vertex="1">
|
||||||
<mxGeometry x="23" y="25" width="60" height="30" as="geometry" />
|
<mxGeometry x="12.5" y="25" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-9" value="Answer" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-9" value="Answer" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="486.25" y="310" width="57.5" height="80" as="geometry" />
|
<mxGeometry x="482.5" y="290" width="57.5" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-10" value="<div>YES</div><div>NO<br></div>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-10" value="<div>YES</div><div>NO<br></div>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="486.25" y="340" width="53.75" height="30" as="geometry" />
|
<mxGeometry x="484.38" y="315" width="53.75" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-13" value="HANDSHAKE" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=23;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-13" value="HANDSHAKE" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=23;" parent="1" vertex="1">
|
||||||
<mxGeometry x="350" y="430" width="170" height="40" as="geometry" />
|
<mxGeometry x="350" y="510" width="170" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-14" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-14" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="160" y="490" width="410" height="220" as="geometry" />
|
<mxGeometry x="160" y="570" width="410" height="220" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-15" value="Clé éphémère" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-15" value="Clé éphémère" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="170" y="500" width="105" height="80" as="geometry">
|
<mxGeometry x="170" y="580" width="105" height="80" as="geometry">
|
||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@ -337,28 +340,28 @@
|
|||||||
<mxGeometry y="30" width="100" height="40" as="geometry" />
|
<mxGeometry y="30" width="100" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-17" value="Signature" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-17" value="Signature" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="285" y="500" width="105" height="80" as="geometry" />
|
<mxGeometry x="285" y="580" width="105" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-14" value="PubkeyFixe. sign(clé éphémère)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-17" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-14" value="PubkeyFixe. sign(clé éphémère)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-17" vertex="1">
|
||||||
<mxGeometry y="20" width="100" height="60" as="geometry" />
|
<mxGeometry y="20" width="100" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-18" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-18" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="486.25" y="500" width="65" height="80" as="geometry" />
|
<mxGeometry x="486.25" y="580" width="65" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XvZTtdEB18xY6m2a5fJO-19" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-18" vertex="1">
|
<mxCell id="XvZTtdEB18xY6m2a5fJO-19" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="XvZTtdEB18xY6m2a5fJO-18" vertex="1">
|
||||||
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-15" value="PFS" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-15" value="PFS" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="402.81" y="500" width="71.88" height="80" as="geometry" />
|
<mxGeometry x="402.81" y="580" width="71.88" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-16" value="hash( preuve de convo précédente)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" parent="pP7SjZfcCiBg3d1TCkzP-15" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-16" value="hash( preuve de convo précédente)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" parent="pP7SjZfcCiBg3d1TCkzP-15" vertex="1">
|
||||||
<mxGeometry x="6.57" y="30" width="60" height="40" as="geometry" />
|
<mxGeometry x="6.57" y="30" width="60" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-17" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;rotation=-180;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-17" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;rotation=-180;" parent="1" vertex="1">
|
||||||
<mxGeometry x="285" y="750" width="410" height="180" as="geometry" />
|
<mxGeometry x="285" y="830" width="410" height="180" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-43" value="Clé éphémère" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-43" value="Clé éphémère" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="305" y="760" width="105" height="80" as="geometry">
|
<mxGeometry x="305" y="840" width="105" height="80" as="geometry">
|
||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@ -366,25 +369,25 @@
|
|||||||
<mxGeometry y="30" width="100" height="40" as="geometry" />
|
<mxGeometry y="30" width="100" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-45" value="Signature" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-45" value="Signature" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="420" y="760" width="105" height="80" as="geometry" />
|
<mxGeometry x="420" y="840" width="105" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-46" value="PubkeyFixe. sign(clé éphémère)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pP7SjZfcCiBg3d1TCkzP-45" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-46" value="PubkeyFixe. sign(clé éphémère)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pP7SjZfcCiBg3d1TCkzP-45" vertex="1">
|
||||||
<mxGeometry y="20" width="100" height="60" as="geometry" />
|
<mxGeometry y="20" width="100" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-47" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-47" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="621.25" y="760" width="65" height="80" as="geometry" />
|
<mxGeometry x="621.25" y="840" width="65" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-48" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pP7SjZfcCiBg3d1TCkzP-47" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-48" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pP7SjZfcCiBg3d1TCkzP-47" vertex="1">
|
||||||
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-49" value="PFS" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-49" value="PFS" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="537.81" y="760" width="71.88" height="80" as="geometry" />
|
<mxGeometry x="537.81" y="840" width="71.88" height="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-50" value="hash( preuve de convo précédente )" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" parent="pP7SjZfcCiBg3d1TCkzP-49" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-50" value="hash( preuve de convo précédente )" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" parent="pP7SjZfcCiBg3d1TCkzP-49" vertex="1">
|
||||||
<mxGeometry x="6.57" y="30" width="60" height="40" as="geometry" />
|
<mxGeometry x="6.57" y="30" width="60" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-54" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-54" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="182.5" y="610" width="80" height="70" as="geometry">
|
<mxGeometry x="182.5" y="690" width="80" height="70" as="geometry">
|
||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@ -392,7 +395,7 @@
|
|||||||
<mxGeometry x="6.25" y="32.5" width="67.5" height="25" as="geometry" />
|
<mxGeometry x="6.25" y="32.5" width="67.5" height="25" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-56" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-56" value="Timestamp" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="606.25" y="850" width="80" height="70" as="geometry">
|
<mxGeometry x="606.25" y="930" width="80" height="70" as="geometry">
|
||||||
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
<mxRectangle x="210" y="130" width="80" height="30" as="alternateBounds" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@ -400,58 +403,124 @@
|
|||||||
<mxGeometry x="6.25" y="32.5" width="67.5" height="25" as="geometry" />
|
<mxGeometry x="6.25" y="32.5" width="67.5" height="25" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-58" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-58" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0;dx=10;notch=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="160" y="1080" width="360" height="110" as="geometry" />
|
<mxGeometry x="160" y="1160" width="360" height="230" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-59" value="ENCRYPTED COMS" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=23;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-59" value="ENCRYPTED COMS" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=23;" parent="1" vertex="1">
|
||||||
<mxGeometry x="305" y="1020" width="240" height="40" as="geometry" />
|
<mxGeometry x="305" y="1100" width="240" height="40" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-60" value="256b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-60" value="129b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="200" y="210" width="60" height="30" as="geometry" />
|
<mxGeometry x="200" y="210" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-61" value="7b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-61" value="7b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="335" y="210" width="60" height="30" as="geometry" />
|
<mxGeometry x="303.75" y="210" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-62" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-62" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="463" y="210" width="60" height="30" as="geometry" />
|
<mxGeometry x="470" y="210" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-63" value="= 295<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">b (+1)</span>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-63" value="= 172b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="530" y="210" width="60" height="30" as="geometry" />
|
<mxGeometry x="530" y="210" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-66" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-66" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="315" y="390" width="60" height="30" as="geometry" />
|
<mxGeometry x="313" y="350" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-67" value="7b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-67" value="7b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="408.75" y="390" width="60" height="30" as="geometry" />
|
<mxGeometry x="406.75" y="350" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-68" value="1b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-68" value="1b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="484" y="390" width="60" height="30" as="geometry" />
|
<mxGeometry x="479.25" y="350" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-69" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-69" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="582.5" y="390" width="60" height="30" as="geometry" />
|
<mxGeometry x="600.5" y="440" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-70" value="= 72b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-70" value="= 76b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="630" y="390" width="60" height="30" as="geometry" />
|
<mxGeometry x="426.25" y="420" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-71" value="264b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-71" value="264b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="193" y="580" width="60" height="30" as="geometry" />
|
<mxGeometry x="193" y="660" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-72" value="512b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-72" value="512b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="307.5" y="580" width="60" height="30" as="geometry" />
|
<mxGeometry x="307.5" y="660" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-73" value="256b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-73" value="256b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="409.38" y="580" width="60" height="30" as="geometry" />
|
<mxGeometry x="409.38" y="660" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-74" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-74" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="488.75" y="580" width="60" height="30" as="geometry" />
|
<mxGeometry x="488.75" y="660" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-75" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-75" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="192.5" y="680" width="60" height="30" as="geometry" />
|
<mxGeometry x="192.5" y="760" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-76" value="=1096b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-76" value="=1096b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="315" y="670" width="60" height="30" as="geometry" />
|
<mxGeometry x="315" y="750" width="60" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="pP7SjZfcCiBg3d1TCkzP-77" value="=1096b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
<mxCell id="pP7SjZfcCiBg3d1TCkzP-77" value="=1096b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="327.5" y="890" width="60" height="30" as="geometry" />
|
<mxGeometry x="327.5" y="970" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-1" value="Checksum" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="180" y="1280" width="65" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-2" value="CRC-32" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="_H5URFloX_BVB2BL7kO6-1" vertex="1">
|
||||||
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-3" value="Flag" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="180" y="1170" width="65" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-4" value=""IEM"" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="_H5URFloX_BVB2BL7kO6-3" vertex="1">
|
||||||
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-5" value="nbretry" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="253" y="1170" width="65" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-6" value="0<span style="color: rgba(0, 0, 0, 0); font-family: monospace; font-size: 0px; text-align: start; text-wrap-mode: nowrap;">%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22Flag%22%20style%3D%22swimlane%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22180%22%20y%3D%221090%22%20width%3D%2265%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%223%22%20value%3D%22%26quot%3BIEM%26quot%3B%22%20style%3D%22text%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3BwhiteSpace%3Dwrap%3Brounded%3D0%3B%22%20vertex%3D%221%22%20parent%3D%222%22%3E%3CmxGeometry%20x%3D%222.5%22%20y%3D%2230%22%20width%3D%2260%22%20height%3D%2230%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E</span>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="_H5URFloX_BVB2BL7kO6-5" vertex="1">
|
||||||
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-7" value="msg_len" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="325" y="1170" width="65" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-8" value="XXX" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="_H5URFloX_BVB2BL7kO6-7" vertex="1">
|
||||||
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-9" value="msg" style="swimlane;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="423.75" y="1170" width="65" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-10" value="XXX" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="_H5URFloX_BVB2BL7kO6-9" vertex="1">
|
||||||
|
<mxGeometry x="2.5" y="30" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-11" value="24b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="180" y="1250" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-12" value="8b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="258" y="1250" width="55" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-13" value="16b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="330" y="1250" width="55" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-14" value="yyy" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="428.75" y="1250" width="55" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-15" value="32b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="185" y="1360" width="55" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="_H5URFloX_BVB2BL7kO6-16" value="=80b + yyy" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="389.38" y="1330" width="100" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-2" value="Cypher" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="375" y="130" width="58.75" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-3" value="(0-16)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="pWkGvNQAXuiST1IiWYlx-2">
|
||||||
|
<mxGeometry x="3.75" y="30" width="51.25" height="25" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-4" value="4b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="375" y="210" width="55" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-5" value="Cypher" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="600" y="290" width="58.75" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-6" value="(0-16)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="pWkGvNQAXuiST1IiWYlx-5">
|
||||||
|
<mxGeometry x="3.75" y="30" width="51.25" height="25" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="pWkGvNQAXuiST1IiWYlx-7" value="4b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="601.88" y="350" width="55" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
|
@ -22,91 +22,90 @@ def main():
|
|||||||
print(" connect <port>")
|
print(" connect <port>")
|
||||||
print(" generate_ephemeral_keys")
|
print(" generate_ephemeral_keys")
|
||||||
print(" send_ping")
|
print(" send_ping")
|
||||||
print(" send_handshake")
|
|
||||||
print(" respond_ping <index> <0|1>")
|
print(" respond_ping <index> <0|1>")
|
||||||
|
print(" send_handshake")
|
||||||
print(" generate_ecdhe <index>")
|
print(" generate_ecdhe <index>")
|
||||||
|
print(" derive_hkdf")
|
||||||
print(" auto_responder <on|off>")
|
print(" auto_responder <on|off>")
|
||||||
print(" show_state")
|
print(" show_state")
|
||||||
print(" exit\n")
|
print(" exit\n")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
while True:
|
||||||
line = input("Cmd> ").strip()
|
|
||||||
except EOFError:
|
|
||||||
break
|
|
||||||
if not line:
|
|
||||||
continue
|
|
||||||
|
|
||||||
parts = line.split()
|
|
||||||
cmd = parts[0].lower()
|
|
||||||
|
|
||||||
if cmd == "exit":
|
|
||||||
protocol.stop()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
elif cmd == "show_state":
|
|
||||||
protocol.show_state()
|
|
||||||
|
|
||||||
elif cmd == "set_peer_identity":
|
|
||||||
if len(parts) != 2:
|
|
||||||
print(f"{RED}Usage: set_peer_identity <hex_pubkey>{RESET}")
|
|
||||||
continue
|
|
||||||
protocol.set_peer_identity(parts[1])
|
|
||||||
|
|
||||||
elif cmd == "connect":
|
|
||||||
if len(parts) != 2:
|
|
||||||
print(f"{RED}Usage: connect <port>{RESET}")
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
port = int(parts[1])
|
line = input("Cmd> ").strip()
|
||||||
protocol.connect_to_peer(port)
|
except EOFError:
|
||||||
except ValueError:
|
break
|
||||||
print(f"{RED}Invalid port.{RESET}")
|
if not line:
|
||||||
|
|
||||||
elif cmd == "generate_ephemeral_keys":
|
|
||||||
protocol.generate_ephemeral_keys()
|
|
||||||
|
|
||||||
elif cmd == "send_ping":
|
|
||||||
protocol.send_ping_request()
|
|
||||||
|
|
||||||
elif cmd == "send_handshake":
|
|
||||||
protocol.send_handshake()
|
|
||||||
|
|
||||||
elif cmd == "respond_ping":
|
|
||||||
if len(parts) != 3:
|
|
||||||
print(f"{RED}Usage: respond_ping <index> <answer_code>{RESET}")
|
|
||||||
continue
|
continue
|
||||||
try:
|
parts = line.split()
|
||||||
idx = int(parts[1])
|
cmd = parts[0].lower()
|
||||||
ac = int(parts[2])
|
|
||||||
protocol.respond_to_ping(idx, ac)
|
|
||||||
except ValueError:
|
|
||||||
print(f"{RED}Index and answer_code must be integers.{RESET}")
|
|
||||||
|
|
||||||
elif cmd == "generate_ecdhe":
|
if cmd == "exit":
|
||||||
if len(parts) != 2:
|
protocol.stop()
|
||||||
print(f"{RED}Usage: generate_ecdhe <index>{RESET}")
|
sys.exit(0)
|
||||||
continue
|
|
||||||
try:
|
elif cmd == "show_state":
|
||||||
idx = int(parts[1])
|
protocol.show_state()
|
||||||
protocol.generate_ecdhe(idx)
|
|
||||||
except ValueError:
|
elif cmd == "set_peer_identity":
|
||||||
print(f"{RED}Index must be an integer.{RESET}")
|
if len(parts) != 2:
|
||||||
|
print("Usage: set_peer_identity <hex_pubkey>")
|
||||||
|
continue
|
||||||
|
protocol.set_peer_identity(parts[1])
|
||||||
|
|
||||||
|
elif cmd == "connect":
|
||||||
|
if len(parts) != 2:
|
||||||
|
print("Usage: connect <port>")
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
port = int(parts[1])
|
||||||
|
protocol.connect_to_peer(port)
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid port.")
|
||||||
|
|
||||||
|
elif cmd == "generate_ephemeral_keys":
|
||||||
|
protocol.generate_ephemeral_keys()
|
||||||
|
|
||||||
|
elif cmd == "send_ping":
|
||||||
|
protocol.send_ping_request()
|
||||||
|
|
||||||
|
elif cmd == "send_handshake":
|
||||||
|
protocol.send_handshake()
|
||||||
|
|
||||||
|
elif cmd == "respond_ping":
|
||||||
|
if len(parts) != 3:
|
||||||
|
print("Usage: respond_ping <index> <0|1>")
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
idx = int(parts[1])
|
||||||
|
ac = int(parts[2])
|
||||||
|
protocol.respond_to_ping(idx, ac)
|
||||||
|
except ValueError:
|
||||||
|
print("Index and answer must be integers.")
|
||||||
|
|
||||||
|
elif cmd == "generate_ecdhe":
|
||||||
|
if len(parts) != 2:
|
||||||
|
print("Usage: generate_ecdhe <index>")
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
idx = int(parts[1])
|
||||||
|
protocol.generate_ecdhe(idx)
|
||||||
|
except ValueError:
|
||||||
|
print("Index must be an integer.")
|
||||||
|
|
||||||
|
elif cmd == "derive_hkdf":
|
||||||
|
protocol.derive_hkdf()
|
||||||
|
|
||||||
|
elif cmd == "auto_responder":
|
||||||
|
if len(parts) != 2:
|
||||||
|
print("Usage: auto_responder <on|off>")
|
||||||
|
continue
|
||||||
|
arg = parts[1].lower()
|
||||||
|
protocol.enable_auto_responder(arg == "on")
|
||||||
|
|
||||||
elif cmd == "auto_responder":
|
|
||||||
if len(parts) != 2:
|
|
||||||
print(f"{RED}Usage: auto_responder <on|off>{RESET}")
|
|
||||||
continue
|
|
||||||
arg = parts[1].lower()
|
|
||||||
if arg == "on":
|
|
||||||
protocol.enable_auto_responder(True)
|
|
||||||
elif arg == "off":
|
|
||||||
protocol.enable_auto_responder(False)
|
|
||||||
else:
|
else:
|
||||||
print(f"{RED}Usage: auto_responder <on|off>{RESET}")
|
print(f"{RED}[ERROR]{RESET} Unknown command: {cmd}")
|
||||||
|
|
||||||
else:
|
|
||||||
print(f"{RED}[ERROR]{RESET} Unknown command: {cmd}")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -20,40 +20,41 @@ def crc32_of(data: bytes) -> int:
|
|||||||
# In practice, we store 37 bytes (296 bits); 1 bit is unused.
|
# In practice, we store 37 bytes (296 bits); 1 bit is unused.
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
def build_ping_request(version: int) -> bytes:
|
def build_ping_request(version: int, nonce: bytes = None) -> bytes:
|
||||||
"""
|
"""
|
||||||
Build a Ping request with:
|
Build a Ping request with:
|
||||||
- 256-bit nonce (32 bytes)
|
- 256-bit nonce (32 bytes)
|
||||||
- 7-bit version
|
- 7-bit version
|
||||||
- 32-bit CRC
|
- 32-bit CRC
|
||||||
We do bit-packing. The final result is 37 bytes (296 bits), with 1 unused bit.
|
Total = 295 bits logically.
|
||||||
|
Since 295 bits do not fill an integer number of bytes, we pack into 37 bytes (296 bits),
|
||||||
|
with one unused bit.
|
||||||
"""
|
"""
|
||||||
|
if nonce is None:
|
||||||
|
nonce = os.urandom(32) # 32 bytes = 256 bits
|
||||||
|
if len(nonce) != 32:
|
||||||
|
raise ValueError("Nonce must be exactly 32 bytes.")
|
||||||
if not (0 <= version < 128):
|
if not (0 <= version < 128):
|
||||||
raise ValueError("Version must fit in 7 bits (0..127)")
|
raise ValueError("Version must fit in 7 bits (0..127)")
|
||||||
|
|
||||||
# 1) Generate 256-bit nonce
|
# Build the partial integer:
|
||||||
nonce = os.urandom(32) # 32 bytes = 256 bits
|
# Shift the nonce (256 bits) left by 7 bits and then OR with the 7-bit version.
|
||||||
|
partial_int = int.from_bytes(nonce, 'big') << 7
|
||||||
|
partial_int |= version # version occupies the lower 7 bits
|
||||||
|
|
||||||
# We'll build partial_data = [nonce (256 bits), version (7 bits)] as an integer
|
# Convert to 33 bytes (263 bits needed)
|
||||||
# Then compute CRC-32 over those bytes, then append 32 bits of CRC.
|
|
||||||
partial_int = int.from_bytes(nonce, 'big') << 7 # shift left 7 bits
|
|
||||||
partial_int |= version # put version in the low 7 bits
|
|
||||||
|
|
||||||
# Convert partial to bytes
|
|
||||||
# partial is 256+7=263 bits => needs 33 bytes to store
|
|
||||||
partial_bytes = partial_int.to_bytes(33, 'big')
|
partial_bytes = partial_int.to_bytes(33, 'big')
|
||||||
|
|
||||||
# Compute CRC over partial_bytes
|
# Compute CRC over these 33 bytes
|
||||||
cval = crc32_of(partial_bytes)
|
cval = crc32_of(partial_bytes)
|
||||||
|
|
||||||
# Now combine partial_data (263 bits) with 32 bits of CRC => 295 bits
|
# Combine partial data (263 bits) with the 32-bit CRC => 295 bits total.
|
||||||
# We'll store that in a single integer
|
|
||||||
final_int = (int.from_bytes(partial_bytes, 'big') << 32) | cval
|
final_int = (int.from_bytes(partial_bytes, 'big') << 32) | cval
|
||||||
# final_int is 263+32=295 bits, needs 37 bytes to store (the last bit is unused).
|
|
||||||
final_bytes = final_int.to_bytes(37, 'big')
|
final_bytes = final_int.to_bytes(37, 'big')
|
||||||
return final_bytes
|
return final_bytes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def parse_ping_request(data: bytes):
|
def parse_ping_request(data: bytes):
|
||||||
"""
|
"""
|
||||||
Parse a Ping request (37 bytes = 295 bits).
|
Parse a Ping request (37 bytes = 295 bits).
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import random
|
import random
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
from typing import List, Dict, Any
|
from typing import List, Dict, Any
|
||||||
from crypto_utils import raw_signature_to_der
|
|
||||||
|
|
||||||
from crypto_utils import (
|
from crypto_utils import (
|
||||||
generate_identity_keys,
|
generate_identity_keys,
|
||||||
@ -20,6 +20,9 @@ from messages import (
|
|||||||
)
|
)
|
||||||
import transmission
|
import transmission
|
||||||
|
|
||||||
|
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
|
||||||
|
from cryptography.hazmat.primitives import hashes
|
||||||
|
|
||||||
# ANSI colors
|
# ANSI colors
|
||||||
RED = "\033[91m"
|
RED = "\033[91m"
|
||||||
GREEN = "\033[92m"
|
GREEN = "\033[92m"
|
||||||
@ -30,30 +33,27 @@ RESET = "\033[0m"
|
|||||||
|
|
||||||
class IcingProtocol:
|
class IcingProtocol:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Identity keys
|
# Identity keys (each 512 bits when printed as hex of 64 bytes)
|
||||||
self.identity_privkey, self.identity_pubkey = generate_identity_keys()
|
self.identity_privkey, self.identity_pubkey = generate_identity_keys()
|
||||||
|
|
||||||
# Peer identity
|
# Peer identity for verifying ephemeral signatures
|
||||||
self.peer_identity_pubkey_obj = None
|
self.peer_identity_pubkey_obj = None
|
||||||
self.peer_identity_pubkey_bytes = None
|
self.peer_identity_pubkey_bytes = None
|
||||||
|
|
||||||
# Ephemeral keys
|
# Ephemeral keys (our side)
|
||||||
self.ephemeral_privkey = None
|
self.ephemeral_privkey = None
|
||||||
self.ephemeral_pubkey = None
|
self.ephemeral_pubkey = None
|
||||||
|
|
||||||
# Last computed shared secret (hex)
|
# Last computed shared secret (hex string)
|
||||||
self.shared_secret = None
|
self.shared_secret = None
|
||||||
|
|
||||||
# For PFS: track session_number + last_shared_secret per peer identity
|
# Derived HKDF key (hex string, 256 bits)
|
||||||
# Key: bytes(64) peer identity pubkey
|
self.hkdf_key = None
|
||||||
# Value: (int session_number, str last_shared_secret_hex)
|
|
||||||
|
# For PFS: track per-peer session info (session number and last shared secret)
|
||||||
self.pfs_history: Dict[bytes, (int, str)] = {}
|
self.pfs_history: Dict[bytes, (int, str)] = {}
|
||||||
|
|
||||||
# Inbound messages are stored for manual or auto handling
|
# Protocol flags
|
||||||
# Each entry: { 'type': str, 'raw': bytes, 'parsed': Any, 'connection': PeerConnection }
|
|
||||||
self.inbound_messages: List[Dict[str, Any]] = []
|
|
||||||
|
|
||||||
# Simple dictionary to track protocol flags
|
|
||||||
self.state = {
|
self.state = {
|
||||||
"ping_sent": False,
|
"ping_sent": False,
|
||||||
"ping_received": False,
|
"ping_received": False,
|
||||||
@ -64,10 +64,15 @@ class IcingProtocol:
|
|||||||
# Auto-responder toggle
|
# Auto-responder toggle
|
||||||
self.auto_responder = False
|
self.auto_responder = False
|
||||||
|
|
||||||
# Connections
|
# Active connections list
|
||||||
self.connections = []
|
self.connections = []
|
||||||
|
|
||||||
# Listening port
|
# Inbound messages (each message is a dict with keys: type, raw, parsed, connection)
|
||||||
|
self.inbound_messages: List[Dict[str, Any]] = []
|
||||||
|
|
||||||
|
# Store the session nonce (32 bytes) from our first sent or received PING
|
||||||
|
self.session_nonce: bytes = None
|
||||||
|
|
||||||
self.local_port = random.randint(30000, 40000)
|
self.local_port = random.randint(30000, 40000)
|
||||||
self.server_listener = transmission.ServerListener(
|
self.server_listener = transmission.ServerListener(
|
||||||
host="127.0.0.1",
|
host="127.0.0.1",
|
||||||
@ -86,20 +91,18 @@ class IcingProtocol:
|
|||||||
self.connections.append(conn)
|
self.connections.append(conn)
|
||||||
|
|
||||||
def on_data_received(self, conn: transmission.PeerConnection, data: bytes):
|
def on_data_received(self, conn: transmission.PeerConnection, data: bytes):
|
||||||
"""
|
bits_count = len(data) * 8
|
||||||
Called whenever data arrives on any open PeerConnection.
|
|
||||||
We'll parse and store the message, then handle automatically if auto_responder is on.
|
|
||||||
"""
|
|
||||||
# Print data size in bits, not bytes
|
|
||||||
bits_count = len(data)*8
|
|
||||||
print(f"{GREEN}[RECV]{RESET} {bits_count} bits from peer: {data.hex()[:60]}{'...' if len(data.hex())>60 else ''}")
|
print(f"{GREEN}[RECV]{RESET} {bits_count} bits from peer: {data.hex()[:60]}{'...' if len(data.hex())>60 else ''}")
|
||||||
|
# For a PING_REQUEST, parse and store the session nonce if not already set.
|
||||||
# Attempt to parse Ping request
|
|
||||||
if len(data) == 37:
|
if len(data) == 37:
|
||||||
parsed = parse_ping_request(data)
|
parsed = parse_ping_request(data)
|
||||||
if parsed:
|
if parsed:
|
||||||
nonce, version = parsed
|
nonce, version = parsed
|
||||||
self.state["ping_received"] = True
|
self.state["ping_received"] = True
|
||||||
|
# Store session nonce if not already set
|
||||||
|
if self.session_nonce is None:
|
||||||
|
self.session_nonce = nonce
|
||||||
|
print(f"{YELLOW}[NOTICE]{RESET} Stored session nonce from received PING.")
|
||||||
index = len(self.inbound_messages)
|
index = len(self.inbound_messages)
|
||||||
msg = {
|
msg = {
|
||||||
"type": "PING_REQUEST",
|
"type": "PING_REQUEST",
|
||||||
@ -170,6 +173,64 @@ class IcingProtocol:
|
|||||||
self.inbound_messages.append(msg)
|
self.inbound_messages.append(msg)
|
||||||
print(f"{RED}[WARNING]{RESET} Unrecognized or malformed message stored at index={index}.")
|
print(f"{RED}[WARNING]{RESET} Unrecognized or malformed message stored at index={index}.")
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
# HKDF Derivation
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def derive_hkdf(self):
|
||||||
|
"""
|
||||||
|
Derives a 256-bit key using HKDF.
|
||||||
|
Uses as input keying material (IKM) the shared secret from ECDH.
|
||||||
|
The salt is computed as SHA256(session_nonce || pfs_param), where:
|
||||||
|
- session_nonce is taken from self.session_nonce (32 bytes) or defaults to zeros.
|
||||||
|
- pfs_param is taken from the first inbound HANDSHAKE's pfs_hash field (32 bytes) or zeros.
|
||||||
|
"""
|
||||||
|
if not self.shared_secret:
|
||||||
|
print(f"{RED}[ERROR]{RESET} No shared secret available; cannot derive HKDF key.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# IKM: shared secret converted from hex to bytes.
|
||||||
|
ikm = bytes.fromhex(self.shared_secret)
|
||||||
|
# Use stored session_nonce if available; otherwise default to zeros.
|
||||||
|
session_nonce = self.session_nonce if self.session_nonce is not None else (b"\x00" * 32)
|
||||||
|
|
||||||
|
# Determine pfs_param from first HANDSHAKE message (if any)
|
||||||
|
pfs_param = None
|
||||||
|
for msg in self.inbound_messages:
|
||||||
|
if msg["type"] == "HANDSHAKE":
|
||||||
|
# Expect parsed handshake as tuple: (timestamp, ephemeral_pub, ephemeral_sig, pfs_hash)
|
||||||
|
try:
|
||||||
|
_, _, _, pfs_param = msg["parsed"]
|
||||||
|
except Exception:
|
||||||
|
pfs_param = None
|
||||||
|
break
|
||||||
|
if pfs_param is None:
|
||||||
|
print(f"{RED}[WARNING]{RESET} No HANDSHAKE found; using 32 zero bytes for pfs_param.")
|
||||||
|
pfs_param = b"\x00" * 32 # 256-bit zeros
|
||||||
|
|
||||||
|
# Ensure both are bytes
|
||||||
|
if isinstance(session_nonce, str):
|
||||||
|
session_nonce = session_nonce.encode()
|
||||||
|
if isinstance(pfs_param, str):
|
||||||
|
pfs_param = pfs_param.encode()
|
||||||
|
|
||||||
|
from cryptography.hazmat.primitives import hashes
|
||||||
|
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
|
||||||
|
hasher = hashes.Hash(hashes.SHA256())
|
||||||
|
hasher.update(session_nonce + pfs_param)
|
||||||
|
salt_value = hasher.finalize()
|
||||||
|
|
||||||
|
hkdf = HKDF(
|
||||||
|
algorithm=hashes.SHA256(),
|
||||||
|
length=32, # 256 bits
|
||||||
|
salt=salt_value,
|
||||||
|
info=b"",
|
||||||
|
)
|
||||||
|
derived_key = hkdf.derive(ikm)
|
||||||
|
self.hkdf_key = derived_key.hex()
|
||||||
|
print(f"{GREEN}[HKDF]{RESET} Derived HKDF key: {self.hkdf_key}")
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Auto-responder helpers
|
# Auto-responder helpers
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
@ -228,7 +289,12 @@ class IcingProtocol:
|
|||||||
if not self.connections:
|
if not self.connections:
|
||||||
print(f"{RED}[ERROR]{RESET} No active connections.")
|
print(f"{RED}[ERROR]{RESET} No active connections.")
|
||||||
return
|
return
|
||||||
pkt = build_ping_request(version=0)
|
# Generate a new nonce for this ping and store it as session_nonce if not already set.
|
||||||
|
nonce = os.urandom(32)
|
||||||
|
if self.session_nonce is None:
|
||||||
|
self.session_nonce = nonce
|
||||||
|
print(f"{YELLOW}[NOTICE]{RESET} Stored session nonce from sent PING.")
|
||||||
|
pkt = build_ping_request(version=0, nonce=nonce)
|
||||||
self._send_packet(self.connections[0], pkt, "PING_REQUEST")
|
self._send_packet(self.connections[0], pkt, "PING_REQUEST")
|
||||||
self.state["ping_sent"] = True
|
self.state["ping_sent"] = True
|
||||||
|
|
||||||
@ -373,6 +439,13 @@ class IcingProtocol:
|
|||||||
|
|
||||||
print(f"\nShared Secret: {self.shared_secret if self.shared_secret else '[None]'}")
|
print(f"\nShared Secret: {self.shared_secret if self.shared_secret else '[None]'}")
|
||||||
|
|
||||||
|
if self.hkdf_key:
|
||||||
|
print(f"HKDF Derived Key: {self.hkdf_key.hex()} (size: {len(self.hkdf_key)*8} bits)")
|
||||||
|
else:
|
||||||
|
print("HKDF Derived Key: [None]")
|
||||||
|
|
||||||
|
print("\nSession Nonce: " + (self.session_nonce.hex() if self.session_nonce else "[None]"))
|
||||||
|
|
||||||
print("\nProtocol Flags:")
|
print("\nProtocol Flags:")
|
||||||
for k, v in self.state.items():
|
for k, v in self.state.items():
|
||||||
print(f" {k}: {v}")
|
print(f" {k}: {v}")
|
||||||
|
Loading…
Reference in New Issue
Block a user