<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=Eudora%2FSSL_Notes.txt</id>
	<title>Eudora/SSL Notes.txt - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=Eudora%2FSSL_Notes.txt"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;action=history"/>
	<updated>2026-06-28T20:55:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26856&amp;oldid=prev</id>
		<title>Woozle: /* C: ClientHello */ attempt at tidying alignment</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26856&amp;oldid=prev"/>
		<updated>2020-12-04T23:54:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;C: ClientHello: &lt;/span&gt; attempt at tidying alignment&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 23:54, 4 December 2020&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-l180&quot;&gt;Line 180:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 180:&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;===C: ClientHello===&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;===C: ClientHello===&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;&amp;lt;pre&amp;gt;&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;&amp;lt;pre&amp;gt;&lt;/div&gt;&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;	Raw data	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			&lt;/del&gt;Structures	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;													&lt;/del&gt;Interpretation of data&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;	Raw data	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/ins&gt;Structures	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;									&lt;/ins&gt;Interpretation of data&lt;/div&gt;&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;	--------	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			&lt;/del&gt;----------	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;													&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;	--------	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/ins&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 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/del&gt;struct TLSPlaintext&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;struct TLSPlaintext&lt;/div&gt;&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;	16	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;						&lt;/del&gt;ContentType type;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;										&lt;/del&gt;0x16 = handshake&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;	16	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;ContentType type;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/ins&gt;0x16 = handshake&lt;/div&gt;&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;	03 01	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;ProtocolVersion version;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/del&gt;0x03 0x01 = TLS 1.0&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;	03 01	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;ProtocolVersion version;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		                                        &lt;/ins&gt;0x03 0x01 = TLS 1.0&lt;/div&gt;&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;	00 6F	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;uint16 length;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;											&lt;/del&gt;0x00 0x6F = 109 bytes&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;	00 6F	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;uint16 length;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/ins&gt;0x00 0x6F = 109 bytes&lt;/div&gt;&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/del&gt;struct Handshake&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;struct Handshake&lt;/div&gt;&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;	01	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/del&gt;HandshakeType msg_type;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/del&gt;0x01 = client_hello&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;	01	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;HandshakeType msg_type;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/ins&gt;0x01 = client_hello&lt;/div&gt;&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;	00 00 6B	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			        &lt;/del&gt;uint24 length;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;										&lt;/del&gt;0x00 0x00 0x6B = 107 bytes&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;	00 00 6B	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;          &lt;/ins&gt;uint24 length;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/ins&gt;0x00 0x00 0x6B = 107 bytes&lt;/div&gt;&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;									&lt;/del&gt;struct ClientHello&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;struct ClientHello&lt;/div&gt;&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;	03 01	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/del&gt;ProtocolVersion client_version;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;0x03 0x01 = TLS 1.0&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;	03 01	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;ProtocolVersion client_version; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                                                      &lt;/ins&gt;0x03 0x01 = TLS 1.0&lt;/div&gt;&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;										&lt;/del&gt;Random random;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				  &lt;/ins&gt;Random random;&lt;/div&gt;&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;	3D AE D6 89	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/del&gt;uint32 gmt_unix_time;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;						&lt;/del&gt;GMT&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;	3D AE D6 89	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	  &lt;/ins&gt;uint32 gmt_unix_time; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                                                                &lt;/ins&gt;GMT&lt;/div&gt;&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;	DF CD 08 8C AB 02 A1 0C	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/del&gt;opaque random_bytes[28];	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;random data&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;	DF CD 08 8C AB 02 A1 0C &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  &lt;/ins&gt;opaque random_bytes[28]; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                                                             &lt;/ins&gt;random data&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;	D0 B5 EE 4E 24 2D 47 6E&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;	D0 B5 EE 4E 24 2D 47 6E&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;	D0 66 13 FC 14 5A CC 6B&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;	D0 66 13 FC 14 5A CC 6B&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;	2F 6F 58 EA&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;	2F 6F 58 EA&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;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;	00	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/del&gt;SessionID session_id;								0x00 = no session (not resuming a previous session)&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;	00 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                       &lt;/ins&gt;SessionID session_id;								0x00 = no session (not resuming a previous session)&lt;/div&gt;&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;	00 44	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;							&lt;/del&gt;CipherSuite cipher_suites&amp;lt;2..2^16-1&amp;gt;;	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			&lt;/del&gt;0x00 0x44 = 68 bytes of cipher suite data&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;	00 44 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                    &lt;/ins&gt;CipherSuite cipher_suites&amp;lt;2..2^16-1&amp;gt;;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			                &lt;/ins&gt;0x00 0x44 = 68 bytes of cipher suite data&lt;/div&gt;&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;	00 4A 00 50 00 0A 00 16	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;																&lt;/del&gt;list of cipher suites (e.g. 0x00 0x0A = TLS_RSA_WITH_3DES_EDE_CBC_SHA)&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;	00 4A 00 50 00 0A 00 16 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/ins&gt;list of cipher suites (e.g. 0x00 0x0A = TLS_RSA_WITH_3DES_EDE_CBC_SHA)&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;	00 13 00 1B 00 48 00 4E&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;	00 13 00 1B 00 48 00 4E&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;	00 05 00 04 00 66 00 18&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;	00 05 00 04 00 66 00 18&lt;/div&gt;&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-l209&quot;&gt;Line 209:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 209:&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;	00 19 00 17 00 02 00 01&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;	00 19 00 17 00 02 00 01&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;	00 47 00 4D&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;	00 47 00 4D&lt;/div&gt;&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;	01	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;								&lt;/del&gt;CompressionMethod compression_methods&amp;lt;1..2^8-1&amp;gt;;	0x01 = 1 byte of compression method data&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;	01	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		  &lt;/ins&gt;CompressionMethod compression_methods&amp;lt;1..2^8-1&amp;gt;; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                             &lt;/ins&gt;0x01 = 1 byte of compression method data&lt;/div&gt;&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;	00	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;																					&lt;/del&gt;0x00 = CompressionMethod.null&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;	00	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;												&lt;/ins&gt;0x00 = CompressionMethod.null&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;&amp;lt;/pre&amp;gt;&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;&amp;lt;/pre&amp;gt;&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;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26855&amp;oldid=prev</id>
		<title>Woozle: /* SSL Plus Protocol values */ fixed column alignment</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26855&amp;oldid=prev"/>
		<updated>2020-12-04T23:44:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;SSL Plus Protocol values: &lt;/span&gt; fixed column alignment&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 23:44, 4 December 2020&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-l79&quot;&gt;Line 79:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 79:&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;INI value	Protocol enum						Record		Protocol&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;INI value	Protocol enum						Record		Protocol&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;	0		SSL_Version_Undetermined			SSL2		TLS1&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;	0		SSL_Version_Undetermined			SSL2		TLS1&lt;/div&gt;&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;	1		SSL_Version_3_0_With_2_0_Hello	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/del&gt;SSL2		SSL3&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;	1		SSL_Version_3_0_With_2_0_Hello	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;SSL2		SSL3&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;	2		SSL_Version_3_0_Only				SSL3		SSL3&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;	2		SSL_Version_3_0_Only				SSL3		SSL3&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;	3		TLS_Version_1_0_Only				TLS1		TLS1&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;	3		TLS_Version_1_0_Only				TLS1		TLS1&lt;/div&gt;&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;	4		TLS_Version_1_0_With_2_0_Hello	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/del&gt;SSL2		TLS1&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;	4		TLS_Version_1_0_With_2_0_Hello	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	        &lt;/ins&gt;SSL2		TLS1&lt;/div&gt;&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;	5		SSL_Version_2_0	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;SSL2		SSL2&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;	5		SSL_Version_2_0	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;SSL2		SSL2&lt;/div&gt;&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;	6		SSL_Version_3_0	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;SSL2		SSL3&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;	6		SSL_Version_3_0	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;SSL2		SSL3&lt;/div&gt;&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;	7		TLS_Version_1_0	&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					&lt;/del&gt;SSL3		TLS1&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;	7		TLS_Version_1_0	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				&lt;/ins&gt;SSL3		TLS1&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;&amp;lt;/pre&amp;gt;&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;&amp;lt;/pre&amp;gt;&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;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26784&amp;oldid=prev</id>
		<title>Woozle: Created page with &quot;&#039;&#039;This page is derived from the &lt;code&gt;SSL Notes.txt&lt;/code&gt; file included with the Eudora 7.1 source code.&#039;&#039; =SSL Notes= &#039;&#039;Updated 10-30-02 by Dale Wiggins&#039;&#039; ==Disclaimer== The...&quot;</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=Eudora/SSL_Notes.txt&amp;diff=26784&amp;oldid=prev"/>
		<updated>2020-10-30T20:01:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;This page is derived from the &amp;lt;code&amp;gt;SSL Notes.txt&amp;lt;/code&amp;gt; file included with the Eudora 7.1 source code.&amp;#039;&amp;#039; =SSL Notes= &amp;#039;&amp;#039;Updated 10-30-02 by Dale Wiggins&amp;#039;&amp;#039; ==Disclaimer== The...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;This page is derived from the &amp;lt;code&amp;gt;SSL Notes.txt&amp;lt;/code&amp;gt; file included with the Eudora 7.1 source code.&amp;#039;&amp;#039;&lt;br /&gt;
