Confirmed users
971
edits
| Line 200: | Line 200: | ||
<pre> | <pre> | ||
C: PUT /a7id HTTP/1.1 | C: PUT /a7id HTTP/1.1 | ||
C: If-None-Match: * | |||
C: | C: | ||
C: { | C: { | ||
| Line 220: | Line 221: | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: ETag: " | S: ETag: "etag-of-receiver1-message" | ||
S: HTTP/1.1 412 Precondition Failed | |||
S: ETag: "etag-of-receiver1-message" | |||
</pre></li> | </pre></li> | ||
<li>Desktop asks user for the PIN, extracts channel ID and weak secret, fetches Mobile's msg 1 | <li>Desktop asks user for the PIN, extracts channel ID and weak secret, fetches Mobile's msg 1 | ||
| Line 227: | Line 231: | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: ETag: "etag-of-receiver1-message" | |||
</pre></li> | </pre></li> | ||
<li>Desktop computes and uploads msg 1 | <li>Desktop computes and uploads msg 1 | ||
<pre> | <pre> | ||
C: PUT /a7id HTTP/1.1 | C: PUT /a7id HTTP/1.1 | ||
C: If-Match: "etag-of-receiver1-message" | |||
C: | C: | ||
C: { | C: { | ||
| Line 252: | Line 258: | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: Etag: " | S: Etag: "etag-of-sender1-message" | ||
S: HTTP/1.1 412 Precondition Failed | |||
S: Etag: "etag-of-sender1-message" | |||
</pre></li> | </pre></li> | ||
<li>Mobile polls for Desktop's msg 1 | <li>Mobile polls for Desktop's msg 1 | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
C: If-None-Match: " | C: If-None-Match: "etag-of-receiver1-message" | ||
S: HTTP/1.1 304 Not Modified | S: HTTP/1.1 304 Not Modified | ||
| Line 264: | Line 273: | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: Etag: "etag-of-sender1-message" | |||
... | ... | ||
</pre> | </pre> | ||
<p>Mobile computes and uploads msg 2</p> | <p>Mobile computes and uploads msg 2</p> | ||
<pre>C: PUT /a7id HTTP/1.1 | <pre>C: PUT /a7id HTTP/1.1 | ||
C: If-Match: "etag-of-sender1-message" | |||
C: | C: | ||
C: { | C: { | ||
| Line 285: | Line 295: | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: ETag: " | S: ETag: "etag-of-receiver2-message" | ||
S: HTTP/1.1 412 Precondition Failed | |||
S: ETag: "etag-of-receiver2-message" | |||
</pre></li> | </pre></li> | ||
<li>Desktop polls for and eventually retrieves Mobile's msg 2 | <li>Desktop polls for and eventually retrieves Mobile's msg 2 | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
C: If-None-Match: " | C: If-None-Match: "etag-of-sender1-message" | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
S: Etag: "etag-of-receiver2-message" | |||
... | |||
S: HTTP/1.1 412 Precondition Failed | |||
S: Etag: "etag-of-receiver2-message" | |||
... | ... | ||
</pre> | </pre> | ||
| Line 298: | Line 316: | ||
<pre> | <pre> | ||
C: PUT /a7id HTTP/1.1 | C: PUT /a7id HTTP/1.1 | ||
C: If-Match: "etag-of-receiver2-message" | |||
C: | C: | ||
C: { | C: { | ||
| Line 310: | Line 329: | ||
C: } | C: } | ||
C: } | C: } | ||
S: HTTP/1.1 200 OK | |||
S: ETag: "etag-of-sender2-message" | |||
S: HTTP/1.1 412 Precondition Failed | |||
S: ETag: "etag-of-sender2-message" | |||
</pre></li> | </pre></li> | ||
| Line 315: | Line 340: | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
C: | C: If-No-Match: "etag-of-receiver2-message" | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
... | S: Etag: "etag-of-sender2-message" | ||
{ 'type': 'sender2', ... } | |||
S: HTTP/1.1 412 Precondition failed | |||
S: Etag: "etag-of-sender2-message" | |||
</pre> | </pre> | ||
<p>Mobile computes key, uploads encrypted known message "0123456789ABCDEF" to prove its knowledge (msg 3)</p> | <p>Mobile computes key, uploads encrypted known message "0123456789ABCDEF" to prove its knowledge (msg 3)</p> | ||
<pre> | <pre> | ||
C: PUT /a7id HTTP/1.1 | C: PUT /a7id HTTP/1.1 | ||
C: If-Match: "etag-of-sender2-message" | |||
C: | C: | ||
C: { | C: { | ||
| Line 331: | Line 361: | ||
C: } | C: } | ||
C: } | C: } | ||
S: HTTP/1.1 200 OK | |||
S: Etag: "etag-of-receiver3-message" | |||
S: HTTP/1.1 412 Precondition failed | |||
S: Etag: "etag-of-receiver3-message" | |||
</pre></li> | </pre></li> | ||
</li> | </li> | ||
| Line 337: | Line 373: | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
C: | C: If-No-Match: "" | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||
C: ETag: "etag-of-receiver3-message" | |||
... | ... | ||
</pre> | </pre> | ||
verifies it against its own version. If the hash matches, it encrypts and uploads Sync credentials. | Desktop verifies it against its own version. If the hash matches, it encrypts and uploads Sync credentials. | ||
<pre> | <pre> | ||
C: PUT /a7id HTTP/1.1 | C: PUT /a7id HTTP/1.1 | ||
C: If-Match: "etag-of-receiver3-message" | |||
C: | C: | ||
C: { | C: { | ||
| Line 354: | Line 392: | ||
C: } | C: } | ||
C: } | C: } | ||
S: HTTP/1.1 200 OK | |||
S: Etag: "etag-of-sender3-message" | |||
S: HTTP/1.1 412 Precondition failed | |||
S: Etag: "etag-of-sender3-message" | |||
</pre> | </pre> | ||
If the hash does not match, the Desktop deletes the session. | If the hash does not match, the Desktop deletes the session. | ||
| Line 368: | Line 413: | ||
<pre> | <pre> | ||
C: GET /a7id HTTP/1.1 | C: GET /a7id HTTP/1.1 | ||
C: If-None-Match: " | C: If-None-Match: "etag-of-receiver3-message" | ||
S: HTTP/1.1 200 OK | S: HTTP/1.1 200 OK | ||