lsd0003

LSD0003: Set Union
Log | Files | Refs | README

commit d18767809341e4e63fd3f42f6b1d8510e31c6477
parent cab45ba74dc984053f893d8caf5e406f643bed93
Author: Christian Grothoff <christian@grothoff.org>
Date:   Thu, 14 Jan 2021 14:09:32 +0100

more comments

Diffstat:
Mdraft-summermatter-set-union.xml | 236++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
1 file changed, 139 insertions(+), 97 deletions(-)

diff --git a/draft-summermatter-set-union.xml b/draft-summermatter-set-union.xml @@ -746,9 +746,9 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <t> When the initiating peer decides to use the full synchronisation mode and the set of the initiating peer is bigger than the set of the receiving peer, the initiating - peer sends a <em><xref target="messages_request_full" format="title" /></em> message and change from <strong>Expecting SE</strong> to the <strong>Full Receiving</strong> State. - In all other cases the initiating peer sends all set elements to the other peer followed by the <em><xref target="messages_full_done" format="title" /></em> message and - changes into <strong>Full Sending</strong> state. + peer sends a <em><xref target="messages_request_full" format="title" /></em> message, and transitions from <strong>Expecting SE</strong> to the <strong>Full Receiving</strong> state. + If the set of the initiating peer is smaller, it sends all set elements to the other peer followed by the <em><xref target="messages_full_done" format="title" /></em> message, and + transitions into the <strong>Full Sending</strong> state. </t> <t> ############# Statemaschine diagram full mode ################## @@ -758,87 +758,105 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <dt><strong>Expecting IBF:</strong></dt> <dd> If a peer in the <strong>Expecting IBF</strong> state receives a <em><xref target="messages_request_full" format="title" /></em> message from the other peer, the - peer starts sending all the elements of the set followed by a <em><xref target="messages_full_done" format="title" /></em> message to the other peer and change to the - <strong>Full Sending</strong> State. If the peer receives an <em><xref target="messages_full_element" format="title" /></em> message the peer changes to the <strong>Full Receiving</strong> state. + peer sends all the elements of its set followed by a <em><xref target="messages_full_done" format="title" /></em> message to the other peer, and transitions to the + <strong>Full Sending</strong> state. If the peer receives an <em><xref target="messages_full_element" format="title" /></em> message, it processes the element and transitions to the <strong>Full Receiving</strong> state. </dd> <dt><strong>Full Sending:</strong></dt> <dd> - While a peer is in <strong>Full Sending</strong> state the peer expects to continuously receiving elements from the other - peer. As soon as a the <em><xref target="messages_full_done" format="title" /></em> message is received the peer changes into <strong>Finished</strong> state. + While a peer is in <strong>Full Sending</strong> state the peer expects to continuously receive elements from the other + peer. As soon as a the <em><xref target="messages_full_done" format="title" /></em> message is received, the peer transitions into + the <strong>Finished</strong> state. </dd> <dt><strong>Full Receiving (In code: Expecting IBF): </strong></dt> <dd> - While a peer is in <strong>Full Receiving</strong> state the peer expects to continuously receiving elements from the other - peer. As soon as a the <em><xref target="messages_full_done" format="title" /></em> message is received the peer sends the remaining elements from his set to the other - peer followed by a <em><xref target="messages_full_done" format="title" /></em>. After sending the last message the peer changes into <strong>Finished</strong> state. + While a peer is in the <strong>Full Receiving</strong> state, it expects to continuously receive elements from the other + peer. As soon as a the <em><xref target="messages_full_done" format="title" /></em> message is received, it sends + the remaining elements (those it did not receive) from its set to the other + peer, followed by a <em><xref target="messages_full_done" format="title" /></em>. + After sending the last message, the peer transitions into the <strong>Finished</strong> state. </dd> </dl> </section> <section anchor="modeofoperation_individual-elements" numbered="true" toc="default"> <name>Delta Synchronisation Mode</name> <t> - When the initiating peer in <strong>Expected SE</strong> state decide to use the delta synchronisation mode, the peer - sends a <em><xref target="messages_ibf" format="title" /></em> to the receiving peer and changes into the <strong>Passive Decoding</strong> state. + When the initiating peer in the <strong>Expected SE</strong> state decides to use the delta synchronisation mode, it + sends a <em><xref target="messages_ibf" format="title" /></em> to the receiving peer and transitions into the <strong>Passive Decoding</strong> state. </t> <t> - The receiving peer in the <strong>Expecting IBF</strong> state then receives the - <em><xref target="messages_ibf" format="title" /></em> message from the initiating peer and changes into <strong>Expecting IBF Last</strong> state when there - are multiple <em><xref target="messages_ibf" format="title" /></em> messages to sent, when there is just a single <em><xref target="messages_ibf" format="title" /></em> message the reviving peer - switches directly to the <strong>Active Decoding</strong> state. + The receiving peer in the <strong>Expecting IBF</strong> state receives the + <em><xref target="messages_ibf" format="title" /></em> message from + the initiating peer and transitions into the <strong>Expecting IBF Last</strong> state when there + are multiple <em><xref target="messages_ibf" format="title" /></em> messages to sent, + when there is just a single <em><xref target="messages_ibf" format="title" /></em> message the reviving peer + transitions directly to the <strong>Active Decoding</strong> state. </t> <t> - The peer that is in the <strong>Active Decoding</strong>, <strong>Finish closing</strong> or in the <strong>Expecting IBF Last</strong> state is called active - peer and the peer that is in <strong>Passive Decoding</strong> and <strong>Finish Waiting</strong> state is called the passive peer. + The peer that is in the <strong>Active Decoding</strong>, <strong>Finish Closing</strong> or in the <strong>Expecting IBF Last</strong> + state is called the active peer and the peer that is in either the <strong>Passive Decoding</strong> or the <strong>Finish Waiting</strong> state + is called the passive peer. </t> <t> ############# Statemaschine Delta Synchronisation Mode ################## </t> - <t><strong>The behavior of the participants the different state is described below:</strong></t> + <t><strong>The behavior of the participants the different states is described below:</strong></t> <dl> <dt><strong>Passive Decoding:</strong></dt> <dd> <t> - In the <strong>Passive Decoding</strong> state the passive peer reacts to request from the active peer. - The action the passive peer executes depend on the message the passive peer receives in the <strong>Passive Decoding</strong> state from the active peer - and is described bellow on message basis. + In the <strong>Passive Decoding</strong> state the passive peer reacts to requests from the active peer. + The action the passive peer executes depends on the message the passive peer receives in the <strong>Passive Decoding</strong> state from the active peer + and is described below on a per message basis. </t> <dl> - <dt><em><xref target="messages_inquiry" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_inquiry" format="title" /></em> message:</dt> <dd> The <em><xref target="messages_inquiry" format="title" /></em> message - is received if the active peer requests the hash of an element that is missing in the active peers set. - In this case the passive peer answers with an <em><xref target="messages_offer" format="title" /></em> message - which contains a hash of the requested element. + is received if the active peer requests the SHA-512 hash of one or more elements (by sending the 64 bit element ID) + that are missing from the active peer's set. + In this case the passive peer answers with <em><xref target="messages_offer" format="title" /></em> messages + which contain the SHA-512 hash of the requested element. If the passive peer does not have an element with + a matching element ID, it MUST ignore the inquiry. If multiple elements match the 64 bit element ID, the passive + peer MUST send offers for all of the matching elements. </dd> - <dt><em><xref target="messages_demand" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_demand" format="title" /></em> message:</dt> <dd> The <em><xref target="messages_demand" format="title" /></em> message is received if the active peer requests a complete element that is missing in the active peers set. If the requested element is valid - the passive peer answers with the <em><xref target="messages_elements" format="title" /></em> message which contains the requested element. + the passive peer answers with an <em><xref target="messages_elements" format="title" /></em> message which contains the full, + application-dependent data of the requested element. If the passive peer receives a demand for a SHA-512 hash for which + it has no element, a protocol violation is detected and the protocol MUST be aborted. + Implementations MAY strengthen this and forbid demands without previous matching offers. </dd> - <dt><em><xref target="messages_offer" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_offer" format="title" /></em> message:</dt> <dd> The <em><xref target="messages_offer" format="title" /></em> message - is received if the active peer has decoded an element that is present in the active peers set and is missing in the - set of the passive peer. If the offered element is missing in the set of the passive peer, the passive peer answers - with a <em><xref target="messages_demand" format="title" /></em> message. + is received if the active peer has decoded an element that is present in the active peers set and may be missing in the + set of the passive peer. If the SHA-512 hash of the offer is indeed not a hash of any of the elements from the set of + the passive peer, the passive peer MUST answer with a <em><xref target="messages_demand" format="title" /></em> message + for that SHA-512 hash and remember that it issued this demand. </dd> - <dt><em><xref target="messages_elements" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_elements" format="title" /></em> message:</dt> <dd> - A element that is received is saved and validated and not further action is taken. + A element that is received is validated and safed and not further action is taken. + FIXME: Eh, don't we need to (1) check that we did in fact DEMAND this element, and (2) strike it + from the list of pending demands? </dd> - <dt><em><xref target="messages_ibf" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_ibf" format="title" /></em> message:</dt> <dd> - If an <em><xref target="messages_ibf" format="title" /></em> message is received the passive client assumes that the decoding of the IBF - on the active site has failed and role change is initiated. The peer changes directly - into the <strong>Active Decoding</strong> state or in <strong>Expecting IBF Last</strong> state - depending on how many IBFs are sent. + If an <em><xref target="messages_ibf" format="title" /></em> message is received, this + indicates that decoding of the IBF on the active site has failed and roles should be swapped. + The receiving passive peer transitions into the <strong>Active Decoding</strong> state + or into the <strong>Expecting IBF Last</strong> state depending on how many IBFs are sent. + FIXME: really should use two IBF message types (IBF_DATA, IBF_LAST). </dd> - <dt><em><xref target="messages_done" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_done" format="title" /></em> message:</dt> <dd> Receiving the <em><xref target="messages_done" format="title" /></em> message signals - the passive peer that all demand of the active peer have been satisfied. In this case the passive peer changes into + the passive peer that all demands of the active peer have been satisfied. Alas, the + active peer will continue to process demands from the passive peer. + Upon receiving this message, the passive peer transitions into the <strong>Finish Waiting</strong> state. </dd> </dl> @@ -846,51 +864,63 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <dt><strong>Active Decoding:</strong></dt> <dd> <t> - In <strong>Active Decoding</strong> state the active peer decodes the IBFs and evaluate the set difference - between the active and passive peer. In case the IBF decodes successfully the active peer sends offers and - inquiries to the passive peer depending on which site the element is missing. + In the <strong>Active Decoding</strong> state the active peer decodes the IBFs and evaluates the set difference + between the active and passive peer. Whenever an element ID is obtained by decoding the IBF, the active peer + sends either an offer or an inquiry to the passive peer, depending on which site the decoded element is missing. </t> <t> - If the IBF decodes a positive (1) pure bucket the element is missing on the passive peers site - so the active peer sends an <em><xref target="messages_offer" format="title" /></em> to the active peer. - A negative (-1) pure bucket indicates that a element is missing in the active peers set so the active peers - sends <em><xref target="messages_inquiry" format="title" /></em> to the passive client. + If the IBF decodes a positive (1) pure bucket, the element is missing on the passive peers site. + Thus the active peer sends an <em><xref target="messages_offer" format="title" /></em> to the passive peer. + A negative (-1) pure bucket indicates that a element is missing in the active peers set, so the active peer + sends a <em><xref target="messages_inquiry" format="title" /></em> to the passive peer. </t> <t> - In case the IBF does not successfully decode the active peer sends an IBF to the passive client - and changes into <strong>Passive Decoding</strong> state. This initiates a role change - active->passive. + In case the IBF does not successfully decode anymore, the active peer sends a new IBF to the passive client + and changes into <strong>Passive Decoding</strong> state. This initiates a role swap. + FIXME: On what basis is the new IBF constructed? Specifically, which set is used? Do we + wait for the completion of pending demands first? How do L/k/M change? Some of this should + be detailed here, but the full details likely need a separate section on the algorithms. </t> <t> - All other actions the active peer executes depend on the message the active peer receives from - the passive peer. The actions are described below on message basis: + All other actions taken by the active peer depend on the message the active peer receives from + the passive peer. The actions are described below on a per message basis: </t> + <!-- FIXME: Done message generation not described anywhere! --> <dl> - <dt><em><xref target="messages_offer" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_offer" format="title" /></em> message:</dt> <dd> The <em><xref target="messages_offer" format="title" /></em> message indicates that the passive peer received a <em><xref target="messages_inquiry" format="title" /></em> message from - the active peer. If a Inquiry has been sent and the offered element is missing in the active peers set, + the active peer. If a Inquiry has been sent and <!-- FIXME: is this indeed a condition that is checked? --> + the offered element is missing in the active peers set, the active peer sends a <em><xref target="messages_demand" format="title" /></em> message to the passive peer. + <!-- FIXME: what happens if the offer is for an element that is not missing? I think then we just ignore it, right? --> </dd> - <dt><em><xref target="messages_demand" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_demand" format="title" /></em> message:</dt> <dd> - The <em><xref target="messages_demand" format="title" /></em> message indicates that the + The <em><xref target="messages_demand" format="title" /></em> message indicates that the passive peer received a <em><xref target="messages_offer" format="title" /></em> from the active peer. The active peer satisfies the demand of the passive peer by sending <em><xref target="messages_elements" format="title" /></em> message if a offer request for the element has been sent. + FIXME: Do we really check that we first made an offer? FIXME: what happens if + we do not have an element with the respective SHA-512 hash? + FIXME: should we check that a demand cannot be sent repeatedly for the same element? </dd> - <dt><em><xref target="messages_elements" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_elements" format="title" /></em> message:</dt> <dd> - A element that is received is saved and validated and not further action is taken. + A element that is received is validated and saved and not further action is taken. + FIXME: what if we receive elements we already know? Is that cause for failure? + FIXME: Do we not need to remember that our demands were satisfied? </dd> - <dt><em><xref target="messages_done" format="title" /></em> Message:</dt> + <dt><em><xref target="messages_done" format="title" /></em> message:</dt> <dd> Receiving the message <em><xref target="messages_done" format="title" /></em> indicates that all demands of the passive peer have been satisfied. The active peer then changes into the state <strong>Finish Closing</strong> state. + FIXME: We cannot really receive this message before we completed decoding the IBF and send DONE to the passive peer. + So that might be an additional constraint to check here! </dd> </dl> </dd> @@ -898,7 +928,7 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <dd> <t> In the <strong>Expecing IBF Last</strong> state the active peer continuously receives <em><xref target="messages_ibf" format="title" /></em> - messages from the passive peer. When the last <em><xref target="messages_ibf" format="title" /></em> message is resived + messages from the passive peer. When the last <em><xref target="messages_ibf" format="title" /></em> message is received the active peer changes into <strong>Active Decoding</strong> state. </t> </dd> @@ -907,6 +937,7 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <t> In this states the peers are waiting for all demands to be satisfied and for the synchronisation to be completed. When all demands are satisfied the peer changes into state <strong>done</strong>. + FIXME: I thought "done" was a message, and the final state was called "Finished"!??!? </t> </dd> </dl> @@ -914,21 +945,23 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <section anchor="modeofoperation_combined-mode" numbered="true" toc="default"> <name>Combined Mode</name> <t> - In the Combined Mode the <xref target="modeofoperation_full-sync" format="title" /> and the <xref target="modeofoperation_individual-elements" format="title" /> - are combined to reach the optimal result. + In the combined mode the <xref target="modeofoperation_full-sync" format="title" /> and + the <xref target="modeofoperation_individual-elements" format="title" /> + are combined to minimize resource consumption. </t> <t> The <xref target="modeofoperation_individual-elements" format="title" /> is only efficient on small set - differences or if the byte-size of the elements is large. Is the set difference big for example - in the initial synchronisation a <xref target="modeofoperation_full-sync" format="title" /> is - more efficient. The exact heuristics and parameter on the basis the protocol evaluates which mode - is the optimal is described in the <xref target="performance" format="title" /> section of this document. + differences or if the byte-size of the elements is large. Is the set difference is estimated to be large + the <xref target="modeofoperation_full-sync" format="title" /> is + more efficient. The exact heuristics and parameters on which the protocol decides which mode + should be used are described in the <xref target="performance" format="title" /> section of this document. </t> <t> - There are two main conditions when a <xref target="modeofoperation_full-sync" format="title" /> - is enforced. The first condition is if the flag "FULL_SYNC" is set, this is used for testing purposes only and - should not be used in production environment. The second condition applies if one of the peers has an empty - set and the set is initially synchronized. + There are two main cases when a <xref target="modeofoperation_full-sync" format="title" /> + is always used. + The first case is when one of the peers announces having an empty set. FIXME: HOW is this announced? + The second case is if the application requested full synchronization explicitly. + This is useful for testing and should not be used in production. </t> <t> ############# NOTE ############ @@ -950,14 +983,16 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <section anchor="messages_operation_request_description" numbered="true" toc="default"> <name>Description</name> <t> - This message is the first message of the protocol and it is sent to signal the receiving peer + This message is the first message of the protocol and it is sent to signal to the receiving peer that the initiating peer wants to initialize a new connection. </t> <t> - This Message is sent in the transition between the <strong>Initiating connection</strong> state and the <strong>Expect SE</strong> state. + This message is sent in the transition between the <strong>Initiating Connection</strong> state and the <strong>Expect SE</strong> state. </t> <t> - If a peer receives this message the peer answers with sending a Strata estimator back. + If a peer receives this message and is willing to run the protocol, it answers by sending back a Strata estimator message. + FIXME: turn 'strata estimator' into a link! + Otherwise it simply closes the connection. </t> </section> <section anchor="messages_operation_request_structure" numbered="true" toc="default"> @@ -984,19 +1019,20 @@ hashSum | 0000 | 0000 | 0000 | 0000 | </dd> <dt>MSG TYPE</dt> <dd> - the type of SETU_P2P_OPERATION_REQUEST as registered in <xref target="gana" format="title" /> in network byte order. + the type of SETU_P2P_OPERATION_REQUEST as registered in <xref target="gana" format="title" />, in network byte order. </dd> <dt>OPERATION TYPE</dt> <dd> - is a 32-bit unsigned integer which describes the type of operation that should be initiated. + is a 32-bit unsigned integer which describes the type of operation that should be initiated. + FIXME: unclear what this is. What operation types are there? What are the numeric values? </dd> <dt>ELEMENT COUNT</dt> <dd> - is the count of the elements the requesting party has stored in a 32-bit unsigned integer. + is the number of the elements the requesting party has in its set, as a 32-bit unsigned integer in network byte order. </dd> <dt>APX</dt> <dd> - is SHA 512-bit hash that identifies the application. + is a SHA-512 hash that identifies the application. </dd> </dl> </section> @@ -1072,7 +1108,11 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <dt>IBF-SLICES</dt> <dd> are variable count of slices in an array. A single slice contains out of a 64-bit Key, a - 32-bit Key Hash and a 32 bit count. + 32-bit Key Hash and an 8-bit count. + FIXME: this is not sufficiently precise! How are the element IDs (and IDSUMS) computed? + How are the HASHes (and HASHSUMS) computed? Which byte order is used? What role does + the SALT have in these computations? Definitively needs DETAILED algorithm(s) and + test vectors. </dd> </dl> <figure anchor="figure_ibf_slice"> @@ -1108,7 +1148,7 @@ hashSum | 0000 | 0000 | 0000 | 0000 | case the client changes to the <strong>Finished</strong> state as soon as all demands for elements have been satisfied. </t> <t> - This message is exclusively send in the <xref target="modeofoperation_individual-elements" format="title" />. + This message is exclusively sent in the <xref target="modeofoperation_individual-elements" format="title" />. </t> </section> <section anchor="messages_elements_structure" numbered="true" toc="default"> @@ -1170,15 +1210,15 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <t> The offer message is an answer to an <em><xref target="messages_inquiry" format="title" /></em> message and transmits the full hash of an element that has been requested by the other peer. - This full hash enables the other peer to check if the element is really missing in his set and - eventually send a <em><xref target="messages_demand" format="title" /></em> message for that a element. + This full hash enables the other peer to check if the element is really missing in its set and + eventually sends a <em><xref target="messages_demand" format="title" /></em> message for that a element. </t> <t> The offer is sent and received only in the <strong>Active Decoding</strong> and in the <strong>Passive Decoding</strong> state. </t> <t> - This message is exclusively send in the <xref target="modeofoperation_individual-elements" format="title" />. + This message is exclusively sent in the <xref target="modeofoperation_individual-elements" format="title" />. </t> </section> <section anchor="messages_offer_structure" numbered="true" toc="default"> @@ -1219,12 +1259,12 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <section anchor="messages_inquiry_description" numbered="true" toc="default"> <name>Description</name> <t> - The Inquiry message is exclusively send by the active peer in <strong>Active Decoding</strong> state + The Inquiry message is exclusively sent by the active peer in <strong>Active Decoding</strong> state to request the full hash of an element that is missing in the active peers set. This is normally answered by the passive peer with <em><xref target="messages_offer" format="title" /></em> message. </t> <t> - This message is exclusively send in the <xref target="modeofoperation_individual-elements" format="title" />. + This message is exclusively sent in the <xref target="modeofoperation_individual-elements" format="title" />. </t> <t> NOTE: HERE IS AN IMPLEMENTATION BUG UNNECESSARY 32-BIT PADDING! @@ -1269,12 +1309,12 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <t> The demand message is sent in the <strong>Active Decoding</strong> and in the <strong>Passive Decoding</strong> state. It is a answer to a received <em><xref target="messages_offer" format="title" /></em> message - and its send if the element described in the <em><xref target="messages_offer" format="title" /></em> message + and is sent if the element described in the <em><xref target="messages_offer" format="title" /></em> message is missing in the peers set. In the normal workflow the answer to the demand message is an <em><xref target="messages_elements" format="title" /></em> message. </t> <t> - This message is exclusively send in the <xref target="modeofoperation_individual-elements" format="title" />. + This message is exclusively sent in the <xref target="modeofoperation_individual-elements" format="title" />. </t> </section> <section anchor="messages_demand_structure" numbered="true" toc="default"> @@ -1314,11 +1354,13 @@ hashSum | 0000 | 0000 | 0000 | 0000 | <section anchor="messages_done_description" numbered="true" toc="default"> <name>Description</name> <t> - The done message is send when all <em><xref target="messages_demand" format="title" /></em> messages + The done message is sent when all <em><xref target="messages_demand" format="title" /></em> messages have been successfully satisfied and the set is complete synchronized. + FIXME: we might want to consider adding an additional final checksum (XOR SHA-512 hash) over + all elements to this message, to ensure that really both sides ended up with the same set? </t> <t> - This message is exclusively send in the <xref target="modeofoperation_individual-elements" format="title" />. + This message is exclusively sent in the <xref target="modeofoperation_individual-elements" format="title" />. </t> </section> <section anchor="messages_done_structure" numbered="true" toc="default"> @@ -1399,7 +1441,7 @@ hashSum | 0000 | 0000 | 0000 | 0000 | </t> <t> The receiving peer receives the Request Full message in the <strong>Expecting IBF</strong>, afterwards the receiving peer - starts sending his complete set in <xref target="messages_full_element" format="title" /> messages to the initiating peer. + starts sending its complete set in <xref target="messages_full_element" format="title" /> messages to the initiating peer. </t> </section> <section anchor="messages_request_full_structure" numbered="true" toc="default"> @@ -1572,6 +1614,13 @@ hashSum | 0000 | 0000 | 0000 | 0000 | </section> + <section anchor="performance" numbered="true" toc="default"> + <name>Performance Considerations</name> + <t> + --- TEXT HERE --- + </t> + </section> + <section anchor="security" numbered="true" toc="default"> <name>Security Considerations</name> <section anchor="security_crypto" numbered="true" toc="default"> @@ -1595,13 +1644,6 @@ hashSum | 0000 | 0000 | 0000 | 0000 | </section> </section> - <section anchor="performance" numbered="true" toc="default"> - <name>Performance</name> - <t> - --- TEXT HERE --- - </t> - </section> - <section anchor="gana" numbered="true" toc="default"> <name>GANA Considerations</name> <t>