=SSL Notes=&lt;br /&gt;
&amp;#039;&amp;#039;Updated 10-30-02 by Dale Wiggins&amp;#039;&amp;#039;&lt;br /&gt;
==Disclaimer==&lt;br /&gt;
These notes are based largely on my personal experience diagnosing SSL&lt;br /&gt;
related problems.  In particular the SSL Plus documentation is extremely vague&lt;br /&gt;
when it comes to dealing with failures so the meanings of the various error&lt;br /&gt;
codes are based on what I have seen and are certainly incomplete and possibly&lt;br /&gt;
not entirely accurate.&lt;br /&gt;
&lt;br /&gt;
The interpretation of the raw data of the SSL handshake process is based on my&lt;br /&gt;
taking data from an actual successful handshake and breaking it down into the&lt;br /&gt;
various data fields based on RFC 2246.  Again there is room for error on my&lt;br /&gt;
part.&lt;br /&gt;
==Diagnosing Failure==&lt;br /&gt;
Generally the most important piece of information in diagnosing an SSL failure&lt;br /&gt;
is the return value Eudora gets back from SSLHandshake().  Here is a list of&lt;br /&gt;
the possible return codes and partial explanations of the most commonly found&lt;br /&gt;
codes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSLHandshake() return value&lt;br /&gt;
	SSLNoErr = 0&lt;br /&gt;
	SSLMemoryErr = -7000&lt;br /&gt;
	SSLUnsupportedErr = -6999&lt;br /&gt;
	SSLOverflowErr = -6998&lt;br /&gt;
	SSLUnknownErr = -6997&lt;br /&gt;
	SSLProtocolErr = -6996&lt;br /&gt;
	SSLNegotiationErr = -6995&lt;br /&gt;
	SSLFatalAlert = -6994&lt;br /&gt;
	SSLWouldBlockErr = -6993&lt;br /&gt;
	SSLIOErr = -6992&lt;br /&gt;
	SSLSessionNotFoundErr = -6991&lt;br /&gt;
	SSLConnectionClosedGraceful = -6990&lt;br /&gt;
	SSLConnectionClosedError = -6989&lt;br /&gt;
	&lt;br /&gt;
	ASNBadEncodingErr = -6988&lt;br /&gt;
	ASNIntegerTooBigErr = -6987&lt;br /&gt;
	&lt;br /&gt;
	X509CertChainInvalidErr = -6986&lt;br /&gt;
	X509CertExpiredErr = -6985&lt;br /&gt;
	X509NamesNotEqualErr = -6984&lt;br /&gt;
	X509CertChainIncompleteErr = -6983&lt;br /&gt;
	X509DataNotFoundErr = -6982&lt;br /&gt;
