<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
		<id>https://wiki.distorted.org.uk/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdw</id>
		<title>distorted.org.uk wiki - User contributions [en-gb]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.distorted.org.uk/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdw"/>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/wiki/Special:Contributions/Mdw"/>
		<updated>2026-05-05T08:24:49Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=17</id>
		<title>Mdw's guitars</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=17"/>
				<updated>2020-11-02T14:08:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Æmilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners)&lt;br /&gt;
* Julia (Ibanez RG2570EX in Royal Blue Flat (I think))&lt;br /&gt;
* Antonia (Ibanez RG550 in Black, pre 1994, with maple fingerboard; bridge pickup replaced with Seymour Duncan JB)&lt;br /&gt;
* Claudia (Ibanez RG7620 in Black)&lt;br /&gt;
* Lucretia (ESP LTD EX-307 in Black Satin, with Schaller locking tuners)&lt;br /&gt;
* Cælia (Steinberger Spirit GT-Pro in Black)&lt;br /&gt;
* Maria (Aria AK430CE)&lt;br /&gt;
* Lavinia (Tanglewood TW45DLX)&lt;br /&gt;
* Valeria (Ibanez BTB205(?) in Pewter)&lt;br /&gt;
* Cornelia (Steinberger Spirit XT-25 in Black)&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=16</id>
		<title>Mdw's guitars</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=16"/>
				<updated>2020-10-09T17:41:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Æmilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners)&lt;br /&gt;
* Julia (Ibanez RG2570EX in Royal Blue Flat (I think))&lt;br /&gt;
* Antonia (Ibanez RG550 in Black, pre 1994, with maple fingerboard; bridge pickup replaced with Seymour Duncan JB)&lt;br /&gt;
* Claudia (Ibanez RG7620 in Black)&lt;br /&gt;
* Lucretia (ESP LTD EX-307 in Black Satin, with Schaller locking tuners)&lt;br /&gt;
* Cælia (Steinberger Spirit GT-Pro in Black)&lt;br /&gt;
* Maria (Aria AK430CE)&lt;br /&gt;
* Lavinia (Tanglewood TW45DLX)&lt;br /&gt;
* Valeria (Ibanez BTB205(?) in Pewter)&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=15</id>
		<title>Mdw's guitars</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=15"/>
				<updated>2020-10-09T17:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Aemilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners)&lt;br /&gt;
* Julia (Ibanez RG2570EX in Royal Blue Flat (I think))&lt;br /&gt;
* Antonia (Ibanez RG550 in Black, pre 1994, with maple fingerboard; bridge pickup replaced with Seymour Duncan JB)&lt;br /&gt;
* Claudia (Ibanez RG7620 in Black)&lt;br /&gt;
* Lucretia (ESP LTD EX-307 in Black Satin, with Schaller locking tuners)&lt;br /&gt;
* Cælia (Steinberger Spirit GT-Pro in Black)&lt;br /&gt;
* Maria (Aria AK430CE)&lt;br /&gt;
* Lavinia (Tanglewood TW45DLX)&lt;br /&gt;
* Valeria (Ibanez BTB205(?) in Pewter)&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=14</id>
		<title>Mdw's guitars</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=14"/>
				<updated>2020-10-09T17:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Aemilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners)&lt;br /&gt;
