<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nina.chat/index.php?action=history&amp;feed=atom&amp;title=Protocols%2FMSNP%2FMSNP8%2FChallenges</id>
	<title>Protocols/MSNP/MSNP8/Challenges - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nina.chat/index.php?action=history&amp;feed=atom&amp;title=Protocols%2FMSNP%2FMSNP8%2FChallenges"/>
	<link rel="alternate" type="text/html" href="https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;action=history"/>
	<updated>2026-06-26T11:56:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=4312&amp;oldid=prev</id>
		<title>Animadoria at 10:28, 12 May 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=4312&amp;oldid=prev"/>
		<updated>2022-05-12T10:28:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:28, 12 May 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Protocols/MSNP&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/del&gt;MSNP8 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Connecting Nav&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Protocols/MSNP&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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;section=&lt;/ins&gt;MSNP8}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki-wiki_:diff:1.41:old-2625:rev-4312:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Animadoria</name></author>
	</entry>
	<entry>
		<id>https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=2625&amp;oldid=prev</id>
		<title>AD: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=2625&amp;oldid=prev"/>
		<updated>2020-05-29T00:23:43Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:23, 29 May 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki-wiki_:diff:1.41:old-2624:rev-2625 --&gt;
&lt;/table&gt;</summary>
		<author><name>AD</name></author>
	</entry>
	<entry>
		<id>https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=2624&amp;oldid=prev</id>
		<title>AD at 00:00, 22 November 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki.nina.chat/index.php?title=Protocols/MSNP/MSNP8/Challenges&amp;diff=2624&amp;oldid=prev"/>
		<updated>2005-11-22T00:00:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Protocols/MSNP/MSNP8 Connecting Nav}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Server Pings (Challenges) =&lt;br /&gt;
Pings from the server are sent with the '''CHL''' command. They are often referred to as challenges, because that is a good possibility as to what the three letter code stands for.&lt;br /&gt;
&lt;br /&gt;
Challenges are sent by the NS from time to time, the first one shortly after the initial status has been set with '''CHG'''. There's no regular period to the time between '''CHL'''s. They include two parameters - the first is always &amp;quot;0&amp;quot;, the second is the &amp;quot;challenge string&amp;quot;. This has always been a 20-digit number, but a client shouldn't rely on that. A challenge might look something like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;&amp;lt;&amp;lt; CHL 0 15570131571988941333\r\n&lt;br /&gt;
&lt;br /&gt;
When you receive a challenge, you must send a QRY command to the server within about 50 seconds or you'll be disconnected. QRY is a payload command with a TrID and two parameters: a client identification string and the number of bytes in the payload. As with all payload commands, the length is be followed by a newline, then the payload, which is not followed by a newline. In MSNP8 the payload of the QRY command is the &amp;quot;MD5 digest&amp;quot; of the challenge string and a client identification code. MD5 digests are always 32 bytes in length.&lt;br /&gt;
&lt;br /&gt;
If you sent an invalid client code or incorrect digest, the server will send error 540 and close the connection. If you get the payload wrong, the results will be hard to predict and not good. Otherwise, the server will send a QRY response with the same TrID and no parameters.&lt;br /&gt;
&lt;br /&gt;
== Client identification information ==&lt;br /&gt;
Different Microsoft clients use different ID codes and ID strings. Here is a list of the strings and their corresponding strings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Client ID string&amp;lt;/b&amp;gt; &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Client ID code&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;msmsgs@msnmsgr.com &amp;lt;td&amp;gt;Q1P7W2E4J9R8U3S5&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;PROD0038W!61ZTF9 &amp;lt;td&amp;gt;VT6PX?UQTM4WM%YR&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;PROD0058#7IL2{QD &amp;lt;td&amp;gt;QHDCY@7R1TB6W?5B&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;PROD0061VRRZH@4F &amp;lt;td&amp;gt;JXQ6J@TUOGYV@N0M&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;PROD00504RLUG%WL &amp;lt;td&amp;gt;I2EBK%PYNLZL5_J4&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;PROD0076ENE8*@AW &amp;lt;td&amp;gt;CEQJ8}OE0!WTSWII&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
It doesn't matter which ID string you use, but you must use the corresponding ID code - for example, you can't use msmsgs@msnmsgr.com with VT6PX?UQTM4WM%YR.&lt;br /&gt;
&lt;br /&gt;
== MD5 digests ==&lt;br /&gt;
MD5 is a message digest algorithm. Taking the MD5 digest of a string gives you a 32 byte &amp;quot;fingerprint&amp;quot; of it. If possible, you should try to find a library or an external program that creates MD5 fingerprints, but it's is officially described in RFC 1321, so you can try to implement it yourself if you're feeling brave. Make sure that your library can produce lower-case hexadecimal digests (there should be an option for this)&lt;br /&gt;
&lt;br /&gt;
When the server gives you a challenge string, add your client code onto the end of it. For example, if the server gives you &amp;lt;b&amp;gt;abcdefg&amp;lt;/b&amp;gt; and your code is &amp;lt;b&amp;gt;1234567&amp;lt;/b&amp;gt;, the input to the MD5 function should be &amp;lt;b&amp;gt;abcdefg1234567&amp;lt;/b&amp;gt;. The hexadecimal digest for abcdefg1234567 is &amp;lt;b&amp;gt;d1713d0f1d2e8fae230328d8fd59de01&amp;lt;/b&amp;gt;. I suggest you check your implementation using this example.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Here is an example server ping and reply. You should check that your MD5 implementation against this example to make sure that you're encoding correctly. The most common mistake is to add a newline to the end of the challenge string before or after encoding it.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;&amp;lt;&amp;lt; CHL 0 15570131571988941333\r\n&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; QRY 1049 msmsgs@msnmsgr.com 32\r\n&lt;br /&gt;
     8f2f5a91b72102cd28355e9fc9000d6e (no newline)&lt;br /&gt;
 &amp;lt;&amp;lt;&amp;lt; QRY 1049\r\n&lt;br /&gt;
&lt;br /&gt;
In this case, you would take the hexadecimal digest of &amp;lt;b&amp;gt;15570131571988941333Q1P7W2E4J9R8U3S5&amp;lt;/b&amp;gt; which happens to be &amp;lt;b&amp;gt;8f2f5a91b72102cd28355e9fc9000d6e&amp;lt;/b&amp;gt;, and of course is 32 bytes long.&lt;br /&gt;
&lt;br /&gt;
[[Category:MSN]]&lt;br /&gt;
[[Category:Protocols/MSNP]]&lt;br /&gt;
[[Category:Work_In_Progress]]&lt;/div&gt;</summary>
		<author><name>AD</name></author>
	</entry>
</feed>