&lt;br /&gt;
	SSLBadParameterErr = -6981&lt;br /&gt;
	SSLIOClosedOverrideGoodbyeKiss = -6980&lt;br /&gt;
	SSLFileNotFound = -6979&lt;br /&gt;
	SSLDataNotFound = -6978&lt;br /&gt;
	SSLDecryptFailed = -6977&lt;br /&gt;
&lt;br /&gt;
	X509UnauthorizedCA = -6976&lt;br /&gt;
	X509UnknownCriticalExtension = -6975&lt;br /&gt;
	X509UnauthorizedCertificate = -6974&lt;br /&gt;
&lt;br /&gt;
	SSLChildCtxOrigin = -6973&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Common &amp;lt;code&amp;gt;SSLHandshake()&amp;lt;/code&amp;gt; return values and their meanings:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-6996 (SSLProtocolErr)&amp;#039;&amp;#039;&amp;#039; - Client and server could not negotiate a protocol.&lt;br /&gt;
*: This will happen if the client offers a protocol below the minimum protocol the server is willing to use.  For example, if the client offers SSL3 but the server only accepts TLS1.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-6995 (SSLNegotiationErr)&amp;#039;&amp;#039;&amp;#039; - Negotiation between client and server failed after a protocol was agreed on.&lt;br /&gt;
*: One case where this will happen is if the server certificate is not trusted.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-6994 (SSLFatalAlert)&amp;#039;&amp;#039;&amp;#039; - Something went very wrong.&lt;br /&gt;
*: I only saw this one once and it went away on its own before I could diagnose the problem.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-6993 (SSLWouldBlockErr)&amp;#039;&amp;#039;&amp;#039; - Operation would block.&lt;br /&gt;
*: Not an issue in Eudora since it will loop until it is no longer blocked.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-6992 (SSLIOErr)&amp;#039;&amp;#039;&amp;#039; - Client and server could not communicate.&lt;br /&gt;
*: One case where this will happen is if the client sends an SSL2 or SSL3 client hello but the server will not listen to anything less than TLS1 (which is the default behavior for UW&amp;#039;s POP/IMAP server software).&lt;br /&gt;
&lt;br /&gt;
==SSL Plus Protocol values==&lt;br /&gt;
&lt;br /&gt;
Specify via SSLReceiveVersion, SSLSendVersion, SSLAltPortReceiveVersion, SSLAltPortSendVersion.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Record&amp;quot; indicates which version of the SSL data format will be used to&lt;br /&gt;
communicate between the client and server.  The client hello will be sent using&lt;br /&gt;
this data format.  &amp;quot;Protocol&amp;quot; indicates the highest protocol the client will&lt;br /&gt;
offer to the client.  The data for these two columns is taken from the SSL&lt;br /&gt;
Plus API documentation.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INI value	Protocol enum						Record		Protocol&lt;br /&gt;
	0		SSL_Version_Undetermined			SSL2		TLS1&lt;br /&gt;
	1		SSL_Version_3_0_With_2_0_Hello		SSL2		SSL3&lt;br /&gt;
	2		SSL_Version_3_0_Only				SSL3		SSL3&lt;br /&gt;
	3		TLS_Version_1_0_Only				TLS1		TLS1&lt;br /&gt;
	4		TLS_Version_1_0_With_2_0_Hello		SSL2		TLS1&lt;br /&gt;
	5		SSL_Version_2_0						SSL2		SSL2&lt;br /&gt;
	6		SSL_Version_3_0						SSL2		SSL3&lt;br /&gt;
	7		TLS_Version_1_0						SSL3		TLS1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Handshake Process (from RFC 2246)==&lt;br /&gt;
&lt;br /&gt;
Message flow for a full handshake.  * Indicates optional or situation-dependent&lt;br /&gt;
messages that are not always sent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	Client                                             Server&lt;br /&gt;
&lt;br /&gt;
	ClientHello                --------&amp;gt;&lt;br /&gt;
												  ServerHello&lt;br /&gt;
												 Certificate*&lt;br /&gt;
										   ServerKeyExchange*&lt;br /&gt;
										  CertificateRequest*&lt;br /&gt;
							   &amp;lt;--------      ServerHelloDone&lt;br /&gt;
	Certificate*&lt;br /&gt;
	ClientKeyExchange&lt;br /&gt;
	CertificateVerify*&lt;br /&gt;
	[ChangeCipherSpec]&lt;br /&gt;
	Finished                   --------&amp;gt;&lt;br /&gt;
										   [ChangeCipherSpec]&lt;br /&gt;
							   &amp;lt;--------             Finished&lt;br /&gt;
	Application Data           &amp;lt;-------&amp;gt;     Application Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steps in a typical Eudora handshake process:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	ClientHello - Client sends a hello message to the server.  The client hello&lt;br /&gt;
		specifies (among other things) the highest protocol it can support.&lt;br /&gt;
		This message can be formatted using the SSL2, SSL3 or TLS1 record&lt;br /&gt;
		protocol.  (SSL3 and TLS1 are identical except for the data contained&lt;br /&gt;
		in the version field.)  If the client uses the SSL2 or SSL3 record&lt;br /&gt;
		protocol but the server will only accept the TLS1 record protocol the&lt;br /&gt;
		handshake will fail with -6992.&lt;br /&gt;
	ServerHello - If the server agrees on a protocol to use it will send a&lt;br /&gt;
		server hello to the client which (among other things) specifies the&lt;br /&gt;
		protocol which will be used.  If the client&amp;#039;s highest protocol is lower&lt;br /&gt;
		than minimum protocol supported by the server the handshake will fail&lt;br /&gt;
		with -6996.&lt;br /&gt;
	Server Certificate - The server then sends its certificate to the client.&lt;br /&gt;
		If the certificate is not trusted by the client the handshake will fail&lt;br /&gt;
		with -6995.  If the server name does not match the name in the&lt;br /&gt;
		certificate the handshake will fail with -6984.&lt;br /&gt;
	ServerHelloDone - The server sends a message indicating that it is done&lt;br /&gt;
		with the hello portion of the handshake.&lt;br /&gt;
	ClientKeyExchange - The client sends the data necessary to set the&lt;br /&gt;
		premaster secret.&lt;br /&gt;
	Client ChangeCipherSpec - The client sends a message to indicate that&lt;br /&gt;
		subsequent records will be protected under the newly negotiated&lt;br /&gt;
		CipherSpec and keys.&lt;br /&gt;
	Client Finished - The client sends a message indicating it is finished&lt;br /&gt;
		with its portion of the handshake process.  This is the first client&lt;br /&gt;
		message protected with the just-negotiated algorithms, keys, and&lt;br /&gt;
		secrets.&lt;br /&gt;
	Server ChangeCipherSpec - The server sends a message to indicate that&lt;br /&gt;
		subsequent records will be protected under the newly negotiated&lt;br /&gt;
		CipherSpec and keys.&lt;br /&gt;
	Server Finished - The server sends a message indicating it is finished&lt;br /&gt;
		with its portion of the handshake process.  This is the first server&lt;br /&gt;
		message protected with the just-negotiated algorithms, keys, and&lt;br /&gt;
		secrets.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Sample Handshake (reflect.qualcomm.com)==&lt;br /&gt;
&lt;br /&gt;
The following raw data was gathered by placing breakpoints in Windows Eudora in&lt;br /&gt;
QCWorkerSocket::SocketReadCallback() and QCWorkerSocket::SocketWriteCallback()&lt;br /&gt;
and looking at the data being written or read.&lt;br /&gt;
&lt;br /&gt;
Note that each section represents a separate &amp;quot;chunk&amp;quot; of data sent or received&lt;br /&gt;
in the callbacks above.  Note also that in the below case if the client is&lt;br /&gt;
sending more than one structure without waiting for a server response it will&lt;br /&gt;
always concatenate all of the structures together into one write.  Note also&lt;br /&gt;
that in the below case the server will always break structures into two&lt;br /&gt;
separate reads.&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	C: ClientHello (116 bytes)&lt;br /&gt;
	S: ServerHello (part 1) (5 bytes)&lt;br /&gt;
	S: ServerHello (part 2) (74 bytes)&lt;br /&gt;
	S: Server Certificate (part 1) (5 bytes)&lt;br /&gt;
	S: Server Certificate (part 2) (699 bytes)&lt;br /&gt;
	S: ServerHelloDone (part 1) (5 bytes)&lt;br /&gt;
	S: ServerHelloDone (part 2) (4 bytes)&lt;br /&gt;
	C: ClientKeyExchange/Client ChangeCipherSpec/Client Finished (190 bytes)&lt;br /&gt;
	S: Server ChangeCipherSpec (part 1) (5 bytes)&lt;br /&gt;
	S: Server ChangeCipherSpec (part 2) (1 byte)&lt;br /&gt;
	S: Server Finished (part 1) (5 bytes)&lt;br /&gt;
	S: Server Finished (part 2) (40 bytes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===C: ClientHello===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	Raw data				Structures														Interpretation of data&lt;br /&gt;
	--------				----------														----------------------&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 6F						uint16 length;												0x00 0x6F = 109 bytes&lt;br /&gt;
								struct Handshake&lt;br /&gt;
	01								HandshakeType msg_type;									0x01 = client_hello&lt;br /&gt;
	00 00 6B				        uint24 length;											0x00 0x00 0x6B = 107 bytes&lt;br /&gt;
									struct ClientHello&lt;br /&gt;
	03 01								ProtocolVersion client_version;						0x03 0x01 = TLS 1.0&lt;br /&gt;
										Random random;&lt;br /&gt;
	3D AE D6 89								uint32 gmt_unix_time;							GMT&lt;br /&gt;
	DF CD 08 8C AB 02 A1 0C					opaque random_bytes[28];						random data&lt;br /&gt;
	D0 B5 EE 4E 24 2D 47 6E&lt;br /&gt;
	D0 66 13 FC 14 5A CC 6B&lt;br /&gt;
	2F 6F 58 EA&lt;br /&gt;
&lt;br /&gt;
	00									SessionID session_id;								0x00 = no session (not resuming a previous session)&lt;br /&gt;
	00 44								CipherSuite cipher_suites&amp;lt;2..2^16-1&amp;gt;;				0x00 0x44 = 68 bytes of cipher suite data&lt;br /&gt;
	00 4A 00 50 00 0A 00 16																	list of cipher suites (e.g. 0x00 0x0A = TLS_RSA_WITH_3DES_EDE_CBC_SHA)&lt;br /&gt;
	00 13 00 1B 00 48 00 4E&lt;br /&gt;
	00 05 00 04 00 66 00 18&lt;br /&gt;
	00 49 00 4F 00 09 00 15&lt;br /&gt;
	00 12 00 1A FF 85 00 64&lt;br /&gt;
	00 62 00 65 00 63 FF 84&lt;br /&gt;
	00 03 00 08 00 14 00 11&lt;br /&gt;
	00 19 00 17 00 02 00 01&lt;br /&gt;
	00 47 00 4D&lt;br /&gt;
	01									CompressionMethod compression_methods&amp;lt;1..2^8-1&amp;gt;;	0x01 = 1 byte of compression method data&lt;br /&gt;
	00																						0x00 = CompressionMethod.null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===S: ServerHello (part 1)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 4A						uint16 length;												0x00 0x4A = 74 bytes&lt;br /&gt;
								struct Handshake (next chunk of data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===S: ServerHello (part 2)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
								struct Handshake&lt;br /&gt;
	02								HandshakeType msg_type;									0x02 = server_hello&lt;br /&gt;
	00 00 46						uint24 length;											0x00 0x00 0x46 = 70 bytes&lt;br /&gt;
									struct ServerHello&lt;br /&gt;
	03 01								ProtocolVersion server_version;						0x03 0x01 = TLS 1.0&lt;br /&gt;
										Random random&lt;br /&gt;
	3D AE 70 5D								uint32 gmt_unix_time;							GMT&lt;br /&gt;
	F7 D3 73 90 83 40 64 0F					opaque random_bytes[28];						random data&lt;br /&gt;
	F7 27 72 1A 61 B0 8B BD&lt;br /&gt;
	7E AC 6F C3 40 39 FD 5F&lt;br /&gt;
	8D EA 9A FF&lt;br /&gt;
	20									SessionID session_id;								0x20 = 32 bytes of session ID data&lt;br /&gt;
	37 DB DE FE 2E BC F3 80																	session ID&lt;br /&gt;
	C6 74 B2 5B 58 A0 6D 20&lt;br /&gt;
	08 FE BF 4F 3B 20 F3 A5&lt;br /&gt;
	8C 78 F5 E1 07 5D 3B 2C&lt;br /&gt;
	00 0A								CipherSuite cipher_suite;							0x00 0x0A = TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;br /&gt;
	00									CompressionMethod compression_method;				0x00 = CompressionMethod.null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TIDYING IN PROGRESS HERE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server Certificate (part 1)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	02 BB						uint16 length;												0x02 0xBB = 699 bytes&lt;br /&gt;
								struct Handshake (next chunk of data)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server Certificate (part 2)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
								struct Handshake&lt;br /&gt;
	0B								HandshakeType msg_type;									0x0B = certificate&lt;br /&gt;
	00 02 B7						uint24 length;											0x00 0x02 0xB7 = 695 bytes&lt;br /&gt;
								    struct Certificate&lt;br /&gt;
	00 02 B4							ASN.1Cert certificate_list&amp;lt;1..2^24-1&amp;gt;;				0x00 0x02 0xB4 = 692 bytes&lt;br /&gt;
	00 02 B1																				0x00 0x02 0xB1 = 689 bytes&lt;br /&gt;
	30 82 02 AD 30 82 02 16																	certificate data&lt;br /&gt;
	02 01 01 30 0D 06 09 2A&lt;br /&gt;
	86 48 86 F7 0D 01 01 04&lt;br /&gt;
	05 00 30 81 9A 31 0B 30&lt;br /&gt;
	...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: ServerHelloDone (part 1)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 04						uint16 length;												0x00 0x04 = 4 bytes&lt;br /&gt;
								struct Handshake (next chunk of data)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: ServerHelloDone (part 2)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
								struct Handshake&lt;br /&gt;
	0E								HandshakeType msg_type;									0x0E = server_hello_done&lt;br /&gt;
	00 00 00						uint24 length;											0x00 0x00 0x00 = 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
C: ClientKeyExchange/Client ChangeCipherSpec/Client Finished&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 86						uint16 length;												0x00 0x86 = 134 bytes&lt;br /&gt;
								struct Handshake&lt;br /&gt;
	10								HandshakeType msg_type;									0x10 = client_key_exchange&lt;br /&gt;
	00 00 82						uint24 length;											0x00 0x00 0x82 = 130 bytes&lt;br /&gt;
								    struct ClientKeyExchange&lt;br /&gt;
	00 80								[details vary by KeyExchangeAlgorithm]				0x00 0x80 = 128 bytes&lt;br /&gt;
	70 96 22 55 2A EB E2 F3																	key exchange data&lt;br /&gt;
	A9 C9 11 64 B7 54 BA 2E&lt;br /&gt;
	CC 28 7F D9 45 A0 0D 2D&lt;br /&gt;
	B2 25 20 FF 8B A9 E5 34&lt;br /&gt;
	...&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	14							ContentType type;											0x14 = change_cipher_spec&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 01						uint16 length;												0x00 0x01 = 1 byte&lt;br /&gt;
							    struct ChangeCipherSpec&lt;br /&gt;
	01						        enum type;												0x01 = change_cipher_spec&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 28						uint16 length;												0x00 0x28 = 40 bytes&lt;br /&gt;
								struct Finished&lt;br /&gt;
	26 4B C6 7B C5 36 7C 35			opaque verify_data[12];									Finished message data (protected under the newly negotiated CipherSpec and keys)&lt;br /&gt;
	87 1B 30 E8 BC C3 11 FC&lt;br /&gt;
	44 10 8A 63 97 66 FB 4B&lt;br /&gt;
	94 17 A9 5C 9B D9 9A 34&lt;br /&gt;
	B6 70 EB 9A 7F 18 E0 5C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server ChangeCipherSpec (part 1)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	14							ContentType type;											0x14 = change_cipher_spec&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 01						uint16 length;												0x00 0x86 = 134 bytes&lt;br /&gt;
							    struct ChangeCipherSpec (next chunk of data)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server ChangeCipherSpec (part 2)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							    struct ChangeCipherSpec&lt;br /&gt;
	01						        enum type;												0x01 = change_cipher_spec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server Finished (part 1)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 28						uint16 length;												0x00 0x28 = 40 bytes&lt;br /&gt;
								struct Finished (next chunk of data)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
S: Server Finished (part 2)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
							struct TLSPlaintext&lt;br /&gt;
	16							ContentType type;											0x16 = handshake&lt;br /&gt;
	03 01						ProtocolVersion version;									0x03 0x01 = TLS 1.0&lt;br /&gt;
	00 28						uint16 length;												0x00 0x28 = 40 bytes&lt;br /&gt;
								struct Finished&lt;br /&gt;
	90 86 7F 12 93 33 C3 59			opaque verify_data[12];									Finished message data (protected under the newly negotiated CipherSpec and keys)&lt;br /&gt;
	0C 72 93 50 C1 66 05 F4&lt;br /&gt;
	A4 68 AC 7A 7B 82 D9 4E&lt;br /&gt;
	C3 50 B6 18 70 85 74 4C&lt;br /&gt;
	28 F0 99 3D C3 AC 05 A6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
Data Structures (from RFC 2246)&lt;br /&gt;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A. Protocol constant values&lt;br /&gt;
&lt;br /&gt;
   This section describes protocol types and constants.&lt;br /&gt;
&lt;br /&gt;
A.1. Record layer&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        uint8 major, minor;&lt;br /&gt;
    } ProtocolVersion;&lt;br /&gt;
&lt;br /&gt;
    ProtocolVersion version = { 3, 1 };     /* TLS v1.0 */&lt;br /&gt;
&lt;br /&gt;
    enum {&lt;br /&gt;
        change_cipher_spec(20), alert(21), handshake(22),&lt;br /&gt;
        application_data(23), (255)&lt;br /&gt;
    } ContentType;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ContentType type;&lt;br /&gt;
        ProtocolVersion version;&lt;br /&gt;
        uint16 length;&lt;br /&gt;
        opaque fragment[TLSPlaintext.length];&lt;br /&gt;
    } TLSPlaintext;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ContentType type;&lt;br /&gt;
        ProtocolVersion version;&lt;br /&gt;
        uint16 length;&lt;br /&gt;
        opaque fragment[TLSCompressed.length];&lt;br /&gt;
    } TLSCompressed;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ContentType type;&lt;br /&gt;
        ProtocolVersion version;&lt;br /&gt;
        uint16 length;&lt;br /&gt;
        select (CipherSpec.cipher_type) {&lt;br /&gt;
            case stream: GenericStreamCipher;&lt;br /&gt;
            case block:  GenericBlockCipher;&lt;br /&gt;
        } fragment;&lt;br /&gt;
    } TLSCiphertext;&lt;br /&gt;
