<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://50.77.162.165/mediawiki/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Brand spoofing - Revision history</title>
		<link>http://50.77.162.165/mediawiki/index.php?title=Brand_spoofing&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Mon, 20 Apr 2026 19:48:02 GMT</lastBuildDate>
		<item>
			<title>Kevin Reid:&amp;#32;bit of wikilinking</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Brand_spoofing&amp;diff=1944&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Brand_spoofing&amp;diff=1944&amp;oldid=prev</guid>
			<description>&lt;p&gt;bit of wikilinking&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Date: 2009-08-15&lt;br /&gt;
&lt;br /&gt;
All timestamps are in EDT, UTC-4.&lt;br /&gt;
 &lt;br /&gt;
* [17:43] kpreid: Speaking of which, [[makeBrandPair|s/u]] brands have a problem.&lt;br /&gt;
* [17:43] MarkM_: ?&lt;br /&gt;
* [17:44] MarkM_: I'm redoing them in terms of newTable(true) btw.&lt;br /&gt;
* [17:44] kpreid: Consider in E this: def object implements Auditor1, Auditor2 {&lt;br /&gt;
* [17:44] kpreid:   to [[Miranda optSealedDispatch|__optSealedDispatch]](brand) { ... }&lt;br /&gt;
* [17:44] kpreid: }&lt;br /&gt;
* [17:44] kpreid: Suppose that both of those auditors want the object to have a particular optSealedDispatch behavior.&lt;br /&gt;
* [17:44] MarkM_: ok&lt;br /&gt;
* [17:45] kpreid: So, naturally, each one provides a sealer (which has an accompanying brand).&lt;br /&gt;
* [17:45] MarkM_: ok&lt;br /&gt;
* [17:45] kpreid: to __optSealedDispatch(brand) { return switch (brand) {&lt;br /&gt;
* [17:45] kpreid:   match ==(sealer1.getBrand()) { sealer1.seal(...) }&lt;br /&gt;
* [17:45] kpreid:   match ==(sealer2.getBrand()) { sealer2.seal(...) }&lt;br /&gt;
* [17:45] kpreid: }}&lt;br /&gt;
* [17:46] MarkM_: ok&lt;br /&gt;
* [17:46] MarkM_: hmmm&lt;br /&gt;
* [17:46] MarkM_: right. How does auditor2 know that sealer1.getBrand() isn't its brand?&lt;br /&gt;
* [17:46] kpreid: Right.&lt;br /&gt;
* [17:47] kpreid: More generally, even without the auditors:&lt;br /&gt;
* [17:47] kpreid: how does the object know that sealer1 isn't misbehaving to prevent its proper interaction with the clients using #2?&lt;br /&gt;
* [17:48] kpreid: Now, in [[E-on-Java]] in the local case, this is actually not a problem...&lt;br /&gt;
* [17:48] kpreid: because the Java type system doesn't let you use anything but the builtin Brands, which only come from builtin [[Sealer]]s which do not spoof their brands :)&lt;br /&gt;
* [17:48] kpreid: (That only holds if you guard sealer1 :[[Sealer]] though)&lt;br /&gt;
* [17:49] kpreid: Anyway, I have no idea what to do about this.&lt;br /&gt;
* [17:49] MarkM_: and if you already know sealer1 != sealer2&lt;br /&gt;
* [17:49] kpreid: Ah.&lt;br /&gt;
* [17:50] kpreid: Dunno if that's an actual hazard case.&lt;br /&gt;
* [17:51] kpreid: Oh, yeah, it is: malicious protocol#1 subsystem (which has sealer2 to participate in sealer2's protocol itself) hands out sealer2 as its sealer1&lt;br /&gt;
* [17:51] kpreid: Thought: The root problem here is this:&lt;br /&gt;
* [17:52] kpreid: The sealed-dispatch-using module is *telling* the constructor of our object &amp;quot;Please respond to this sealed-dispatch request in this way.&amp;quot;&lt;br /&gt;
* [17:54] lisppaste2: MarkM_ pasted &amp;quot;safely auditable __optSealedDispatch pattern&amp;quot; at http://paste.lisp.org/display/85456&lt;br /&gt;
 to __optSealedDispatch(brand) { &lt;br /&gt;
     return [&lt;br /&gt;
         sealer1.getBrand() =&amp;gt; fn{sealer1.seal(...)},&lt;br /&gt;
         sealer1.getBrand() =&amp;gt; fn{sealer1.seal(...)}&lt;br /&gt;
     ]()&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 If they conflict, map will refuse to build and we'll be safely fail-stop.&lt;br /&gt;
* [17:54] kpreid: OK, a local way to fix this is for the object to act like the unsealers-and-box-share-a-variable sealer/unsealer implementation. optSealedDispatch means &amp;quot;Put your stuff in all the boxes you know about&amp;quot;&lt;br /&gt;
* [17:54] kpreid: But that's quite hazardous wrt composition.&lt;br /&gt;
* [17:55] kpreid: Hm, that works.&lt;br /&gt;
* [17:55] MarkM_: cool&lt;br /&gt;
* [17:55] kpreid: Well, for fail-stop.&lt;br /&gt;
* [17:56] MarkM_: I'm happy with fail-stop&lt;br /&gt;
* [17:56] MarkM_: sealer1.getBrand() could always infinite loop anyway.&lt;br /&gt;
...&lt;br /&gt;
* [18:09] kpreid: Oh. I missed those ending parens in your sealed dispatch example. Did you mean ...][brand] ?&lt;br /&gt;
* [18:10] kpreid: MarkM_:&lt;br /&gt;
* [18:11] MarkM_: yes&lt;br /&gt;
* [18:11] MarkM_: ..][brand]()&lt;br /&gt;
* [18:11] kpreid: Er, right.&lt;br /&gt;
* [18:12] kpreid: Can do the same check before construction, of course.&lt;br /&gt;
* [18:12] kpreid: (though telling auditors you've done that would be tricky.)&lt;br /&gt;
* [18:12] MarkM_: I wouldn't bother.&lt;br /&gt;
&lt;br /&gt;
[[Category:Resolved design issues]]&lt;/div&gt;</description>
			<pubDate>Sun, 16 Aug 2009 01:03:16 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Brand_spoofing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;record design discussion</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Brand_spoofing&amp;diff=4204&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Brand_spoofing&amp;diff=4204&amp;oldid=prev</guid>
			<description>&lt;p&gt;record design discussion&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:13, 15 August 2009&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All timestamps are in EDT, UTC-4.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All timestamps are in EDT, UTC-4.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:43] kpreid: Speaking of which, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[makeBrandPair|&lt;/del&gt;s/u&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/del&gt;brands have a problem.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:43] kpreid: Speaking of which, s/u brands have a problem.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:43] MarkM_: ?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:43] MarkM_: ?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] MarkM_: I'm redoing them in terms of newTable(true) btw.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] MarkM_: I'm redoing them in terms of newTable(true) btw.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: Consider in E this: def object implements Auditor1, Auditor2 {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: Consider in E this: def object implements Auditor1, Auditor2 {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid:&amp;nbsp;  to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[Miranda optSealedDispatch|&lt;/del&gt;__optSealedDispatch&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/del&gt;(brand) { ... }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid:&amp;nbsp;  to __optSealedDispatch(brand) { ... }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: Suppose that both of those auditors want the object to have a particular optSealedDispatch behavior.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:44] kpreid: Suppose that both of those auditors want the object to have a particular optSealedDispatch behavior.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:47] kpreid: More generally, even without the auditors:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:47] kpreid: More generally, even without the auditors:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:47] kpreid: how does the object know that sealer1 isn't misbehaving to prevent its proper interaction with the clients using #2?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:47] kpreid: how does the object know that sealer1 isn't misbehaving to prevent its proper interaction with the clients using #2?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: Now, in &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/del&gt;E-on-Java&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/del&gt;in the local case, this is actually not a problem...&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: Now, in E-on-Java in the local case, this is actually not a problem...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: because the Java type system doesn't let you use anything but the builtin Brands, which only come from builtin &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[Sealer]]s &lt;/del&gt;which do not spoof their brands :)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: because the Java type system doesn't let you use anything but the builtin Brands, which only come from builtin &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Sealers &lt;/ins&gt;which do not spoof their brands :)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: (That only holds if you guard sealer1 :&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/del&gt;Sealer&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/del&gt;though)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:48] kpreid: (That only holds if you guard sealer1 :Sealer though)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:49] kpreid: Anyway, I have no idea what to do about this.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:49] kpreid: Anyway, I have no idea what to do about this.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:49] MarkM_: and if you already know sealer1 != sealer2&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [17:49] MarkM_: and if you already know sealer1 != sealer2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-20 19:48:03 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 15 Aug 2009 22:13:18 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Brand_spoofing</comments>		</item>
	</channel>
</rss>