<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://learn.equalit.ie/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://learn.equalit.ie/mw/index.php?action=history&amp;feed=atom&amp;title=Np1sec%2FSpecification</id>
		<title>Np1sec/Specification - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://learn.equalit.ie/mw/index.php?action=history&amp;feed=atom&amp;title=Np1sec%2FSpecification"/>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;action=history"/>
		<updated>2026-04-05T20:09:42Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.1</generator>

<!-- NOCACHE -->	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=1556&amp;oldid=prev</id>
		<title>Dmitri: Dmitri moved page MpOTR/Specification to Np1sec/Specification: protocol renamed</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=1556&amp;oldid=prev"/>
				<updated>2014-12-02T18:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dmitri moved page &lt;a href=&quot;/wiki/MpOTR/Specification&quot; class=&quot;mw-redirect&quot; title=&quot;MpOTR/Specification&quot;&gt;MpOTR/Specification&lt;/a&gt; to &lt;a href=&quot;/wiki/Np1sec/Specification&quot; title=&quot;Np1sec/Specification&quot;&gt;Np1sec/Specification&lt;/a&gt;: protocol renamed&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 18:45, 2 December 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Dmitri</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=889&amp;oldid=prev</id>
		<title>Arlolra at 18:25, 21 October 2014</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=889&amp;oldid=prev"/>
				<updated>2014-10-21T18:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 18:25, 21 October 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 202:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 202:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-begin|name=Hash}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-begin|name=Hash}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Input: &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Input: &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; '''return''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''SHA-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;512&lt;/del&gt;&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; '''return''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''SHA-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;256&lt;/ins&gt;&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: mpOTR]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: mpOTR]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Arlolra</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=888&amp;oldid=prev</id>
		<title>Arlolra at 17:39, 21 October 2014</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=888&amp;oldid=prev"/>
				<updated>2014-10-21T17:39:52Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 17:39, 21 October 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 182:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 182:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Input: &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Input: &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  '''for each''' &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt; in Messages Received from &amp;lt;math&amp;gt;lastDigestedMessage&amp;lt;/math&amp;gt;+1 till &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;, '''do'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  '''for each''' &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt; in Messages Received from &amp;lt;math&amp;gt;lastDigestedMessage&amp;lt;/math&amp;gt;+1 till &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;, '''do'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;lt;math&amp;gt;sesionDigest := &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Hass&lt;/del&gt;(sessionDigest, message)&amp;lt;/math&amp;gt; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;lt;math&amp;gt;sesionDigest := &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Hash&lt;/ins&gt;(sessionDigest, message)&amp;lt;/math&amp;gt; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''LRU Cache Store Digest&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''LRU Cache Store Digest&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  '''return''' &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;lastMessageId&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  '''return''' &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;lastMessageId&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Arlolra</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=864&amp;oldid=prev</id>
		<title>Vmon: Remove Leave description</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=864&amp;oldid=prev"/>
				<updated>2014-10-03T13:03:28Z</updated>
		
		<summary type="html">&lt;p&gt;Remove Leave description&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 13:03, 3 October 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 63:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Leaving a chatroom involves only one procedure for those who are staying in the chatroom (Procedure Farewell) which is described in Algorithm [[mpCAT#Farewell|4]]. The remaining participants only need a notice from the server that the user is leaving to re-run the one round key update algorithm. Also, failure to receive a heartbeat from a user will result in executing Algorithm [[mpCAT#Farewell|4]] excluding users which did not update their key.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Farewell====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Farewell====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vmon</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=863&amp;oldid=prev</id>
		<title>Vmon at 13:02, 3 October 2014</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=863&amp;oldid=prev"/>
				<updated>2014-10-03T13:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 13:02, 3 October 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 61:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Sending and receiving messages while joining is in progress ===&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 89:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 88:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyShare:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;keyShare_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;)&amp;#160; # we can send this encrypted but leaving person can read it, hence theoretically it is the same as sending it unencrypted.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160;  &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyShare:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;keyShare_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;)&amp;#160; # we can send this encrypted but leaving person can read it, hence theoretically it is the same as sending it unencrypted.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Secure Send and Receive ===&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;After the session key is established, participants will use Algorithms [[mpCAT#Send|5]] and [[mpCAT#Receive|6]] to communicate securely.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;On Send, the protocol checks the status of the new ephemeral Diffie-Hellman and key share using messages it receives from participants. It (re)sends any missing pieces. It also informs other participants which part of the key share is received by that user. The metadata flag indicates if the message being sent only contains meta data (e.g. heartbeat) or actual user communication.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;On Receive, the protocol updates who has which pieces of the key shares. The protocol also generates a new group key if the new key shares have been received from all participants or those who have not updated their key shares time out on their heartbeat interval.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Send====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Send====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vmon</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=859&amp;oldid=prev</id>
		<title>Vmon: Textual description moved to overview doc</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=859&amp;oldid=prev"/>
				<updated>2014-10-03T01:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;Textual description moved to overview doc&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 01:06, 3 October 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Chat setup ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Chat setup ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In almost any practical case, participants join the chat sequentially. It is assumed that multiple participants cannot join simultaneously. For the sake of efficiency one can tweak the implementation to have a threshold to wait and start a chat with more participants. However, this makes the implementation significantly more complicated without an evident efficiency benefit.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Therefore, our assumption is that a secure chat is always set up when a participant starts the chat room. Additional participants would be added sequentially using Algorithm [[mpCAT#VIII.3_Joining|VIII.3]], as they enter the chat. Algorithm [[mpCAT#Chatroom_setup|1]] describes the chat room setup protocol.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Chatroom setup====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Chatroom setup====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Joining ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Joining ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Joining a chat involves two different procedures: the Join procedure, described in Algorithm [[mpCAT#Join|2]], which runs on the new participant’s instance, and an Accept New Participant Procedure, described in Algorithm [[mpCAT#Protocol_for_other_participants_already_in_the_chat_to_accept_the_newcomer|3]], which runs on the clients of participants that are already in the chat.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;When a new participant &amp;lt;math&amp;gt;U_{n+1}&amp;lt;/math&amp;gt; joins the chat, current participants can still use their established authenticated ephemeral public key (to derive the &amp;lt;math&amp;gt;sessionKey_{new}&amp;lt;/math&amp;gt; and as their signature verification key). Confidentiality of &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt; is guarded against the new participant by Diffie-Hellman key shares hashed alongside the session id (which is dependent on the list of participants). The new participant cannot combine the old and new shares to recover &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt;. The fact that old participants do not need to compute new ephemeral keys (and re-verify their ephemeral identities) decreases the computational complexity of the protocol.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Join====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Join====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 62:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Sending and receiving messages while joining is in progress ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Sending and receiving messages while joining is in progress ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In situations where a prolonged joining process (due to connection problems or malicious activities) has an adverse effect on the user experience, it might be desirable to enable the joining users to communicate with the parties in the room, while maintaining minimum assurances of authenticity, confidentiality, forward secrecy, as well as consistency only among participants.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Consistency aspects of mpCat, both for the room view (plist) and for the transcript, are reached through group agreement. However, there are times when group agreement may be hard or impossible to reach either due to latency in a single participant connection or due to a single participant broadcasting incorrect confirmation data (such as wrong plist, sid, key share, etc).&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;We offer an extension to the mpCat protocol to tackle this problem during the joining process. When a new participant joins the room, they send their DH key shares to the other participants. The other participants send their ephemeral key in return. They then send their key confirmation and key share. If this extension is to be considered, as soon as each user receives a key confirmation from another user, who is not currently part of the session, mpCat displays a message highlighting the fact that although the user is not part of the session, the conversation is being shared with them (through P2P encryption using the key derived from DH Key). The protocol, however, does not honour their input into the consistency check, until a new session including the new user is set up. Each client can decide whether to disable this option.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The user remains in the list of those not part of the current session, but receives the session messages until a new session is set up. Similarly, when a user receives a message from a user who is not part of the session, mpCat will decrypt the message and display it with a disclaimer that the user is not yet part of the session and that some participants may not receive the same message.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In this model, a room is a forwardly secure authenticated communication channel while a session is a subset of the room, which additionally offers a consistent view&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;of the room and consistent messages among participants.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Leave ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vmon</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=849&amp;oldid=prev</id>
		<title>Infinity0: add category</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=849&amp;oldid=prev"/>
				<updated>2014-09-19T21:38:01Z</updated>
		
		<summary type="html">&lt;p&gt;add category&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 21:38, 19 September 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 232:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 232:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; '''return''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''SHA-512&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; '''return''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''SHA-512&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{algorithm-end}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: mpOTR]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Infinity0</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=835&amp;oldid=prev</id>
		<title>Infinity0: import content from overview</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/mw/index.php?title=Np1sec/Specification&amp;diff=835&amp;oldid=prev"/>
				<updated>2014-09-19T21:18:29Z</updated>
		
		<summary type="html">&lt;p&gt;import content from overview&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Procedures ==&lt;br /&gt;
&lt;br /&gt;
=== Chat setup ===&lt;br /&gt;
&lt;br /&gt;
In almost any practical case, participants join the chat sequentially. It is assumed that multiple participants cannot join simultaneously. For the sake of efficiency one can tweak the implementation to have a threshold to wait and start a chat with more participants. However, this makes the implementation significantly more complicated without an evident efficiency benefit.&lt;br /&gt;
&lt;br /&gt;
Therefore, our assumption is that a secure chat is always set up when a participant starts the chat room. Additional participants would be added sequentially using Algorithm [[mpCAT#VIII.3_Joining|VIII.3]], as they enter the chat. Algorithm [[mpCAT#Chatroom_setup|1]] describes the chat room setup protocol.&lt;br /&gt;
&lt;br /&gt;
====Chatroom setup====&lt;br /&gt;
&amp;lt;!--alg_chat_setup--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Chatroom Init}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;newRoomName&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;participantNick&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;myId := 1&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;Nick_{myId} := participantNick&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;roomName := newRoomName&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;x_{myId}, y_{myId} :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Generate Initial Paramters&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;signatureKey_{myId} := (x_{myId},y_{myId})&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;participantList := [Nick_{myId}]&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;ephemeralPublicPointList := [y_{myId}, y_{other}]&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
=== Joining ===&lt;br /&gt;
&lt;br /&gt;
Joining a chat involves two different procedures: the Join procedure, described in Algorithm [[mpCAT#Join|2]], which runs on the new participant’s instance, and an Accept New Participant Procedure, described in Algorithm [[mpCAT#Protocol_for_other_participants_already_in_the_chat_to_accept_the_newcomer|3]], which runs on the clients of participants that are already in the chat.&lt;br /&gt;
&lt;br /&gt;
When a new participant &amp;lt;math&amp;gt;U_{n+1}&amp;lt;/math&amp;gt; joins the chat, current participants can still use their established authenticated ephemeral public key (to derive the &amp;lt;math&amp;gt;sessionKey_{new}&amp;lt;/math&amp;gt; and as their signature verification key). Confidentiality of &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt; is guarded against the new participant by Diffie-Hellman key shares hashed alongside the session id (which is dependent on the list of participants). The new participant cannot combine the old and new shares to recover &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt;. The fact that old participants do not need to compute new ephemeral keys (and re-verify their ephemeral identities) decreases the computational complexity of the protocol.&lt;br /&gt;
&lt;br /&gt;
====Join====&lt;br /&gt;
&amp;lt;!--alg_join--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Join}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;newRoomName&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Nickname_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;participantId&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;myId := participantId&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;roomName := newRoomName&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;x_{myId}, y_{myId} := &amp;lt;/math&amp;gt;&amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Generate Initial Paramters&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;signatureKey_{myId} := (x_{myId},y_{myId})&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3Join:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Nickname_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;participantList, ephemeralPublicPointList :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Receive&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;sessionId := &amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Compute Session Id&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;roomName&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;participantList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ephemeralPublicPointList&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Sign and Send Key Confirmation and Shares&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Wait On Receive&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyConfirmationShare:3&amp;quot;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;keyShareList, keyConfirmationList, signatureList :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Receive&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Verify Key Confirmations and Signatures&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;keyConfirmationList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;signatureList&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Update Session Key&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Receive Session Digest}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;currentSessionHistoryDigest&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;sessionDigest := currentSessionHistoryDigest&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
====Protocol for other participants already in the chat to accept the newcomer====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--alg_accept--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Accept}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;newParticipant&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3Join:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Nickname_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Wait On Receive&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3Join:3&amp;quot;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;nick_{NewParticipant}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ephemeralPublicPoint_{NewParticipant} := &amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Receive&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Update Lists&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;nick_{NewParticipant}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ephemeralPublicPoint_{NewParticipant}&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;sessionId := &amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Compute Session Id&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;roomName&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;participantList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ephemeralPublicPointList&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Sign and Send Key Confirmation and Shares&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Wait On Receive&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyConfirmationShare:3&amp;quot;)&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;keyShareList, keyConfirmationList, signatureList :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Receive&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Verify Key Confirmations and Signatures&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;keyConfirmationList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;signatureList&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Update Session Key&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Send&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;)&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
=== Sending and receiving messages while joining is in progress ===&lt;br /&gt;
In situations where a prolonged joining process (due to connection problems or malicious activities) has an adverse effect on the user experience, it might be desirable to enable the joining users to communicate with the parties in the room, while maintaining minimum assurances of authenticity, confidentiality, forward secrecy, as well as consistency only among participants.&lt;br /&gt;
&lt;br /&gt;
Consistency aspects of mpCat, both for the room view (plist) and for the transcript, are reached through group agreement. However, there are times when group agreement may be hard or impossible to reach either due to latency in a single participant connection or due to a single participant broadcasting incorrect confirmation data (such as wrong plist, sid, key share, etc).&lt;br /&gt;
&lt;br /&gt;
We offer an extension to the mpCat protocol to tackle this problem during the joining process. When a new participant joins the room, they send their DH key shares to the other participants. The other participants send their ephemeral key in return. They then send their key confirmation and key share. If this extension is to be considered, as soon as each user receives a key confirmation from another user, who is not currently part of the session, mpCat displays a message highlighting the fact that although the user is not part of the session, the conversation is being shared with them (through P2P encryption using the key derived from DH Key). The protocol, however, does not honour their input into the consistency check, until a new session including the new user is set up. Each client can decide whether to disable this option.&lt;br /&gt;
&lt;br /&gt;
The user remains in the list of those not part of the current session, but receives the session messages until a new session is set up. Similarly, when a user receives a message from a user who is not part of the session, mpCat will decrypt the message and display it with a disclaimer that the user is not yet part of the session and that some participants may not receive the same message.&lt;br /&gt;
&lt;br /&gt;
In this model, a room is a forwardly secure authenticated communication channel while a session is a subset of the room, which additionally offers a consistent view&lt;br /&gt;
of the room and consistent messages among participants.&lt;br /&gt;
&lt;br /&gt;
=== Leave ===&lt;br /&gt;
&lt;br /&gt;
Leaving a chatroom involves only one procedure for those who are staying in the chatroom (Procedure Farewell) which is described in Algorithm [[mpCAT#Farewell|4]]. The remaining participants only need a notice from the server that the user is leaving to re-run the one round key update algorithm. Also, failure to receive a heartbeat from a user will result in executing Algorithm [[mpCAT#Farewell|4]] excluding users which did not update their key.&lt;br /&gt;
&lt;br /&gt;
====Farewell====&lt;br /&gt;
&amp;lt;!--alg_farewell--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Shrink on Leave}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;leaverId&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''remove''' &amp;lt;math&amp;gt;leaverId&amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt;participantIdList&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;sessionId :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Compute Session Id&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   '''if''' &amp;lt;math&amp;gt;|participantList| &amp;gt; 1&amp;lt;/math&amp;gt;''', then'''&lt;br /&gt;
     &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Sign and Send Key Shares&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
     &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Wait On Receive&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyShare:3&amp;quot;)&lt;br /&gt;
     &amp;lt;math&amp;gt;keyShareList&amp;lt;/math&amp;gt; := &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Receive&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
     &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Update Session Key&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;keyShareList&amp;lt;/math&amp;gt;)&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Sign and Send Key Shares}}&lt;br /&gt;
 Input: &lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;z_{myId -1, myId} := Hash(k_{myId,myId-1}, sessionId)&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;z_{myId, myId+1} := Hash(k_{myId,myId+1}, sessionId)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;keyShare_{myId} := z_{myId -1, myId} \oplus z_{myId, myId+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;originAuthSignature :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''ED25519Sign&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;SignatureKey&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionId&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;z_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyShare:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;keyShare_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;)  # we can send this encrypted but leaving person can read it, hence theoretically it is the same as sending it unencrypted.&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
