
Here are a couple of other differences I have found between the bloblist code after applying your patches and the TL specification:
* bloblist seems to explicitly disallow having the same tag more than once in the list (e.g. see documentation of bloblist_add()), whereas the TL specification explicitly allows that. You're of course free to impose this restriction on the way U-Boot uses the spec, but you may eventually run into compatibility issues if you hardcode that assumption and one day might ingest a TL from a different writer that doesn't adhere to it.
* The bloblist_resize() function doesn't preserve alignment restrictions when relocating other TEs. I think the (only?) safe way to resize a TE in-place would be to align the distance that following TEs need to be moved up to (1 << hdr->align_log2), and then insert a void dummy TE to account for the additional added distance if necessary.
* The comment at the top of bloblist.c should be updated to reflect how alignment and padding works in the TL spec.
* The checksum algorithm seems incorrect. U-Boot's table_compute_checksum() subtracts bytes, but the TE spec says they need to be summed up.
* The bloblist_reloc() function must be updated to follow the TL relocation mechanism (i.e. take hdr->align_log2 into account to make sure the new position preserves alignment requirements... I would say see https://github.com/FirmwareHandoff/firmware_handoff/blob/main/source/transfe... for details, but I just noticed that we made a mistake there, so please check the version from https://github.com/FirmwareHandoff/firmware_handoff/pull/12 for the corrected algorithm).