* Julia (Ibanez RG2570EX in Royal Blue Flat (I think))&lt;br /&gt;
* Antonia (Ibanez RG550 in Black, pre 1994, with maple fingerboard; bridge pickup replaced with Seymour Duncan JB)&lt;br /&gt;
* Claudia (Ibanez RG7620 in Black)&lt;br /&gt;
* Lucretia (ESP LTD EX-307 in Black Satin, with Schaller locking tuners)&lt;br /&gt;
* Caelia (Steinberger Spirit GT-Pro in Black)&lt;br /&gt;
* Maria (Aria AK430CE)&lt;br /&gt;
* Lavinia (Tanglewood TW45DLX)&lt;br /&gt;
* Valeria (Ibanez BTB205(?) in Pewter)&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=13</id>
		<title>Mdw's guitars</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Mdw%27s_guitars&amp;diff=13"/>
				<updated>2020-10-09T17:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Created page with &amp;quot;* Aemilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners) * Julia (Ibanez RG2570EX in Royal Blue Flat (I think)) * Antonia (Ibanez RG550 in Black, with maple...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Aemilia (Gibson Les Paul Studio in BBQ Burst, with Grover locking tuners)&lt;br /&gt;
* Julia (Ibanez RG2570EX in Royal Blue Flat (I think))&lt;br /&gt;
* Antonia (Ibanez RG550 in Black, with maple fingerboard; bridge pickup replaced with Seymour Duncan JB)&lt;br /&gt;
* Claudia (Ibanez RG7620 in Black)&lt;br /&gt;
* Lucretia (ESP LTD EX-307 in Black Satin, with Schaller locking tuners)&lt;br /&gt;
* Caelia (Steinberger Spirit GT-Pro in Black)&lt;br /&gt;
* Maria (Aria AK430CE)&lt;br /&gt;
* Lavinia (Tanglewood TW45DLX)&lt;br /&gt;
* Valeria (Ibanez BTB205(?) in Pewter)&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=12</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=12"/>
				<updated>2019-05-26T21:39:48Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Fix quote&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war’s a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now you want a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
Just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring your efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
You hear the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers’ footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
You told her when you came you were a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now you'll play your tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Comes just in time to swing the count: &amp;lt;br /&amp;gt;&lt;br /&gt;
The scarlet whore will send a rose &amp;lt;br /&amp;gt;&lt;br /&gt;
To say what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=11</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=11"/>
				<updated>2019-05-26T21:39:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Fix quote&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now you want a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
Just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring your efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
You hear the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers’ footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
You told her when you came you were a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now you'll play your tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Comes just in time to swing the count: &amp;lt;br /&amp;gt;&lt;br /&gt;
The scarlet whore will send a rose &amp;lt;br /&amp;gt;&lt;br /&gt;
To say what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=10</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=10"/>
				<updated>2019-05-17T11:04:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now you want a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
Just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring your efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
You hear the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers' footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
You told her when you came you were a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now you'll play your tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Comes just in time to swing the count: &amp;lt;br /&amp;gt;&lt;br /&gt;
The scarlet whore will send a rose &amp;lt;br /&amp;gt;&lt;br /&gt;
To say what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=9</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=9"/>
				<updated>2019-05-17T10:30:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Switch to second person&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now you want a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
Just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring your efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
You hear the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers' footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
You told her when you came you were a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now you'll play your tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Tells ... ? &amp;lt;br /&amp;gt;&lt;br /&gt;
? &amp;lt;br /&amp;gt;&lt;br /&gt;
Says what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=8</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=8"/>
				<updated>2019-05-15T13:46:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now he wants a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
Just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring his efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
He hears the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers' footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
He told you when he came he was a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now he'll play his tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Tells ... ? &amp;lt;br /&amp;gt;&lt;br /&gt;
? &amp;lt;br /&amp;gt;&lt;br /&gt;
Says what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=7</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=7"/>
				<updated>2019-05-15T13:46:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now he wants a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring his efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
He hears the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers' footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
He told you when he came he was a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now he'll play his tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Tells ... ? &amp;lt;br /&amp;gt;&lt;br /&gt;
? &amp;lt;br /&amp;gt;&lt;br /&gt;
Says what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=6</id>
		<title>Ecuador</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Ecuador&amp;diff=6"/>
				<updated>2019-05-15T13:16:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Created page with &amp;quot;A work-in-progress song, probably for Electric Beauty.  The first parts were apparently written in 2013.  &amp;lt;blockquote&amp;gt; Info war's a kiss away; &amp;lt;br /&amp;gt; Now he wants a place...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A work-in-progress song, probably for [[Electric Beauty]].  The first parts were apparently written in 2013.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Info war's a kiss away; &amp;lt;br /&amp;gt;&lt;br /&gt;
Now he wants a place to stay: &amp;lt;br /&amp;gt;&lt;br /&gt;
Jewels shining twice as bright &amp;lt;br /&amp;gt;&lt;br /&gt;
Need warm bodies in the night.&lt;br /&gt;
&lt;br /&gt;
And just a slip of the tongue, &amp;lt;br /&amp;gt;&lt;br /&gt;
just a slip of the pen &amp;lt;br /&amp;gt;&lt;br /&gt;
is all it takes &amp;lt;br /&amp;gt;&lt;br /&gt;
To bring his efforts to an end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
He hears the helicopters landing  &amp;lt;br /&amp;gt;&lt;br /&gt;
And soldiers' footsteps echo down the hall. &amp;lt;br /&amp;gt;&lt;br /&gt;
He told you when he came he was a liar, &amp;lt;br /&amp;gt;&lt;br /&gt;
And now he'll play his tune in Ecuador.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further fragments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Another sermon from the mount &amp;lt;br /&amp;gt;&lt;br /&gt;
Tells ... ?&lt;br /&gt;
?&lt;br /&gt;
Says what everybody knows.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Constant-time_subrange_copy&amp;diff=5</id>
		<title>Constant-time subrange copy</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Constant-time_subrange_copy&amp;diff=5"/>
				<updated>2016-10-18T00:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Created page with &amp;quot;'''Objective:''' Given the address &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; and length &amp;lt;code&amp;gt;psz&amp;lt;/code&amp;gt; of a source buffer, the address &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; and length &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; of a destination buffe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Objective:''' Given the address &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; and length &amp;lt;code&amp;gt;psz&amp;lt;/code&amp;gt; of a source buffer, the address &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; and length &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; of a destination buffer, and a ''secret'' offset &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;, copy up to &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; bytes starting from &amp;lt;code&amp;gt;p + o&amp;lt;/code&amp;gt; to the destination, without leaking &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
There are two obvious applications for this algorithm.&lt;br /&gt;
&lt;br /&gt;
* RSA PKCS #1 v1.5 decryption.  After applying the RSA private-key operation, the buffer contains &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;02&amp;lt;/code&amp;gt; || ''PS'' || &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt; || ''M'', where ''PS'' is a string of eight or more random nonzero padding bytes.  This scheme is, unfortunately, unaccountably popular despite it being broken in 1999.  There's a standard countermeasure if the payload ''M'' is supposed to be a random key, which involves substituting a fresh random key if the padding is bad; but doing this means that the ''entire process'' needs to run in constant time.&lt;br /&gt;
&lt;br /&gt;
* TLS MAC tag extraction.  A TLS record, prior to or after encryption, consists of a payload, a MAC tag, and between 1 and 256 bytes of padding.  Unfortunately, having the MAC ''inside'' the encryption and padding was a terrible mistake, leaving the whole scheme open to chosen-ciphertext attacks.  Checking the tag first means finding and extracting it, but that has to be done without leaking how much padding there is.&lt;br /&gt;
&lt;br /&gt;
== Algorithm ==&lt;br /&gt;
&lt;br /&gt;
This algorithm is an improvement on the one used in Langley's code in OpenSSL.  It proceeds in two stages.&lt;br /&gt;
&lt;br /&gt;
* Firstly, copy the wanted bytes from the source to the destination. This requires a full pass over the source, but that's unavoidable if we want to equivocate on the secret offset.  The trick here (from OpenSSL) is that we get the right bytes, but not necessarily in the right places: they might end up rotated, by &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; mod &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; bytes.&lt;br /&gt;
&lt;br /&gt;
* Secondly, undo the rotation so that the destination contains the correct data.  OpenSSL does the obvious &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt;&amp;amp;sup2; loop; but there's a better way: if we equivocate on each bit of the offset separately, we can undo the rotation in &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; log &amp;lt;code&amp;gt;qsz&amp;lt;/code&amp;gt; copies.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
WIP...&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=4</id>
		<title>Constant-time algorithms</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=4"/>
				<updated>2016-10-17T23:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Writing crypto code was never easy.  Unfortunately, nowadays you don't just have to implement the algorithms so that they give the right answers, and make sure that the random numbers are actually random: you also have to make sure that all of your secrets don't leak out the side of your program through instruction timing, an exciting menagerie of cache effects, branch-predictor state, execution unit utilization, or other side channels.&lt;br /&gt;
&lt;br /&gt;
The best approach we have at the moment for avoiding this kind of leakage is 'constant-time programming'.  This discipline involves ensuring that no secrets are ever used to control conditional execution (for example, branches, but also other kinds of predicated instructions are suspect and should be avoided) or used to calculate memory addresses.&lt;br /&gt;
&lt;br /&gt;
There doesn't seem to be a proper place anywhere else to collect constant-time programming lore; so these pages are, for the moment, it. This is ''not'' intended to be a gentle introduction: see, for example, Peter Schwabe's excellent talk at ShmooCon 2015 ([https://cryptojedi.org/peter/data/shmoocon-20150118.pdf slides], [https://www.youtube.com/watch?v=Q9e6fANUQDY video]) for that.&lt;br /&gt;
&lt;br /&gt;
== Masking fundamentals ==&lt;br /&gt;
&lt;br /&gt;
Making do without conditional execution just isn't going to cut it.  In place of conditional assignments, we often use ''mask variables'', which we can arrange to be either zero or all-bits-set -- i.e., two's complement −1.  Then we can replace&lt;br /&gt;
&lt;br /&gt;
 if (cond) z = x;&lt;br /&gt;
 else z = y;&lt;br /&gt;
&lt;br /&gt;
by&lt;br /&gt;
&lt;br /&gt;
 /* set m_cond somehow */&lt;br /&gt;
 z = (x&amp;amp;m_cond) | (y&amp;amp;~mcond);&lt;br /&gt;
&lt;br /&gt;
The remaining trick is to set up the mask.  The best way I know to do this is to start by arranging for the ''top'' bit in some variable to be set or clear according to the desired condition and then performing an arithmetic right shift; the other bits don't matter and can be anything. An arithmetic shift is often free in ARM code, and cheap in x86; unfortunately, C doesn't admit the existence of such a thing.&lt;br /&gt;
&lt;br /&gt;
I'm assuming throughout that we're working with unsigned integers of some ''known'' bit width, say &amp;lt;code&amp;gt;NBITS&amp;lt;/code&amp;gt;.  Then&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned signprop(unsigned x)&lt;br /&gt;
   { x &amp;gt;&amp;gt;= NBITS - 1; x ^= 1; x--; return (x); }&lt;br /&gt;
&lt;br /&gt;
calculates the desired result, and will be recognized as an arithmetic right shift by both GCC and Clang.  It isn't recognized by '''armcc''', and I don't know how to write a ''portable'' arithmetic right shift which '''armcc''' will compile efficiently.&lt;br /&gt;
&lt;br /&gt;
== Boolean canonification ==&lt;br /&gt;
&lt;br /&gt;
Suppose that you have a variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; you know to be zero or nonzero according to some desired condition, and you want to turn it into a mask.  If we can get the nonzeroness to the topmost bit then we can use &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; above and we're done.&lt;br /&gt;
&lt;br /&gt;
The following is the best I've come up but it's not very nice.&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned nonzerop(unsigned x)&lt;br /&gt;
   { x |= x &amp;lt;&amp;lt; 1; x &amp;gt;&amp;gt;= 1; x--; return (~signprop(x)); }&lt;br /&gt;
&lt;br /&gt;
Here's how it works.&lt;br /&gt;
&lt;br /&gt;
* The OR arranges for &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; to be not equal to 1.  If &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero to begin with, it stays zero; otherwise it has some bit set ''other'' than the bottom bit.&lt;br /&gt;
&lt;br /&gt;
* The shift makes sure that the ''top'' bit is clear while preserving &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s zero-ness.  If the original &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero, then it's still zero; otherwise it's some nonzero value -- but it's top bit is definitely clear.&lt;br /&gt;
&lt;br /&gt;
* The decrement sets &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s top bit if and only if it was zero to begin with.&lt;br /&gt;
&lt;br /&gt;
* Now &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; is ready to be passed to &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; to turn it into a mask; only the sense is wrong, so we must invert it.&lt;br /&gt;
&lt;br /&gt;
This compiles down to four (sequential) instructions, which isn't brilliantly efficient, but I don't know of a better way.  Fortunately, many useful cases don't need full-on boolean canonification.&lt;br /&gt;
&lt;br /&gt;
== Other important algorithms ==&lt;br /&gt;
&lt;br /&gt;
* [[Constant-time table lookup]]&lt;br /&gt;
* [[Constant-time subrange copy]]&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=3</id>
		<title>Constant-time algorithms</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=3"/>
				<updated>2016-10-17T23:01:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Writing crypto code was never easy.  Unfortunately, nowadays you don't just have to implement the algorithms so that they give the right answers, and make sure that the random numbers are actually random: you also have to make sure that all of your secrets don't leak out the side of your program through instruction timing, an exciting menagerie of cache effects, branch-predictor state, execution unit utilization, or other side channels.&lt;br /&gt;
&lt;br /&gt;
The best approach we have at the moment for avoiding this kind of leakage is 'constant-time programming'.  This discipline involves ensuring that no secrets are ever used to control conditional execution (for example, branches, but also other kinds of predicated instructions are suspect and should be avoided) or used to calculate memory addresses.&lt;br /&gt;
&lt;br /&gt;
There doesn't seem to be a proper place anywhere else to collect constant-time programming lore; so these pages are, for the moment, it. This is ''not'' intended to be a gentle introduction: see, for example, Peter Schwabe's excellent talk at ShmooCon 2015 ([https://cryptojedi.org/peter/data/shmoocon-20150118.pdf slides], [https://www.youtube.com/watch?v=Q9e6fANUQDY video]) for that.&lt;br /&gt;
&lt;br /&gt;
== Masking fundamentals ==&lt;br /&gt;
&lt;br /&gt;
Making do without conditional execution just isn't going to cut it.  In place of conditional assignments, we often use ''mask variables'', which we can arrange to be either zero or all-bits-set -- i.e., two's complement −1.  Then we can replace&lt;br /&gt;
&lt;br /&gt;
 if (cond) z = x;&lt;br /&gt;
 else z = y;&lt;br /&gt;
&lt;br /&gt;
by&lt;br /&gt;
&lt;br /&gt;
 /* set m_cond somehow */&lt;br /&gt;
 z = (x&amp;amp;m_cond) | (y&amp;amp;~mcond);&lt;br /&gt;
&lt;br /&gt;
The remaining trick is to set up the mask.  The best way I know to do this is to start by arranging for the ''top'' bit in some variable to be set or clear according to the desired condition and then performing an arithmetic right shift; the other bits don't matter and can be anything. An arithmetic shift is often free in ARM code, and cheap in x86; unfortunately, C doesn't admit the existence of such a thing.&lt;br /&gt;
&lt;br /&gt;
I'm assuming throughout that we're working with unsigned integers of some ''known'' bit width, say &amp;lt;code&amp;gt;NBITS&amp;lt;/code&amp;gt;.  Then&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned signprop(unsigned x)&lt;br /&gt;
   { x &amp;gt;&amp;gt;= NBITS - 1; x ^= 1; x--; return (x); }&lt;br /&gt;
&lt;br /&gt;
calculates the desired result, and will be recognized as an arithmetic right shift by both GCC and Clang.  It isn't recognized by '''armcc''', and I don't know how to write a ''portable'' arithmetic right shift which '''armcc''' will compile efficiently.&lt;br /&gt;
&lt;br /&gt;
== Boolean canonification ==&lt;br /&gt;
&lt;br /&gt;
Suppose that you have a variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; you know to be zero or nonzero according to some desired condition, and you want to turn it into a mask.  If we can get the nonzeroness to the topmost bit then we can use &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; above and we're done.&lt;br /&gt;
&lt;br /&gt;
The following is the best I've come up but it's not very nice.&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned nonzerop(unsigned x)&lt;br /&gt;
   { x |= x &amp;lt;&amp;lt; 1; x &amp;gt;&amp;gt;= 1; x--; return (~signprop(x)); }&lt;br /&gt;
&lt;br /&gt;
Here's how it works.&lt;br /&gt;
&lt;br /&gt;
* The OR arranges for &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; to be not equal to 1.  If &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero to begin with, it stays zero; otherwise it has some bit set ''other'' than the bottom bit.&lt;br /&gt;
&lt;br /&gt;
* The shift makes sure that the ''top'' bit is clear while preserving &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s zero-ness.  If the original &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero, then it's still zero; otherwise it's some nonzero value -- but it's top bit is definitely clear.&lt;br /&gt;
&lt;br /&gt;
* The decrement sets &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s top bit if and only if it was zero to begin with.&lt;br /&gt;
&lt;br /&gt;
* Now &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; is ready to be passed to &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; to turn it into a mask; only the sense is wrong, so we must invert it.&lt;br /&gt;
&lt;br /&gt;
This compiles down to four (sequential) instructions, which isn't brilliantly efficient, but I don't know of a better way.  Fortunately, many useful cases don't need full-on boolean canonification.&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	<entry>
		<id>https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=2</id>
		<title>Constant-time algorithms</title>
		<link rel="alternate" type="text/html" href="https://wiki.distorted.org.uk/w/index.php?title=Constant-time_algorithms&amp;diff=2"/>
				<updated>2016-10-17T22:57:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mdw: Created page with &amp;quot;Writing crypto code was never easy.  Unfortunately, nowadays you don't just have to implement the algorithms so that they give the right answers, and make sure that the random...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Writing crypto code was never easy.  Unfortunately, nowadays you don't just have to implement the algorithms so that they give the right answers, and make sure that the random numbers are actually random: you also have to make sure that all of your secrets don't leak out the side of your program through instruction timing, an exciting menagerie of cache effects, branch-predictor state, execution unit utilization, or other side channels.&lt;br /&gt;
&lt;br /&gt;
The best approach we have at the moment for avoiding this kind of leakage is 'constant-time programming'.  This discipline involves ensuring that no secrets are ever used to control conditional execution (for example, branches, but also other kinds of predicated instructions are suspect and should be avoided) or used to calculate memory addresses.&lt;br /&gt;
&lt;br /&gt;
There doesn't seem to be a proper place anywhere else to collect constant-time programming lore; so these pages are, for the moment, it. This is ''not'' intended to be a gentle introduction: see, for example, [https://www.youtube.com/watch?v=Q9e6fANUQDY Peter Schwabe's excellent talk at SchmooCon 2015] for that.&lt;br /&gt;
&lt;br /&gt;
== Masking fundamentals ==&lt;br /&gt;
&lt;br /&gt;
Making do without conditional execution just isn't going to cut it.  In place of conditional assignments, we often use ''mask variables'', which we can arrange to be either zero or all-bits-set -- i.e., two's complement −1.  Then we can replace&lt;br /&gt;
&lt;br /&gt;
 if (cond) z = x;&lt;br /&gt;
 else z = y;&lt;br /&gt;
&lt;br /&gt;
by&lt;br /&gt;
&lt;br /&gt;
 /* set m_cond somehow */&lt;br /&gt;
 z = (x&amp;amp;m_cond) | (y&amp;amp;~mcond);&lt;br /&gt;
&lt;br /&gt;
The remaining trick is to set up the mask.  The best way I know to do this is to start by arranging for the ''top'' bit in some variable to be set or clear according to the desired condition and then performing an arithmetic right shift; the other bits don't matter and can be anything. An arithmetic shift is often free in ARM code, and cheap in x86; unfortunately, C doesn't admit the existence of such a thing.&lt;br /&gt;
&lt;br /&gt;
I'm assuming throughout that we're working with unsigned integers of some ''known'' bit width, say &amp;lt;code&amp;gt;NBITS&amp;lt;/code&amp;gt;.  Then&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned signprop(unsigned x)&lt;br /&gt;
   { x &amp;gt;&amp;gt;= NBITS - 1; x ^= 1; x--; return (x); }&lt;br /&gt;
&lt;br /&gt;
calculates the desired result, and will be recognized as an arithmetic right shift by both GCC and Clang.  It isn't recognized by '''armcc''', and I don't know how to write a ''portable'' arithmetic right shift which '''armcc''' will compile efficiently.&lt;br /&gt;
&lt;br /&gt;
== Boolean canonification ==&lt;br /&gt;
&lt;br /&gt;
Suppose that you have a variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; you know to be zero or nonzero according to some desired condition, and you want to turn it into a mask.  If we can get the nonzeroness to the topmost bit then we can use &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; above and we're done.&lt;br /&gt;
&lt;br /&gt;
The following is the best I've come up but it's not very nice.&lt;br /&gt;
&lt;br /&gt;
 static inline unsigned nonzerop(unsigned x)&lt;br /&gt;
   { x |= x &amp;lt;&amp;lt; 1; x &amp;gt;&amp;gt;= 1; x--; return (~signprop(x)); }&lt;br /&gt;
&lt;br /&gt;
Here's how it works.&lt;br /&gt;
&lt;br /&gt;
* The OR arranges for &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; to be not equal to 1.  If &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero to begin with, it stays zero; otherwise it has some bit set ''other'' than the bottom bit.&lt;br /&gt;
&lt;br /&gt;
* The shift makes sure that the ''top'' bit is clear while preserving &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s zero-ness.  If the original &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; was zero, then it's still zero; otherwise it's some nonzero value -- but it's top bit is definitely clear.&lt;br /&gt;
&lt;br /&gt;
* The decrement sets &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;'s top bit if and only if it was zero to begin with.&lt;br /&gt;
&lt;br /&gt;
* Now &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; is ready to be passed to &amp;lt;code&amp;gt;signprop&amp;lt;/code&amp;gt; to turn it into a mask; only the sense is wrong, so we must invert it.&lt;br /&gt;
&lt;br /&gt;
This compiles down to four (sequential) instructions, which isn't brilliantly efficient, but I don't know of a better way.  Fortunately, many useful cases don't need full-on boolean canonification.&lt;/div&gt;</summary>
		<author><name>Mdw</name></author>	</entry>

	</feed>