&lt;br /&gt;
    stream-ciphered struct {&lt;br /&gt;
        opaque content[TLSCompressed.length];&lt;br /&gt;
        opaque MAC[CipherSpec.hash_size];&lt;br /&gt;
    } GenericStreamCipher;&lt;br /&gt;
&lt;br /&gt;
    block-ciphered struct {&lt;br /&gt;
        opaque content[TLSCompressed.length];&lt;br /&gt;
        opaque MAC[CipherSpec.hash_size];&lt;br /&gt;
        uint8 padding[GenericBlockCipher.padding_length];&lt;br /&gt;
        uint8 padding_length;&lt;br /&gt;
    } GenericBlockCipher;&lt;br /&gt;
&lt;br /&gt;
A.2. Change cipher specs message&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        enum { change_cipher_spec(1), (255) } type;&lt;br /&gt;
    } ChangeCipherSpec;&lt;br /&gt;
&lt;br /&gt;
A.3. Alert messages&lt;br /&gt;
&lt;br /&gt;
    enum { warning(1), fatal(2), (255) } AlertLevel;&lt;br /&gt;
&lt;br /&gt;
        enum {&lt;br /&gt;
            close_notify(0),&lt;br /&gt;
            unexpected_message(10),&lt;br /&gt;
            bad_record_mac(20),&lt;br /&gt;
            decryption_failed(21),&lt;br /&gt;
            record_overflow(22),&lt;br /&gt;
            decompression_failure(30),&lt;br /&gt;
            handshake_failure(40),&lt;br /&gt;
            bad_certificate(42),&lt;br /&gt;
            unsupported_certificate(43),&lt;br /&gt;
            certificate_revoked(44),&lt;br /&gt;
            certificate_expired(45),&lt;br /&gt;
            certificate_unknown(46),&lt;br /&gt;
            illegal_parameter(47),&lt;br /&gt;
            unknown_ca(48),&lt;br /&gt;
            access_denied(49),&lt;br /&gt;
            decode_error(50),&lt;br /&gt;
            decrypt_error(51),&lt;br /&gt;
            export_restriction(60),&lt;br /&gt;
            protocol_version(70),&lt;br /&gt;
            insufficient_security(71),&lt;br /&gt;
            internal_error(80),&lt;br /&gt;
            user_canceled(90),&lt;br /&gt;
            no_renegotiation(100),&lt;br /&gt;
            (255)&lt;br /&gt;
        } AlertDescription;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        AlertLevel level;&lt;br /&gt;
        AlertDescription description;&lt;br /&gt;
    } Alert;&lt;br /&gt;
