docs: update sending message diagram

This commit is contained in:
Evgeny Poberezkin committed 2019-12-21 14:31:42 +00:00
1 parent 08a933e22c
commit ac58b56ac6
2 files changed
+146 -146

No files matched your search

+3 -3
View File
@@ -6,7 +6,7 @@ sequenceDiagram
participant App B
participant Bob
Alice ->> App A: Alice writes the message to Bob in the app
App A ->> Server A: The message (including ID & timestamp) is encrypted with <AB public key> and sent to all Alice's servers<br>{from: <BA public key hash>, to: <AB public key hash>, message: <encrypted with AB public key>}
Server A ->> Server B: Alice's servers use <AB public key hash> to locate Bob's servers<br>and forward encrypted message to all Bob's servers (when they are different from Alice's servers
App A ->> Server A: The message (including ID & timestamp) is encrypted with Bob's <BA public key> and sent to all Alice's servers<br>{from: <AB public key hash>, to: <BA public key hash>, message: <encrypted with BA public key>}
Server A ->> Server B: Alice's servers use <BA public key hash> to locate Bob's servers<br>and forward encrypted message to all Bob's servers (when they are different from Alice's servers
Server B ->> App B: Bob's servers send the message to Bob's app
App B ->> Bob: Bob's app uses <BA public key hash> to identify Alice<br>and decrypts the messages with <AB private key>
App B ->> Bob: Bob's app uses <AB public key hash> to identify Alice<br>and decrypts the messages with Bob's <BA private key>
+143 -143
View File
@@ -1,49 +1,49 @@
<svg id="mermaid-1576937798508" width="100%" xmlns="http://www.w3.org/2000/svg" height="100%" style="max-width:1250px;" viewBox="-50 -10 1250 336"><style>
<svg id="mermaid-1576938638003" width="100%" xmlns="http://www.w3.org/2000/svg" height="100%" style="max-width:1250px;" viewBox="-50 -10 1250 336"><style>
#mermaid-1576937798508 .label {
#mermaid-1576938638003 .label {
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family);
color: #333; }
#mermaid-1576937798508 .label text {
#mermaid-1576938638003 .label text {
fill: #333; }
#mermaid-1576937798508 .node rect,
#mermaid-1576937798508 .node circle,
#mermaid-1576937798508 .node ellipse,
#mermaid-1576937798508 .node polygon {
#mermaid-1576938638003 .node rect,
#mermaid-1576938638003 .node circle,
#mermaid-1576938638003 .node ellipse,
#mermaid-1576938638003 .node polygon {
fill: #ECECFF;
stroke: #9370DB;
stroke-width: 1px; }
#mermaid-1576937798508 .node .label {
#mermaid-1576938638003 .node .label {
text-align: center; }
#mermaid-1576937798508 .node.clickable {
#mermaid-1576938638003 .node.clickable {
cursor: pointer; }
#mermaid-1576937798508 .arrowheadPath {
#mermaid-1576938638003 .arrowheadPath {
fill: #333333; }
#mermaid-1576937798508 .edgePath .path {
#mermaid-1576938638003 .edgePath .path {
stroke: #333333;
stroke-width: 1.5px; }
#mermaid-1576937798508 .edgeLabel {
#mermaid-1576938638003 .edgeLabel {
background-color: #e8e8e8;
text-align: center; }
#mermaid-1576937798508 .cluster rect {
#mermaid-1576938638003 .cluster rect {
fill: #ffffde;
stroke: #aaaa33;
stroke-width: 1px; }
#mermaid-1576937798508 .cluster text {
#mermaid-1576938638003 .cluster text {
fill: #333; }
#mermaid-1576937798508 div.mermaidTooltip {
#mermaid-1576938638003 div.mermaidTooltip {
position: absolute;
text-align: center;
max-width: 200px;
@@ -57,117 +57,117 @@
pointer-events: none;
z-index: 100; }
#mermaid-1576937798508 .actor {
#mermaid-1576938638003 .actor {
stroke: #CCCCFF;
fill: #ECECFF; }
#mermaid-1576937798508 text.actor {
#mermaid-1576938638003 text.actor {
fill: black;
stroke: none; }
#mermaid-1576937798508 .actor-line {
#mermaid-1576938638003 .actor-line {
stroke: grey; }
#mermaid-1576937798508 .messageLine0 {
#mermaid-1576938638003 .messageLine0 {
stroke-width: 1.5;
stroke-dasharray: '2 2';
stroke: #333; }
#mermaid-1576937798508 .messageLine1 {
#mermaid-1576938638003 .messageLine1 {
stroke-width: 1.5;
stroke-dasharray: '2 2';
stroke: #333; }
#mermaid-1576937798508 #arrowhead {
#mermaid-1576938638003 #arrowhead {
fill: #333; }
#mermaid-1576937798508 .sequenceNumber {
#mermaid-1576938638003 .sequenceNumber {
fill: white; }
#mermaid-1576937798508 #sequencenumber {
#mermaid-1576938638003 #sequencenumber {
fill: #333; }
#mermaid-1576937798508 #crosshead path {
#mermaid-1576938638003 #crosshead path {
fill: #333 !important;
stroke: #333 !important; }
#mermaid-1576937798508 .messageText {
#mermaid-1576938638003 .messageText {
fill: #333;
stroke: none; }
#mermaid-1576937798508 .labelBox {
#mermaid-1576938638003 .labelBox {
stroke: #CCCCFF;
fill: #ECECFF; }
#mermaid-1576937798508 .labelText {
#mermaid-1576938638003 .labelText {
fill: black;
stroke: none; }
#mermaid-1576937798508 .loopText {
#mermaid-1576938638003 .loopText {
fill: black;
stroke: none; }
#mermaid-1576937798508 .loopLine {
#mermaid-1576938638003 .loopLine {
stroke-width: 2;
stroke-dasharray: '2 2';
stroke: #CCCCFF; }
#mermaid-1576937798508 .note {
#mermaid-1576938638003 .note {
stroke: #aaaa33;
fill: #fff5ad; }
#mermaid-1576937798508 .noteText {
#mermaid-1576938638003 .noteText {
fill: black;
stroke: none;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family);
font-size: 14px; }
#mermaid-1576937798508 .activation0 {
#mermaid-1576938638003 .activation0 {
fill: #f4f4f4;
stroke: #666; }
#mermaid-1576937798508 .activation1 {
#mermaid-1576938638003 .activation1 {
fill: #f4f4f4;
stroke: #666; }
#mermaid-1576937798508 .activation2 {
#mermaid-1576938638003 .activation2 {
fill: #f4f4f4;
stroke: #666; }
#mermaid-1576937798508 .mermaid-main-font {
#mermaid-1576938638003 .mermaid-main-font {
font-family: "trebuchet ms", verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .section {
#mermaid-1576938638003 .section {
stroke: none;
opacity: 0.2; }
#mermaid-1576937798508 .section0 {
#mermaid-1576938638003 .section0 {
fill: rgba(102, 102, 255, 0.49); }
#mermaid-1576937798508 .section2 {
#mermaid-1576938638003 .section2 {
fill: #fff400; }
#mermaid-1576937798508 .section1,
#mermaid-1576937798508 .section3 {
#mermaid-1576938638003 .section1,
#mermaid-1576938638003 .section3 {
fill: white;
opacity: 0.2; }
#mermaid-1576937798508 .sectionTitle0 {
#mermaid-1576938638003 .sectionTitle0 {
fill: #333; }
#mermaid-1576937798508 .sectionTitle1 {
#mermaid-1576938638003 .sectionTitle1 {
fill: #333; }
#mermaid-1576937798508 .sectionTitle2 {
#mermaid-1576938638003 .sectionTitle2 {
fill: #333; }
#mermaid-1576937798508 .sectionTitle3 {
#mermaid-1576938638003 .sectionTitle3 {
fill: #333; }
#mermaid-1576937798508 .sectionTitle {
#mermaid-1576938638003 .sectionTitle {
text-anchor: start;
font-size: 11px;
text-height: 14px;
@@ -175,313 +175,313 @@
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .grid .tick {
#mermaid-1576938638003 .grid .tick {
stroke: lightgrey;
opacity: 0.3;
shape-rendering: crispEdges; }
#mermaid-1576937798508 .grid .tick text {
#mermaid-1576938638003 .grid .tick text {
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .grid path {
#mermaid-1576938638003 .grid path {
stroke-width: 0; }
#mermaid-1576937798508 .today {
#mermaid-1576938638003 .today {
fill: none;
stroke: red;
stroke-width: 2px; }
#mermaid-1576937798508 .task {
#mermaid-1576938638003 .task {
stroke-width: 2; }
#mermaid-1576937798508 .taskText {
#mermaid-1576938638003 .taskText {
text-anchor: middle;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .taskText:not([font-size]) {
#mermaid-1576938638003 .taskText:not([font-size]) {
font-size: 11px; }
#mermaid-1576937798508 .taskTextOutsideRight {
#mermaid-1576938638003 .taskTextOutsideRight {
fill: black;
text-anchor: start;
font-size: 11px;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .taskTextOutsideLeft {
#mermaid-1576938638003 .taskTextOutsideLeft {
fill: black;
text-anchor: end;
font-size: 11px; }
#mermaid-1576937798508 .task.clickable {
#mermaid-1576938638003 .task.clickable {
cursor: pointer; }
#mermaid-1576937798508 .taskText.clickable {
#mermaid-1576938638003 .taskText.clickable {
cursor: pointer;
fill: #003163 !important;
font-weight: bold; }
#mermaid-1576937798508 .taskTextOutsideLeft.clickable {
#mermaid-1576938638003 .taskTextOutsideLeft.clickable {
cursor: pointer;
fill: #003163 !important;
font-weight: bold; }
#mermaid-1576937798508 .taskTextOutsideRight.clickable {
#mermaid-1576938638003 .taskTextOutsideRight.clickable {
cursor: pointer;
fill: #003163 !important;
font-weight: bold; }
#mermaid-1576937798508 .taskText0,
#mermaid-1576937798508 .taskText1,
#mermaid-1576937798508 .taskText2,
#mermaid-1576937798508 .taskText3 {
#mermaid-1576938638003 .taskText0,
#mermaid-1576938638003 .taskText1,
#mermaid-1576938638003 .taskText2,
#mermaid-1576938638003 .taskText3 {
fill: white; }
#mermaid-1576937798508 .task0,
#mermaid-1576937798508 .task1,
#mermaid-1576937798508 .task2,
#mermaid-1576937798508 .task3 {
#mermaid-1576938638003 .task0,
#mermaid-1576938638003 .task1,
#mermaid-1576938638003 .task2,
#mermaid-1576938638003 .task3 {
fill: #8a90dd;
stroke: #534fbc; }
#mermaid-1576937798508 .taskTextOutside0,
#mermaid-1576937798508 .taskTextOutside2 {
#mermaid-1576938638003 .taskTextOutside0,
#mermaid-1576938638003 .taskTextOutside2 {
fill: black; }
#mermaid-1576937798508 .taskTextOutside1,
#mermaid-1576937798508 .taskTextOutside3 {
#mermaid-1576938638003 .taskTextOutside1,
#mermaid-1576938638003 .taskTextOutside3 {
fill: black; }
#mermaid-1576937798508 .active0,
#mermaid-1576937798508 .active1,
#mermaid-1576937798508 .active2,
#mermaid-1576937798508 .active3 {
#mermaid-1576938638003 .active0,
#mermaid-1576938638003 .active1,
#mermaid-1576938638003 .active2,
#mermaid-1576938638003 .active3 {
fill: #bfc7ff;
stroke: #534fbc; }
#mermaid-1576937798508 .activeText0,
#mermaid-1576937798508 .activeText1,
#mermaid-1576937798508 .activeText2,
#mermaid-1576937798508 .activeText3 {
#mermaid-1576938638003 .activeText0,
#mermaid-1576938638003 .activeText1,
#mermaid-1576938638003 .activeText2,
#mermaid-1576938638003 .activeText3 {
fill: black !important; }
#mermaid-1576937798508 .done0,
#mermaid-1576937798508 .done1,
#mermaid-1576937798508 .done2,
#mermaid-1576937798508 .done3 {
#mermaid-1576938638003 .done0,
#mermaid-1576938638003 .done1,
#mermaid-1576938638003 .done2,
#mermaid-1576938638003 .done3 {
stroke: grey;
fill: lightgrey;
stroke-width: 2; }
#mermaid-1576937798508 .doneText0,
#mermaid-1576937798508 .doneText1,
#mermaid-1576937798508 .doneText2,
#mermaid-1576937798508 .doneText3 {
#mermaid-1576938638003 .doneText0,
#mermaid-1576938638003 .doneText1,
#mermaid-1576938638003 .doneText2,
#mermaid-1576938638003 .doneText3 {
fill: black !important; }
#mermaid-1576937798508 .crit0,
#mermaid-1576937798508 .crit1,
#mermaid-1576937798508 .crit2,
#mermaid-1576937798508 .crit3 {
#mermaid-1576938638003 .crit0,
#mermaid-1576938638003 .crit1,
#mermaid-1576938638003 .crit2,
#mermaid-1576938638003 .crit3 {
stroke: #ff8888;
fill: red;
stroke-width: 2; }
#mermaid-1576937798508 .activeCrit0,
#mermaid-1576937798508 .activeCrit1,
#mermaid-1576937798508 .activeCrit2,
#mermaid-1576937798508 .activeCrit3 {
#mermaid-1576938638003 .activeCrit0,
#mermaid-1576938638003 .activeCrit1,
#mermaid-1576938638003 .activeCrit2,
#mermaid-1576938638003 .activeCrit3 {
stroke: #ff8888;
fill: #bfc7ff;
stroke-width: 2; }
#mermaid-1576937798508 .doneCrit0,
#mermaid-1576937798508 .doneCrit1,
#mermaid-1576937798508 .doneCrit2,
#mermaid-1576937798508 .doneCrit3 {
#mermaid-1576938638003 .doneCrit0,
#mermaid-1576938638003 .doneCrit1,
#mermaid-1576938638003 .doneCrit2,
#mermaid-1576938638003 .doneCrit3 {
stroke: #ff8888;
fill: lightgrey;
stroke-width: 2;
cursor: pointer;
shape-rendering: crispEdges; }
#mermaid-1576937798508 .milestone {
#mermaid-1576938638003 .milestone {
transform: rotate(45deg) scale(0.8, 0.8); }
#mermaid-1576937798508 .milestoneText {
#mermaid-1576938638003 .milestoneText {
font-style: italic; }
#mermaid-1576937798508 .doneCritText0,
#mermaid-1576937798508 .doneCritText1,
#mermaid-1576937798508 .doneCritText2,
#mermaid-1576937798508 .doneCritText3 {
#mermaid-1576938638003 .doneCritText0,
#mermaid-1576938638003 .doneCritText1,
#mermaid-1576938638003 .doneCritText2,
#mermaid-1576938638003 .doneCritText3 {
fill: black !important; }
#mermaid-1576937798508 .activeCritText0,
#mermaid-1576937798508 .activeCritText1,
#mermaid-1576937798508 .activeCritText2,
#mermaid-1576937798508 .activeCritText3 {
#mermaid-1576938638003 .activeCritText0,
#mermaid-1576938638003 .activeCritText1,
#mermaid-1576938638003 .activeCritText2,
#mermaid-1576938638003 .activeCritText3 {
fill: black !important; }
#mermaid-1576937798508 .titleText {
#mermaid-1576938638003 .titleText {
text-anchor: middle;
font-size: 18px;
fill: black;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 g.classGroup text {
#mermaid-1576938638003 g.classGroup text {
fill: #9370DB;
stroke: none;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family);
font-size: 10px; }
#mermaid-1576937798508 g.classGroup text .title {
#mermaid-1576938638003 g.classGroup text .title {
font-weight: bolder; }
#mermaid-1576937798508 g.classGroup rect {
#mermaid-1576938638003 g.classGroup rect {
fill: #ECECFF;
stroke: #9370DB; }
#mermaid-1576937798508 g.classGroup line {
#mermaid-1576938638003 g.classGroup line {
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 .classLabel .box {
#mermaid-1576938638003 .classLabel .box {
stroke: none;
stroke-width: 0;
fill: #ECECFF;
opacity: 0.5; }
#mermaid-1576937798508 .classLabel .label {
#mermaid-1576938638003 .classLabel .label {
fill: #9370DB;
font-size: 10px; }
#mermaid-1576937798508 .relation {
#mermaid-1576938638003 .relation {
stroke: #9370DB;
stroke-width: 1;
fill: none; }
#mermaid-1576937798508 #compositionStart {
#mermaid-1576938638003 #compositionStart {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #compositionEnd {
#mermaid-1576938638003 #compositionEnd {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #aggregationStart {
#mermaid-1576938638003 #aggregationStart {
fill: #ECECFF;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #aggregationEnd {
#mermaid-1576938638003 #aggregationEnd {
fill: #ECECFF;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #dependencyStart {
#mermaid-1576938638003 #dependencyStart {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #dependencyEnd {
#mermaid-1576938638003 #dependencyEnd {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #extensionStart {
#mermaid-1576938638003 #extensionStart {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 #extensionEnd {
#mermaid-1576938638003 #extensionEnd {
fill: #9370DB;
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 .commit-id,
#mermaid-1576937798508 .commit-msg,
#mermaid-1576937798508 .branch-label {
#mermaid-1576938638003 .commit-id,
#mermaid-1576938638003 .commit-msg,
#mermaid-1576938638003 .branch-label {
fill: lightgrey;
color: lightgrey;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .pieTitleText {
#mermaid-1576938638003 .pieTitleText {
text-anchor: middle;
font-size: 25px;
fill: black;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 .slice {
#mermaid-1576938638003 .slice {
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 g.stateGroup text {
#mermaid-1576938638003 g.stateGroup text {
fill: #9370DB;
stroke: none;
font-size: 10px;
font-family: 'trebuchet ms', verdana, arial;
font-family: var(--mermaid-font-family); }
#mermaid-1576937798508 g.stateGroup text {
#mermaid-1576938638003 g.stateGroup text {
fill: #9370DB;
stroke: none;
font-size: 10px; }
#mermaid-1576937798508 g.stateGroup .state-title {
#mermaid-1576938638003 g.stateGroup .state-title {
font-weight: bolder;
fill: black; }
#mermaid-1576937798508 g.stateGroup rect {
#mermaid-1576938638003 g.stateGroup rect {
fill: #ECECFF;
stroke: #9370DB; }
#mermaid-1576937798508 g.stateGroup line {
#mermaid-1576938638003 g.stateGroup line {
stroke: #9370DB;
stroke-width: 1; }
#mermaid-1576937798508 .transition {
#mermaid-1576938638003 .transition {
stroke: #9370DB;
stroke-width: 1;
fill: none; }
#mermaid-1576937798508 .stateGroup .composit {
#mermaid-1576938638003 .stateGroup .composit {
fill: white;
border-bottom: 1px; }
#mermaid-1576937798508 .stateGroup .alt-composit {
#mermaid-1576938638003 .stateGroup .alt-composit {
fill: #e0e0e0;
border-bottom: 1px; }
#mermaid-1576937798508 .state-note {
#mermaid-1576938638003 .state-note {
stroke: #aaaa33;
fill: #fff5ad; }
#mermaid-1576937798508 .state-note text {
#mermaid-1576938638003 .state-note text {
fill: black;
stroke: none;
font-size: 10px; }
#mermaid-1576937798508 .stateLabel .box {
#mermaid-1576938638003 .stateLabel .box {
stroke: none;
stroke-width: 0;
fill: #ECECFF;
opacity: 0.5; }
#mermaid-1576937798508 .stateLabel text {
#mermaid-1576938638003 .stateLabel text {
fill: black;
font-size: 10px;
font-weight: bold;
@@ -492,7 +492,7 @@
--mermaid-font-family: '"trebuchet ms", verdana, arial';
--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive; }
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style><style>#mermaid-1576937798508 {
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style><style>#mermaid-1576938638003 {
color: rgb(0, 0, 0);
font: normal normal 400 normal 16px / normal "trebuchet ms", verdana, arial;
}</style><g></g><g><line id="actor1476" x1="75" y1="5" x2="75" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="75" dy="0">Alice</tspan></text></g><g><line id="actor1477" x1="275" y1="5" x2="275" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="275" dy="0">App A</tspan></text></g><g><line id="actor1478" x1="475" y1="5" x2="475" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="400" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="475" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="475" dy="0">Server A</tspan></text></g><g><line id="actor1479" x1="675" y1="5" x2="675" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="600" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="675" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="675" dy="0">Server B</tspan></text></g><g><line id="actor1480" x1="875" y1="5" x2="875" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="800" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="875" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="875" dy="0">App B</tspan></text></g><g><line id="actor1481" x1="1075" y1="5" x2="1075" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="1000" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="1075" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="1075" dy="0">Bob</tspan></text></g><defs><marker id="arrowhead" refX="5" refY="2" markerWidth="6" markerHeight="4" orient="auto"><path d="M 0,0 V 4 L6,2 Z"></path></marker></defs><defs><marker id="crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="16" refY="4"><path fill="black" stroke="#000000" stroke-width="1px" d="M 9,2 V 6 L16,4 Z" style="stroke-dasharray: 0, 0;"></path><path fill="none" stroke="#000000" stroke-width="1px" d="M 0,1 L 6,7 M 6,1 L 0,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><defs><marker id="sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"></circle></marker></defs><g><text x="175" y="93" class="messageText" style="text-anchor: middle;">Alice writes the message to Bob in the app</text><line x1="75" y1="100" x2="275" y2="100" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="375" y="128" class="messageText" style="text-anchor: middle;">The message (including ID &amp; timestamp) is encrypted with &lt;AB public key&gt; and sent to all Alice's servers</text><text x="375" y="145" class="messageText" style="text-anchor: middle;">{from: &lt;BA public key hash&gt;, to: &lt;AB public key hash&gt;, message: &lt;encrypted with AB public key&gt;}</text><line x1="275" y1="135" x2="475" y2="135" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="575" y="163" class="messageText" style="text-anchor: middle;">Alice's servers use &lt;AB public key hash&gt; to locate Bob's servers</text><text x="575" y="180" class="messageText" style="text-anchor: middle;">and forward encrypted message to all Bob's servers (when they are different from Alice's servers</text><line x1="475" y1="170" x2="675" y2="170" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="775" y="198" class="messageText" style="text-anchor: middle;">Bob's servers send the message to Bob's app</text><line x1="675" y1="205" x2="875" y2="205" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="975" y="233" class="messageText" style="text-anchor: middle;">Bob's app uses &lt;BA public key hash&gt; to identify Alice</text><text x="975" y="250" class="messageText" style="text-anchor: middle;">and decrypts the messages with &lt;AB private key&gt;</text><lLine truncated
}</style><g></g><g><line id="actor1824" x1="75" y1="5" x2="75" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="75" dy="0">Alice</tspan></text></g><g><line id="actor1825" x1="275" y1="5" x2="275" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="275" dy="0">App A</tspan></text></g><g><line id="actor1826" x1="475" y1="5" x2="475" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="400" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="475" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="475" dy="0">Server A</tspan></text></g><g><line id="actor1827" x1="675" y1="5" x2="675" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="600" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="675" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="675" dy="0">Server B</tspan></text></g><g><line id="actor1828" x1="875" y1="5" x2="875" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="800" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="875" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="875" dy="0">App B</tspan></text></g><g><line id="actor1829" x1="1075" y1="5" x2="1075" y2="325" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="1000" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="1075" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle; font-size: 14px;"><tspan x="1075" dy="0">Bob</tspan></text></g><defs><marker id="arrowhead" refX="5" refY="2" markerWidth="6" markerHeight="4" orient="auto"><path d="M 0,0 V 4 L6,2 Z"></path></marker></defs><defs><marker id="crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="16" refY="4"><path fill="black" stroke="#000000" stroke-width="1px" d="M 9,2 V 6 L16,4 Z" style="stroke-dasharray: 0, 0;"></path><path fill="none" stroke="#000000" stroke-width="1px" d="M 0,1 L 6,7 M 6,1 L 0,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><defs><marker id="sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"></circle></marker></defs><g><text x="175" y="93" class="messageText" style="text-anchor: middle;">Alice writes the message to Bob in the app</text><line x1="75" y1="100" x2="275" y2="100" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="375" y="128" class="messageText" style="text-anchor: middle;">The message (including ID &amp; timestamp) is encrypted with Bob's &lt;BA public key&gt; and sent to all Alice's servers</text><text x="375" y="145" class="messageText" style="text-anchor: middle;">{from: &lt;AB public key hash&gt;, to: &lt;BA public key hash&gt;, message: &lt;encrypted with BA public key&gt;}</text><line x1="275" y1="135" x2="475" y2="135" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="575" y="163" class="messageText" style="text-anchor: middle;">Alice's servers use &lt;BA public key hash&gt; to locate Bob's servers</text><text x="575" y="180" class="messageText" style="text-anchor: middle;">and forward encrypted message to all Bob's servers (when they are different from Alice's servers</text><line x1="475" y1="170" x2="675" y2="170" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="775" y="198" class="messageText" style="text-anchor: middle;">Bob's servers send the message to Bob's app</text><line x1="675" y1="205" x2="875" y2="205" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="975" y="233" class="messageText" style="text-anchor: middle;">Bob's app uses &lt;AB public key hash&gt; to identify Alice</text><text x="975" y="250" class="messageText" style="text-anchor: middle;">and decrypts the messages with Bob's &lt;BA private key&Line truncated

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB