diff --git a/spec.bs b/spec.bs index 667c66282..c133b130c 100644 --- a/spec.bs +++ b/spec.bs @@ -4558,14 +4558,16 @@ dictionary StorageInterestGroup : AuctionAdInterestGroup { *This first introductory paragraph is non-normative.* -{{Window/navigator}}.{{Navigator/createAuctionNonce()}} creates an auction nonce, a -one-time [=version 4 UUID=] uniquely associated with a single call to -{{Window/navigator}}.{{Navigator/runAdAuction()}}. For multi-seller auctions, this ID is uniquely -associated with all {{AuctionAdConfig/componentAuctions}}. This nonce will need to be passed back in -via a subsequent call to {{Window/navigator}}.{{Navigator/runAdAuction()}} via the -{{AuctionAdConfig}}. This is currently only needed for [=auctions=] that use [=additional bids=], -for which the [=auction nonce=] will be included in each [=additional bid=] as a way of ensuring -that those bids are only used in the [=auctions=] for which they were intended. +{{Window/navigator}}.{{Navigator/createAuctionNonce()}} creates an auction nonce, which +is a one-time canonical [=string=] representation of a [=version 4 UUID=] that is uniquely +associated with a single call to {{Window/navigator}}.{{Navigator/runAdAuction()}}. For multi-seller +auctions, a distinct auction nonce can be uniquely associated with each of the +{{AuctionAdConfig/componentAuctions}}. The auction nonce(s) will need to be passed back in via a +subsequent call to {{Window/navigator}}.{{Navigator/runAdAuction()}} via the {{AuctionAdConfig}}. +This is currently only needed for [=auctions=] that use [=additional bids=], in which the auction +nonce is combined with a [=signed additional bid with metadata/seller nonce=] to construct a bid +nonce that must be included in each [=additional bid=]. For backwards compatibility, [=additional +bids=] may include an auction nonce directly in place of a bid nonce.
Ad-Auction-Additional-Bid
\` response header provides value
-of a string in the format of `Ad-Auction-Result
\`
@@ -7050,11 +7077,24 @@ The following algorithm will be added to the [[FETCH#fetching]] section:
that is, scripts making the {{WindowOrWorkerGlobalScope/fetch()}} request aren't able to load
the header value.
1. [=list/For each=] |bid| of |additionalBids|:
- 1. Let |nonceAndAdditionalBid| be the result of [=strictly splitting=] |bid| on U+003A (:).
- 1. If |nonceAndAdditionalBid|'s [=list/size=] is not 2, then [=iteration/continue=].
- 1. Let |nonce| be |nonceAndAdditionalBid|[0].
- 1. If |nonce|'s [=string/length=] is not 36, then [=iteration/continue=].
- 1. Set |storedAdditionalBidsHeaders|[|nonce|] to |nonceAndAdditionalBid|[1].
+ 1. Let |parts| be the result of [=strictly splitting=] |bid| on U+003A (:).
+ 1. Let |bidWithMetadata| be a new [=signed additional bid with metadata=].
+ 1. If |parts|'s [=list/size=] is 3:
+ 1. Let |auctionNonce| be |parts|[0].
+ 1. If |auctionNonce|'s [=string/length=] is not 36, then [=iteration/continue=].
+ 1. Let |sellerNonce| be |parts|[1].
+ 1. If |sellerNonce|'s [=string/length=] is not 36, then [=iteration/continue=].
+ 1. Let |bidWithMetadata|'s [=signed additional bid with metadata/seller nonce=] be
+ |sellerNonce|.
+ 1. Let |bidWithMetadata|'s [=signed additional bid with metadata/signed additional bid=] be
+ |parts|[2].
+ 1. [=list/Append=] |bidWithMetadata| to |storedAdditionalBidsHeaders|[|auctionNonce|].
+ 1. Otherwise, if |parts|'s [=list/size=] is 2:
+ 1. Let |auctionNonce| be |parts|[0].
+ 1. If |auctionNonce|'s [=string/length=] is not 36, then [=iteration/continue=].
+ 1. Let |bidWithMetadata|'s [=signed additional bid with metadata/signed additional bid=] be
+ |parts|[1].
+ 1. [=list/Append=] |bidWithMetadata| to |storedAdditionalBidsHeaders|[|auctionNonce|].
1. Let |adAuctionResults| be the result of [=header list/getting, decoding, and splitting=]
[:Ad-Auction-Result:] from |responseHeaders|.
@@ -7731,8 +7771,10 @@ An auction config is a [=struct=] with the following [=struct/
uniquely associated with all {{AuctionAdConfig/componentAuctions}}.
This must come from a prior call to {{Window/navigator}}.{{Navigator/createAuctionNonce()}}.
This is only required for auctions that provide [=additional bids=], and each of those
- [=additional bids=] must use the same auction nonce to ensure that each of them was intended for
- this and only this auction.
+ [=additional bids=] must include the bid nonce derived from that auction nonce as computed by
+ [=calculate expected bid nonce=] to ensure that each [=additional bid=] was intended for this
+ and only this auction. For backwards compatibility, an [=additional bid=] may include the
+ [=auction nonce=] directly in place of a bid nonce.
: expects additional bids
:: A [=boolean=] or failure, initially false.
Specifies whether some bids will be provided as signed exchanges. Sets to failure if the
@@ -8640,6 +8682,20 @@ A direct from seller signals is a [=struct=] with the following [=str
JSON data passed to corresponding buyer's [=script runner=].
+