&lt;br /&gt;
A.4. Handshake protocol&lt;br /&gt;
&lt;br /&gt;
    enum {&lt;br /&gt;
        hello_request(0), client_hello(1), server_hello(2),&lt;br /&gt;
        certificate(11), server_key_exchange (12),&lt;br /&gt;
        certificate_request(13), server_hello_done(14),&lt;br /&gt;
        certificate_verify(15), client_key_exchange(16),&lt;br /&gt;
        finished(20), (255)&lt;br /&gt;
    } HandshakeType;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        HandshakeType msg_type;&lt;br /&gt;
        uint24 length;&lt;br /&gt;
        select (HandshakeType) {&lt;br /&gt;
            case hello_request:       HelloRequest;&lt;br /&gt;
            case client_hello:        ClientHello;&lt;br /&gt;
            case server_hello:        ServerHello;&lt;br /&gt;
            case certificate:         Certificate;&lt;br /&gt;
            case server_key_exchange: ServerKeyExchange;&lt;br /&gt;
            case certificate_request: CertificateRequest;&lt;br /&gt;
            case server_hello_done:   ServerHelloDone;&lt;br /&gt;
            case certificate_verify:  CertificateVerify;&lt;br /&gt;
            case client_key_exchange: ClientKeyExchange;&lt;br /&gt;
            case finished:            Finished;&lt;br /&gt;
        } body;&lt;br /&gt;
    } Handshake;&lt;br /&gt;
