RFC Errata
RFC 9171, "Bundle Protocol Version 7", January 2022
Source of RFC: dtn (int)
Errata ID: 8043
Status: Reported
Type: Technical
Publication Format(s) : TEXT, PDF, HTML
Reported By: John Huff
Date Reported: 2024-07-22
Section 4.3.1 says:
CRC: A CRC SHALL be present in the primary block unless the bundle includes a BPSec Block Integrity Block [BPSEC] whose target is the primary block, in which case a CRC MAY be present in the primary block. The length and nature of the CRC SHALL be as indicated by the CRC type. The CRC SHALL be computed over the concatenation of all bytes (including CBOR "break" characters) of the primary block including the CRC field itself, which, for this purpose, SHALL be temporarily populated with all bytes set to zero.
It should say:
CRC: A CRC SHALL be present in the primary block unless the bundle includes a BPSec Block Integrity Block [BPSEC] whose target is the primary block, in which case a CRC MAY be present in the primary block. The length and nature of the CRC SHALL be as indicated by the CRC type. The CRC SHALL be computed over the concatenation of all bytes (including CBOR "break" characters) of the primary block including the CRC field itself, which, for this purpose, SHALL be temporarily populated with all value bytes set to zero. The initial byte of the CBOR encoded CRC field SHALL remain unchanged.
Notes:
There was some confusion about the wording of "temporarily populated with all bytes set to zero" when talking about the CRC field in the CBOR encoded primary block. An implementer thought this might mean to also zeroize the intial byte(s) of the CBOR encoded byte string that represents the CRC field. This correction makes it clear that only the bytes that represent the value of the CRC field should be zeroized when calculating the CRC.
My correction uses "initial byte" because the current CRC types will only ever have a single intial byte when encoding the CRC value as a CBOR byte string. However, technically CBOR byte strings can byte more than 1 initial byte so it may be better to use "initial byte(s)".