=== Secure Send and Receive ===&lt;br /&gt;
&lt;br /&gt;
After the session key is established, participants will use Algorithms [[mpCAT#Send|5]] and [[mpCAT#Receive|6]] to communicate securely.&lt;br /&gt;
&lt;br /&gt;
On Send, the protocol checks the status of the new ephemeral Diffie-Hellman and key share using messages it receives from participants. It (re)sends any missing pieces. It also informs other participants which part of the key share is received by that user. The metadata flag indicates if the message being sent only contains meta data (e.g. heartbeat) or actual user communication.&lt;br /&gt;
&lt;br /&gt;
On Receive, the protocol updates who has which pieces of the key shares. The protocol also generates a new group key if the new key shares have been received from all participants or those who have not updated their key shares time out on their heartbeat interval.&lt;br /&gt;
&lt;br /&gt;
====Send====&lt;br /&gt;
&amp;lt;!--alg_send--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Send}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;metaMessage&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;keyShareMessage&amp;lt;/math&amp;gt; = &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''NewKeyShareMessage&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;metaMessage&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;math&amp;gt;cryptMessage&amp;lt;/math&amp;gt; := &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''AES CTR Encrypt&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionKey&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;message | keyShareMessage&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt; := &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''ED25519Sign&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;SignatureKey&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionId&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;cryptMetatMessage&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt; := &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Compute Session Digest&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3&amp;quot;, &amp;lt;math&amp;gt;sessionId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;cryptMessage&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;,&amp;quot;:3&amp;quot;)&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
====Receive====&lt;br /&gt;
&amp;lt;!--alg_recv--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Receive}}&lt;br /&gt;
Input: &amp;lt;math&amp;gt;sender&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;encryptedMessage&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;v := &amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''ED25519VerifySignature&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;ephemeralPublicKeyList[Sender]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionId || encryptedMessage&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Assert&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;) or '''return''' Reject&lt;br /&gt;
   &amp;lt;math&amp;gt;message, keyShareMessage :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''AES CTR Decrypt&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionKey&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;encryptedMessage&amp;lt;/math&amp;gt;){}&lt;br /&gt;
   &amp;lt;math&amp;gt;isMetaMessage = &amp;lt;/math&amp;gt;&amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''UpdateNewKeyStatus&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;keyShareMessage&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Verify Digests&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionDiges&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''return'''{&amp;lt;math&amp;gt;isMetaMessage, message&amp;lt;/math&amp;gt;}  # isMetaMessage is true if the message is purely meta message and there is nothing to display&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
=== Common functions ===&lt;br /&gt;
&lt;br /&gt;
====Common functions used by other procedures in different stages====&lt;br /&gt;
&amp;lt;!--alg_comm--&amp;gt;&lt;br /&gt;
{{algorithm-begin|name=Generate Initial Paramters}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;signaturePrivateKey := &amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''RandomBits&amp;lt;/span&amp;gt;'''(256)&lt;br /&gt;
   &amp;lt;math&amp;gt;x_{myId} :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Ed25519 Scalar&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;signaturePrivateKey&amp;lt;/math&amp;gt;)) #{This is both Diffie-Hellman secret and ephemeral signature private key}&lt;br /&gt;
   &amp;lt;math&amp;gt;y_{myId} := x_{myId}P&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;math&amp;gt;x,y&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Verify Key Confirmation and Signatures}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;signatureList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;keyConfirmationList&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''for each''' &amp;lt;math&amp;gt;participant \in participantList&amp;lt;/math&amp;gt;, '''do'''&lt;br /&gt;
     '''if''' &amp;lt;math&amp;gt;keyConfirmationList[participant][myId] \neq Hash(k_{myId,participant} , U_{myId} )&amp;lt;/math&amp;gt;''', then'''&lt;br /&gt;
       &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Halt&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
     '''else''' '''if''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''ED25519VerifySignature&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;ephemeralPublicKeyList[particicpant]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionId | keyShares[myId]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;) = Fail ''', then'''&lt;br /&gt;
       &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Halt&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Compute Session Id}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;participantList&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ephemeralPublicPointList&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;math&amp;gt;Hash(roomName, zip(participantList, ephemeralPublicPointList))&amp;lt;/math&amp;gt;  # &amp;lt;math&amp;gt;zip([a,b],[c,d]):=[(a,c),(b,d)]&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Verify Signatures}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;longPublicList&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;schnorrRandomPointList&amp;lt;/math&amp;gt;, &lt;br /&gt;
 # standard signature verification&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Sign and Send Key Confirmation and Share}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;schnorrRandomPointList&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''for each''' &amp;lt;math&amp;gt;participant \in participantList&amp;lt;/math&amp;gt;, '''do'''&lt;br /&gt;
     &amp;lt;math&amp;gt;k_{myId, participant} := Hash(x_{myId}LP_{participant} |lp_{myId}y_{participant} | x_{myId}y_{participant})&amp;lt;/math&amp;gt;  # Triple DH&lt;br /&gt;
     &amp;lt;math&amp;gt;kc_{myId} := kc_{myId} | Hash(k_{myId,participant}, U_{participant})&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;z_{myId -1, myId} := Hash(k_{myId,myId-1}, sessionId)&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''global''' &amp;lt;math&amp;gt;z_{myId, myId+1} := Hash(k_{myId,myId+1}, sessionId)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;keyShare_{myId} := z_{myId -1, myId} \oplus z_{myId, myId+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;originAuthSignature :=&amp;lt;/math&amp;gt; &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''ED25519Sign&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;SignatureKey&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;sessionId&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;z_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3KeyConfirmationAndShare:3&amp;quot;, &amp;lt;math&amp;gt;myId&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;keyShare_{myId}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;originAuthSignature&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;kc_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Update Session Key}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;keyShareList&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;i := myId&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''for each''' &amp;lt;math&amp;gt;{j \in [i,...,i+n-1]}&amp;lt;/math&amp;gt;, '''do'''&lt;br /&gt;
      &amp;lt;math&amp;gt;z_{j,j+1} := z_{j-1,j} \oplus keyShareListe[j+1]&amp;lt;/math&amp;gt;&lt;br /&gt;
     # recovered &amp;lt;math&amp;gt;z_{i-1,i}&amp;lt;/math&amp;gt; should be equal to its original value&lt;br /&gt;
    '''global''' &amp;lt;math&amp;gt;sessionKey := Hash(z_{j,j+1} | j \in [1...n])&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Sign Params Update Session Key}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;toBeSigned&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;signatureList&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;keyShareList&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Update Session Key&amp;lt;/span&amp;gt;'''()&lt;br /&gt;
   &amp;lt;math&amp;gt;toBeSigned := Hash(sessionId, ||Hash(verifierList, ephemeralPublicPointList, keyShareList)))&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;signature_{myId} := &amp;lt;/math&amp;gt;&amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Sign Session and Send&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;toBeSigned&amp;lt;/math&amp;gt;)&lt;br /&gt;
   &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''Broadcast&amp;lt;/span&amp;gt;'''(&amp;quot;:3mpCAT:3SignedSessionParameters:3&amp;quot;,&amp;lt;math&amp;gt;signature_{myId}&amp;lt;/math&amp;gt;)&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=ComputeSessionDigest}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;&lt;br /&gt;
   '''for each''' &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt; in Messages Received from &amp;lt;math&amp;gt;lastDigestedMessage&amp;lt;/math&amp;gt;+1 till &amp;lt;math&amp;gt;lastMessage&amp;lt;/math&amp;gt;, '''do'''&lt;br /&gt;
      &amp;lt;math&amp;gt;sesionDigest := Hass(sessionDigest, message)&amp;lt;/math&amp;gt; &lt;br /&gt;
      &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''LRU Cache Store Digest&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;math&amp;gt;sessionDigest&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;lastMessageId&amp;lt;/math&amp;gt;&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=NewKeyShareMessage}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;metaMessage&amp;lt;/math&amp;gt;&lt;br /&gt;
 # Based on metaMessage Determines what type of keyshare needs to be send (Ephemeral point or Group key share) and returen it.&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=UpdateNewKeyStatus}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;keyShareMessage&amp;lt;/math&amp;gt;&lt;br /&gt;
 # Update the table of which participant has sent its new ephemeral point or its new group key share&lt;br /&gt;
{{algorithm-end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm-begin|name=Hash}}&lt;br /&gt;
 Input: &amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;&lt;br /&gt;
    '''return''' &amp;lt;span style=&amp;quot;font-family: serif; font-size: larger; font-variant:small-caps;&amp;quot;&amp;gt;'''SHA-512&amp;lt;/span&amp;gt;'''(&amp;lt;math&amp;gt;message&amp;lt;/math&amp;gt;)&lt;br /&gt;
{{algorithm-end}}&lt;/div&gt;</summary>
		<author><name>Infinity0</name></author>	</entry>

	</feed>