&lt;br /&gt;
A.4.1. Hello messages&lt;br /&gt;
&lt;br /&gt;
    struct { } HelloRequest;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32 gmt_unix_time;&lt;br /&gt;
        opaque random_bytes[28];&lt;br /&gt;
    } Random;&lt;br /&gt;
&lt;br /&gt;
    opaque SessionID&amp;lt;0..32&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    uint8 CipherSuite[2];&lt;br /&gt;
&lt;br /&gt;
    enum { null(0), (255) } CompressionMethod;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ProtocolVersion client_version;&lt;br /&gt;
        Random random;&lt;br /&gt;
        SessionID session_id;&lt;br /&gt;
        CipherSuite cipher_suites&amp;lt;2..2^16-1&amp;gt;;&lt;br /&gt;
        CompressionMethod compression_methods&amp;lt;1..2^8-1&amp;gt;;&lt;br /&gt;
    } ClientHello;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ProtocolVersion server_version;&lt;br /&gt;
        Random random;&lt;br /&gt;
        SessionID session_id;&lt;br /&gt;
        CipherSuite cipher_suite;&lt;br /&gt;
        CompressionMethod compression_method;&lt;br /&gt;
    } ServerHello;&lt;br /&gt;
&lt;br /&gt;
A.4.2. Server authentication and key exchange messages&lt;br /&gt;
&lt;br /&gt;
    opaque ASN.1Cert&amp;lt;2^24-1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ASN.1Cert certificate_list&amp;lt;1..2^24-1&amp;gt;;&lt;br /&gt;
    } Certificate;&lt;br /&gt;
