an algorithm for putting text in a standard form before hashing or signing
CQT 2.17 is the superseded algorithm published by this repository before CQT 3.17. Existing hashes and signatures that identify cqt2.17 remain historical data and MUST NOT be reinterpreted as CQT 3.17.
CQT 2.17 was released as tag cqt2.17, commit 092a1cb, the 2026-08-24 revision. The last CQT 2.17 repository state is commit 551bfd0, the 2026-08-25 revision, which added three worked-example vectors and changed no output. Either commit contains the specification, the six implementations, and goldens/cqt2.17.json.
Unlike CQT 1.14, CQT 2.17 was a complete and conformant algorithm: its six implementations agreed with each other and with a normative vector file, and an implementation of it can still be built from that commit. It was superseded rather than repaired.
What CQT 3.17 changes, and why 2.17’s output could not simply be corrected in place:
U+FEFF is removed as a precondition, so it comes out of a protected span. Under 2.17 it was treated as a layout invisible and survived inside fences and URLs.> alpha never matched >> alpha, which defeated comparison in exactly the channels this algorithm was written for.:D, :p and :o no longer convert to emoticons when followed by a letter, digit, - or _. Under 2.17 the emoticon table rewrote did:peer to did:-peer, urn:oid to urn:-oid, and a D-coded CESR key after a colon to :-D....Each of those changes the output for some input, so each on its own would require a new identifier. See Appendix: what the version numbers promise.
Protocols SHOULD migrate by issuing new commitments explicitly identified as cqt3.17. They MUST NOT recompute an old cqt2.17 commitment with CQT 3.17 or silently relabel it.