<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[NodeBB and RFC 9421]]></title><description><![CDATA[<p dir="auto">I've been working (admittedly, with AI assistance) on HTTP signatures RFC 9421 support.</p>
<p dir="auto">The work will be done in stages. The first step is ensuring NodeBB can handle receipt of activities signed under the new standard (with adequate fallback to draft <code>cavage-12</code>).</p>
<p dir="auto">Afterwards NodeBB will begin sending out activities signed with both methods.</p>
<p dir="auto">Question re: double knock for AP devs who have implemented... is there a specific reason 9421-signed is sent first, and then cavage-12? My understanding is the headers are separate — <code>Signature-Input</code> vs <code>Signature</code>, though there are two of the latter.</p>
<p dir="auto">It seems possible to send both signatures at once.</p>
]]></description><link>https://fedi.wiki/topic/fd3fd5fb-5190-46ac-8fb5-798f8c7f2256/nodebb-and-rfc-9421</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 07:12:33 GMT</lastBuildDate><atom:link href="https://fedi.wiki/topic/fd3fd5fb-5190-46ac-8fb5-798f8c7f2256.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Jul 2026 14:15:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to NodeBB and RFC 9421 on Tue, 21 Jul 2026 21:31:54 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/skavish%40welley.social" rel="nofollow ugc">@skavish@welley.social</a> <a href="https://activitypub.space/post/https%3A%2F%2Fwelley.social%2Fposts%2Fpt_01ky2md2a7exvbek6857kkypew" rel="nofollow ugc">said</a>:<br />
&gt;<br />
&gt; same header name, two languages that don't mix.</p>
<p dir="auto">Yes, I was worried about this. I was hoping maybe cavage parsers were smart enough to only parse header values that match expected inputs, so sending two <code>Signature</code> headers would work, but knowing what I know, that's wishful thinking &lt;img class="not-responsive emoji" src="<a href="https://activitypub.space/assets/plugins/nodebb-plugin-emoji/emoji/android/1f605.png?v=22426bb3280" rel="nofollow ugc">https://activitypub.space/assets/plugins/nodebb-plugin-emoji/emoji/android/1f605.png?v=22426bb3280</a>" title="<img src="https://fedi.wiki/assets/plugins/nodebb-plugin-emoji/emoji/android/1f605.png?v=9b79ade230e" class="not-responsive emoji emoji-android emoji--sweat_smile" style="height:23px;width:auto;vertical-align:middle" title=":sweat_smile:" alt="😅" />" /&gt;</p>
<p dir="auto">Thanks for the detailed reply! Looking forward to testing in the next few days.</p>
]]></description><link>https://fedi.wiki/post/https://activitypub.space/post/2098</link><guid isPermaLink="true">https://fedi.wiki/post/https://activitypub.space/post/2098</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Tue, 21 Jul 2026 21:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to NodeBB and RFC 9421 on Tue, 21 Jul 2026 15:23:40 GMT]]></title><description><![CDATA[<p>we hit this exact thing in Welley.</p>
<p> </p>
<p>you can't send both at once, and it's not because of <code>Signature-Input</code>. that header's fine, it's unique to 9421. the problem is the <code>Signature</code> header itself, both schemes want it, with totally different, incompatible contents. cavage fills it with <code>keyId="...",headers="...",signature="..."</code>, and 9421 fills it with <code>sig1=....</code></p>
<p> </p>
<p>same header name, two languages that don't mix.</p>
<p> </p>
<p>and if you try to send two <code>Signature</code> headers, HTTP is allowed to just squash repeated headers into one comma-joined value. so the receiver might see both jammed together, which is garbage to a cavage parser.</p>
<p> </p>
<p>as for why 9421 goes first: no protocol rule says it has to, it's just a "prefer the new thing" move. lead with 9421, fall back to cavage only when needed, and as the network upgrades more first-knocks succeed until you can eventually drop cavage entirely.</p>
<p> </p>
<p>one tip for when you get to sending: cache per-domain which scheme worked, otherwise you're doubling every delivery to un-upgraded peers forever. and only retry-with-the-other-scheme on an actual signature failure, don't re-knock on a 401 that just means you're blocked, or a 410 gone.</p>
<p> </p>
<p>for what it's worth, your staging is spot on: receive-both first, dual-send later. that's exactly where Mastodon and we are too, everyone accepts both but still sends one</p>]]></description><link>https://fedi.wiki/post/https://welley.social/posts/pt_01ky2md2a7exvbek6857kkypew</link><guid isPermaLink="true">https://fedi.wiki/post/https://welley.social/posts/pt_01ky2md2a7exvbek6857kkypew</guid><dc:creator><![CDATA[skavish@welley.social]]></dc:creator><pubDate>Tue, 21 Jul 2026 15:23:40 GMT</pubDate></item></channel></rss>