&lt;br /&gt;
    enum { rsa, diffie_hellman } KeyExchangeAlgorithm;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        opaque RSA_modulus&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
        opaque RSA_exponent&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
    } ServerRSAParams;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        opaque DH_p&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
        opaque DH_g&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
        opaque DH_Ys&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
    } ServerDHParams;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        select (KeyExchangeAlgorithm) {&lt;br /&gt;
            case diffie_hellman:&lt;br /&gt;
                ServerDHParams params;&lt;br /&gt;
                Signature signed_params;&lt;br /&gt;
            case rsa:&lt;br /&gt;
                ServerRSAParams params;&lt;br /&gt;
                Signature signed_params;&lt;br /&gt;
        };&lt;br /&gt;
    } ServerKeyExchange;&lt;br /&gt;
&lt;br /&gt;
    enum { anonymous, rsa, dsa } SignatureAlgorithm;&lt;br /&gt;
&lt;br /&gt;
    select (SignatureAlgorithm)&lt;br /&gt;
    {   case anonymous: struct { };&lt;br /&gt;
        case rsa:&lt;br /&gt;
            digitally-signed struct {&lt;br /&gt;
                opaque md5_hash[16];&lt;br /&gt;
                opaque sha_hash[20];&lt;br /&gt;
            };&lt;br /&gt;
        case dsa:&lt;br /&gt;
            digitally-signed struct {&lt;br /&gt;
                opaque sha_hash[20];&lt;br /&gt;
            };&lt;br /&gt;
    } Signature;&lt;br /&gt;
