External-size accounting for the published performance tables
The timing records measure computation, not a network serialization format.
The tables therefore take KEM public-key/ciphertext and signature public-key/
signature sizes from the separate external_sizes.csv
catalog (394 measured KEM/signature instances), and KEX message/public-key
sizes from kex_bandwidth.csv (57 measured instances).
These catalogs were reconciled with the frozen submissions' size tables,
serialization descriptions and the per-candidate pseudocode.md comparisons;
the benchmark API size fields are comparison checks, not the source of the
published external-size values.
encoded means the size of the submitted external encoding. For signatures
whose size varies, maximum-variable means the submitted encoding's maximum, while
nominal-variable means a representative size stated in the frozen
specification, not a guarantee for each signature. We use that basis only
where the specification supplies a concrete nominal length and the submitted
serializer returns variable lengths (Rhyme and Sigurd). Otherwise the
submitted encoding's maximum is the conservative available figure (Aigis,
Phoenix and Tins). These different bases are visible on the candidate pages;
the ordered pages mark nominal values with ≈. Secret-key and shared-secret
sizes are not ordering metrics.
Specification versus submitted external encoding
The catalog uses the submitted encoding when a size table describes a different format. The per-candidate analyses provide the source details:
| candidate | externally relevant difference |
|---|---|
| BAG-Loong | The four ciphertext encodings append 16 bytes beyond the specification's listed ciphertext sizes. |
| BAG-Piglet | Each submitted ciphertext is 16 bytes longer than the specification's table. |
| CTL | The CTL-3329-2048 ciphertext is 2,353 rather than the table's 2,305 bytes. |
| Lore | Submitted public keys and ciphertexts are larger than the four listed specification sizes. The catalog uses the submitted sizes: these are zero-padded worst-case buffers, but decapsulation requires the full fixed-length ciphertext on the wire. |
| QIMEN-PIKE | The three submitted public keys are 16/3/3 bytes shorter than the specification's table. |
| QCTM | §3.2's stated public-key sizes disagree with the §3.3 formula and §8.2 serialization; the formula itself is consistent with the submitted encoding, which the catalog uses. |
| Phoenix | The 192s submitted signature is 13,332 bytes versus 13,356 in the specification's table. |
| Rhyme | The signature API advertises padded caps of 5,156/10,308/14,436/20,612 bytes. Actual signatures are variable and near the specification's nominal 1,483/3,258/4,743/7,002 bytes; those nominal values are used and marked approximate. |
| Sigurd | The API reports worst-case signature buffers of 62,868/137,412/494,532 bytes, but signatures are variable-length. The catalog uses the specification's ≈25,108/74,756/282,692-byte representative sizes, marked approximate. |
| TRINE | Submitted signatures add a salt of 32/64/128 bytes relative to the listed values. The 512-ShortSig public key is also two bytes larger. |
| TSUOV | The submitted 128-bit public key is one byte larger than the specification's table. |
| UVW-Sign | The public-key and signature figures in Table 1 are information-entropy lower bounds, not the submitted encoding. The catalog uses the actual encoded sizes. |
Three other cases matter when reading the table, without changing its external size: Aigis-Sig+, Phoenix and Tins have variable-length signatures represented by their submitted encoding's maxima. The ATLAS signer reports an incorrect output length after writing the specified signature bytes; the catalog counts the encoded signature, not that erroneous returned length. VDOO prints rounded public-key sizes in its specification; the catalog uses exact encoded byte counts.
Key exchange
Protocol-message bytes omit separately delivered public keys. Bandwidth counts both the messages and the required public keys once each. Public keys are transmitted bytes in this KEX model. KEM encapsulation instead assumes the recipient's public key is available and lists its size separately. Certificates, identities supplied out of band and transport framing are excluded. ADKEX and MAMBA-NIKE use only the responder's long-term public key; CreTAKE's KEM/signature combinations use different key lengths on the two sides. These responder-only cases do not authenticate the initiator and are not directly comparable to mutually authenticated exchanges. NIIKE has no separate protocol message, but requires both public keys. Its specification lists 4,030/8,943-byte public keys, whereas the submitted encoding uses 4,160/8,960 bytes; the catalog counts the latter.
AFS-KEX has two accounting differences. Figure 3 sends fresh composite public keys in the first two passes; its protocol-message totals are 3,136/6,080/12,288 bytes. The submitted API instead pre-distributes each composite key alongside its long-term base key and sends only 1,568/2,944/6,016 bytes as protocol messages. Counting the base public keys once, bandwidth is identical under either arrangement: 4,704/9,216/18,560 bytes. The catalog shows the specification's protocol-message totals. Separately, the submitted pass-4 function emits no message but leaves its output-length parameter unchanged. The benchmark initialized that parameter to its buffer capacity, producing phantom traffic; the submitted KAT initializes it to zero. The original raw timing and metadata files remain unchanged.