When a Matter controller pairs a new device, it checks the device's identity before letting it in. The device presents a Device Attestation Certificate (DAC), signed by a Product Attestation Intermediate (PAI), plus a Certification Declaration (CD) signed by the Connectivity Standards Alliance. On 31 October 2026 matter.js, the open-source TypeScript implementation of Matter maintained by Ingo Fischer (Apollon77), merged two pull requests that make its controller much stricter about all three.

The trigger was CHIP's own test vectors. The reference Matter SDK ships a set of deliberately broken certificates used by certification test TC-DA-1.4, and every one of them must be refused. Run against matter.js, 16 CD vectors and 28 DAC and PAI vectors were accepted.

Certification declarations

The bigger gap was signer trust. If matter.js did not recognise the key that signed a CD, it only logged a warning. A CD signed by an unknown key, or by any key that claimed the right key identifier, could pass. Pull request #4871 follows the CHIP model instead:

  • The CSA's CD signing keys 001 to 005 are built in, so an offline controller, or one without access to the Distributed Compliance Ledger (DCL), still verifies the signature rather than skipping the check.
  • A signer fetched from the DCL or a local store is trusted only after its certificate verifies against the CSA CD root.
  • Anything else, including the case where the DCL cannot be reached, is refused as CdSignerUnknown.
  • An official CD signed with the Matter test signer is refused.

The parser now also enforces the CMS envelope fixed by Matter 1.6.1 (version 3, SHA-256, ECDSA with SHA-256) and refuses unknown format_version and certification_type values. Of the 16 bad CD vectors, 11 are now refused. Three need DCL compliance records, and two cover fields the specification says to ignore, so matter.js keeps accepting them.

Device certificates

Pull request #4865 adds the DAC and PAI certificate profile from the specification: a v3 certificate, critical basic constraints (a DAC must not be a CA, a PAI must be a CA with path length 0) and critical key usage with exactly the allowed bits. The X.509 parser previously filled in "not a CA" when basic constraints were missing and read path lengths of 128 or more as a single byte. Violations are now reported as DacFormatInvalid or PaiFormatInvalid.

As before, an onAttestationFailure policy decides what happens. The default policy refuses, and a developer can still choose to accept a device with a broken certificate, for example during testing.

Who is affected

Nothing changes for devices with correct certificates, which is what certified products should carry. The changes are on the main branch. The latest tagged release, v0.18.0 from 20 October, does not include them, so projects built on matter.js will pick them up with the next release. Anyone developing a Matter device with home-made test certificates should check them against the new rules before that release, because a controller with the default policy will now turn them away.