&lt;br /&gt;
    enum {&lt;br /&gt;
        rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),&lt;br /&gt;
        (255)&lt;br /&gt;
    } ClientCertificateType;&lt;br /&gt;
&lt;br /&gt;
    opaque DistinguishedName&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ClientCertificateType certificate_types&amp;lt;1..2^8-1&amp;gt;;&lt;br /&gt;
        DistinguishedName certificate_authorities&amp;lt;3..2^16-1&amp;gt;;&lt;br /&gt;
    } CertificateRequest;&lt;br /&gt;
&lt;br /&gt;
    struct { } ServerHelloDone;&lt;br /&gt;
&lt;br /&gt;
A.4.3. Client authentication and key exchange messages&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        select (KeyExchangeAlgorithm) {&lt;br /&gt;
            case rsa: EncryptedPreMasterSecret;&lt;br /&gt;
            case diffie_hellman: DiffieHellmanClientPublicValue;&lt;br /&gt;
        } exchange_keys;&lt;br /&gt;
    } ClientKeyExchange;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        ProtocolVersion client_version;&lt;br /&gt;
        opaque random[46];&lt;br /&gt;
&lt;br /&gt;
    } PreMasterSecret;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        public-key-encrypted PreMasterSecret pre_master_secret;&lt;br /&gt;
    } EncryptedPreMasterSecret;&lt;br /&gt;
&lt;br /&gt;
    enum { implicit, explicit } PublicValueEncoding;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        select (PublicValueEncoding) {&lt;br /&gt;
            case implicit: struct {};&lt;br /&gt;
            case explicit: opaque DH_Yc&amp;lt;1..2^16-1&amp;gt;;&lt;br /&gt;
        } dh_public;&lt;br /&gt;
    } ClientDiffieHellmanPublic;&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        Signature signature;&lt;br /&gt;
    } CertificateVerify;&lt;br /&gt;
&lt;br /&gt;
A.4.4. Handshake finalization message&lt;br /&gt;
&lt;br /&gt;
    struct {&lt;br /&gt;
        opaque verify_data[12];&lt;br /&gt;
    } Finished;&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>