From 814361530fc23396c88cc1d0f32ac5d7c18398ee Mon Sep 17 00:00:00 2001 From: C Freeman Date: Tue, 18 Jun 2024 13:05:51 -0400 Subject: [PATCH 01/28] Post certification checks script (#33256) * Post certification checks script This test is used to evaluate that all the proper post-certification work has been done to make a Matter device production ready. This test ensure that: - DAC chain is valid and spec compliant, and chains up to a PAA that is registered in the main net DCL - CD is valid and, signed by one of the known CSA signing certs and is marked as a production CD - DCL entries for this device and vendor have all been registered - TestEventTriggers have been turned off This test is performed over PASE on a factory reset device. To run this test, first build and install the python chip wheel files, then add the extra dependencies. From the root: ./scripts/build_python.sh -i py source py/bin/activate pip install opencv-python requests click_option_group * Restyled by autopep8 * linter * Add a production CD check to DA-1.7 * report out results better * fix post cert check in 1.2 * Add a check for software versions NOTE: not done yet because as it turns out hex strings appear to be valid base64. I mean, they're garbage, but this test won't find that. Need additional tests to detect hex vs. base64 * fix accidental checkin * Proper checksum check on the downloaded OTA * Update credentials/fetch_paa_certs_from_dcl.py * Don't include CSA root as a PAA * Restyled by autopep8 * rename file to production_device_checks.py --------- Co-authored-by: Restyled.io --- ...rom-dcl.py => fetch_paa_certs_from_dcl.py} | 69 ++- src/controller/python/chip/ChipDeviceCtrl.py | 35 +- src/python_testing/TC_DA_1_2.py | 14 +- .../basic_composition_support.py | 9 +- src/python_testing/matter_testing_support.py | 2 +- .../production_device_checks.py | 477 ++++++++++++++++++ 6 files changed, 579 insertions(+), 27 deletions(-) rename credentials/{fetch-paa-certs-from-dcl.py => fetch_paa_certs_from_dcl.py} (69%) create mode 100644 src/python_testing/post_certification_tests/production_device_checks.py diff --git a/credentials/fetch-paa-certs-from-dcl.py b/credentials/fetch_paa_certs_from_dcl.py similarity index 69% rename from credentials/fetch-paa-certs-from-dcl.py rename to credentials/fetch_paa_certs_from_dcl.py index d440398c472be7..3bcd74b6534e26 100644 --- a/credentials/fetch-paa-certs-from-dcl.py +++ b/credentials/fetch_paa_certs_from_dcl.py @@ -37,6 +37,9 @@ PRODUCTION_NODE_URL_REST = "https://on.dcl.csa-iot.org" TEST_NODE_URL_REST = "https://on.test-net.dcl.csa-iot.org" +MATTER_CERT_CA_SUBJECT = "MFIxDDAKBgNVBAoMA0NTQTEsMCoGA1UEAwwjTWF0dGVyIENlcnRpZmljYXRpb24gYW5kIFRlc3RpbmcgQ0ExFDASBgorBgEEAYKifAIBDARDNUEw" +MATTER_CERT_CA_SUBJECT_KEY_ID = "97:E4:69:D0:C5:04:14:C2:6F:C7:01:F7:7E:94:77:39:09:8D:F6:A5" + def parse_paa_root_certs(cmdpipe, paa_list): """ @@ -73,13 +76,14 @@ def parse_paa_root_certs(cmdpipe, paa_list): else: if b': ' in line: key, value = line.split(b': ') - result[key.strip(b' -').decode("utf-8")] = value.strip().decode("utf-8") + result[key.strip(b' -').decode("utf-8") + ] = value.strip().decode("utf-8") parse_paa_root_certs.counter += 1 if parse_paa_root_certs.counter % 2 == 0: paa_list.append(copy.deepcopy(result)) -def write_paa_root_cert(certificate, subject): +def write_cert(certificate, subject): filename = 'dcld_mirror_' + \ re.sub('[^a-zA-Z0-9_-]', '', re.sub('[=, ]', '_', subject)) with open(filename + '.pem', 'w+') as outfile: @@ -93,7 +97,8 @@ def write_paa_root_cert(certificate, subject): serialization.Encoding.DER) outfile.write(der_certificate) except (IOError, ValueError) as e: - print(f"ERROR: Failed to convert {filename + '.pem'}: {str(e)}. Skipping...") + print( + f"ERROR: Failed to convert {filename + '.pem'}: {str(e)}. Skipping...") def parse_paa_root_cert_from_dcld(cmdpipe): @@ -133,7 +138,38 @@ def use_dcld(dcld, production, cmdlist): @optgroup.option('--paa-trust-store-path', default='paa-root-certs', type=str, metavar='PATH', help="PAA trust store path (default: paa-root-certs)") def main(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path): """DCL PAA mirroring tools""" + fetch_paa_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path) + + +def get_cert_from_rest(rest_node_url, subject, subject_key_id): + response = requests.get( + f"{rest_node_url}/dcl/pki/certificates/{subject}/{subject_key_id}").json()["approvedCertificates"]["certs"][0] + certificate = response["pemCert"].rstrip("\n") + subject = response["subjectAsText"] + return certificate, subject + + +def fetch_cd_signing_certs(store_path): + ''' Only supports using main net http currently.''' + rest_node_url = PRODUCTION_NODE_URL_REST + os.makedirs(store_path, exist_ok=True) + original_dir = os.getcwd() + os.chdir(store_path) + cd_signer_ids = requests.get( + f"{rest_node_url}/dcl/pki/child-certificates/{MATTER_CERT_CA_SUBJECT}/{MATTER_CERT_CA_SUBJECT_KEY_ID}").json()['childCertificates']['certIds'] + for signer in cd_signer_ids: + subject = signer['subject'] + subject_key_id = signer['subjectKeyId'] + certificate, subject = get_cert_from_rest(rest_node_url, subject, subject_key_id) + + print(f"Downloaded CD signing cert with subject: {subject}") + write_cert(certificate, subject) + + os.chdir(original_dir) + + +def fetch_paa_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path): production = False dcld = use_test_net_dcld @@ -148,36 +184,43 @@ def main(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_h rest_node_url = PRODUCTION_NODE_URL_REST if production else TEST_NODE_URL_REST os.makedirs(paa_trust_store_path, exist_ok=True) + original_dir = os.getcwd() os.chdir(paa_trust_store_path) if use_rest: - paa_list = requests.get(f"{rest_node_url}/dcl/pki/root-certificates").json()["approvedRootCertificates"]["certs"] + paa_list = requests.get( + f"{rest_node_url}/dcl/pki/root-certificates").json()["approvedRootCertificates"]["certs"] else: cmdlist = ['query', 'pki', 'all-x509-root-certs'] - cmdpipe = subprocess.Popen(use_dcld(dcld, production, cmdlist), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + cmdpipe = subprocess.Popen(use_dcld( + dcld, production, cmdlist), stdout=subprocess.PIPE, stderr=subprocess.PIPE) paa_list = [] parse_paa_root_certs.counter = 0 parse_paa_root_certs(cmdpipe, paa_list) for paa in paa_list: + if paa['subject'] == MATTER_CERT_CA_SUBJECT and paa['subjectKeyId'] == MATTER_CERT_CA_SUBJECT_KEY_ID: + # Don't include the CD signing cert as a PAA root. + continue if use_rest: - response = requests.get( - f"{rest_node_url}/dcl/pki/certificates/{paa['subject']}/{paa['subjectKeyId']}").json()["approvedCertificates"]["certs"][0] - certificate = response["pemCert"] - subject = response["subjectAsText"] + certificate, subject = get_cert_from_rest(rest_node_url, paa['subject'], paa['subjectKeyId']) else: - cmdlist = ['query', 'pki', 'x509-cert', '-u', paa['subject'], '-k', paa['subjectKeyId']] + cmdlist = ['query', 'pki', 'x509-cert', '-u', + paa['subject'], '-k', paa['subjectKeyId']] - cmdpipe = subprocess.Popen(use_dcld(dcld, production, cmdlist), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + cmdpipe = subprocess.Popen(use_dcld( + dcld, production, cmdlist), stdout=subprocess.PIPE, stderr=subprocess.PIPE) (certificate, subject) = parse_paa_root_cert_from_dcld(cmdpipe) certificate = certificate.rstrip('\n') - print(f"Downloaded certificate with subject: {subject}") - write_paa_root_cert(certificate, subject) + print(f"Downloaded PAA certificate with subject: {subject}") + write_cert(certificate, subject) + + os.chdir(original_dir) if __name__ == "__main__": diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 6e2e1336b5c837..736bfae0a5cf85 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -254,13 +254,18 @@ class DeviceProxyWrapper(): that is not an issue that needs to be accounted for and it will become very apparent if that happens. ''' + class DeviceProxyType(enum.Enum): + OPERATIONAL = enum.auto(), + COMMISSIONEE = enum.auto(), - def __init__(self, deviceProxy: ctypes.c_void_p, dmLib=None): + def __init__(self, deviceProxy: ctypes.c_void_p, proxyType, dmLib=None): self._deviceProxy = deviceProxy self._dmLib = dmLib + self._proxyType = proxyType def __del__(self): - if (self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): + # Commissionee device proxies are owned by the DeviceCommissioner. See #33031 + if (self._proxyType == self.DeviceProxyType.OPERATIONAL and self.self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): # This destructor is called from any threading context, including on the Matter threading context. # So, we cannot call chipStack.Call or chipStack.CallAsyncWithCompleteCallback which waits for the posted work to # actually be executed. Instead, we just post/schedule the work and move on. @@ -861,7 +866,23 @@ def GetClusterHandler(self): return self._Cluster - def GetConnectedDeviceSync(self, nodeid, allowPASE: bool = True, timeoutMs: int = None): + def FindOrEstablishPASESession(self, setupCode: str, nodeid: int, timeoutMs: int = None) -> typing.Optional[DeviceProxyWrapper]: + ''' Returns CommissioneeDeviceProxy if we can find or establish a PASE connection to the specified device''' + self.CheckIsActive() + returnDevice = c_void_p(None) + res = self._ChipStack.Call(lambda: self._dmLib.pychip_GetDeviceBeingCommissioned( + self.devCtrl, nodeid, byref(returnDevice)), timeoutMs) + if res.is_success: + return DeviceProxyWrapper(returnDevice, DeviceProxyWrapper.DeviceProxyType.COMMISSIONEE, self._dmLib) + + self.EstablishPASESession(setupCode, nodeid) + + res = self._ChipStack.Call(lambda: self._dmLib.pychip_GetDeviceBeingCommissioned( + self.devCtrl, nodeid, byref(returnDevice)), timeoutMs) + if res.is_success: + return DeviceProxyWrapper(returnDevice, DeviceProxyWrapper.DeviceProxyType.COMMISSIONEE, self._dmLib) + + def GetConnectedDeviceSync(self, nodeid, allowPASE=True, timeoutMs: int = None): ''' Gets an OperationalDeviceProxy or CommissioneeDeviceProxy for the specified Node. nodeId: Target's Node ID @@ -882,7 +903,7 @@ def GetConnectedDeviceSync(self, nodeid, allowPASE: bool = True, timeoutMs: int self.devCtrl, nodeid, byref(returnDevice)), timeoutMs) if res.is_success: logging.info('Using PASE connection') - return DeviceProxyWrapper(returnDevice) + return DeviceProxyWrapper(returnDevice, DeviceProxyWrapper.DeviceProxyType.COMMISSIONEE, self._dmLib) class DeviceAvailableClosure(): def deviceAvailable(self, device, err): @@ -916,7 +937,7 @@ def deviceAvailable(self, device, err): if returnDevice.value is None: returnErr.raise_on_error() - return DeviceProxyWrapper(returnDevice, self._dmLib) + return DeviceProxyWrapper(returnDevice, DeviceProxyWrapper.DeviceProxyType.OPERATIONAL, self._dmLib) async def WaitForActive(self, nodeid, *, timeoutSeconds=30.0, stayActiveDurationMs=30000): ''' Waits a LIT ICD device to become active. Will send a StayActive command to the device on active to allow human operations. @@ -948,7 +969,7 @@ async def GetConnectedDevice(self, nodeid, allowPASE: bool = True, timeoutMs: in self.devCtrl, nodeid, byref(returnDevice)), timeoutMs) if res.is_success: logging.info('Using PASE connection') - return DeviceProxyWrapper(returnDevice) + return DeviceProxyWrapper(returnDevice, DeviceProxyWrapper.DeviceProxyType.COMMISSIONEE, self._dmLib) eventLoop = asyncio.get_running_loop() future = eventLoop.create_future() @@ -987,7 +1008,7 @@ def deviceAvailable(self, device, err): else: await future - return DeviceProxyWrapper(future.result(), self._dmLib) + return DeviceProxyWrapper(future.result(), DeviceProxyWrapper.DeviceProxyType.OPERATIONAL, self._dmLib) def ComputeRoundTripTimeout(self, nodeid, upperLayerProcessingTimeoutMs: int = 0): ''' Returns a computed timeout value based on the round-trip time it takes for the peer at the other end of the session to diff --git a/src/python_testing/TC_DA_1_2.py b/src/python_testing/TC_DA_1_2.py index 759fa3eae3e2a7..08fb375139088b 100644 --- a/src/python_testing/TC_DA_1_2.py +++ b/src/python_testing/TC_DA_1_2.py @@ -20,6 +20,7 @@ import re import chip.clusters as Clusters +from basic_composition_support import BasicCompositionTests from chip.interaction_model import InteractionModelError, Status from chip.tlv import TLVReader from cryptography import x509 @@ -104,7 +105,7 @@ def parse_ids_from_certs(dac: x509.Certificate, pai: x509.Certificate) -> tuple( # default is 'credentials/development/cd-certs'. -class TC_DA_1_2(MatterBaseTest): +class TC_DA_1_2(MatterBaseTest, BasicCompositionTests): def desc_TC_DA_1_2(self): return "Device Attestation Request Validation [DUT - Commissionee]" @@ -164,6 +165,11 @@ def steps_TC_DA_1_2(self): async def test_TC_DA_1_2(self): is_ci = self.check_pics('PICS_SDK_CI_ONLY') cd_cert_dir = self.user_params.get("cd_cert_dir", 'credentials/development/cd-certs') + post_cert_test = self.user_params.get("post_cert_test", False) + + do_test_over_pase = self.user_params.get("use_pase_only", False) + if do_test_over_pase: + self.connect_over_pase(self.default_controller) # Commissioning - done self.step(0) @@ -308,7 +314,9 @@ async def test_TC_DA_1_2(self): self.step("6.8") asserts.assert_in(version_number, range(0, 65535), "Version number out of range") self.step("6.9") - if is_ci: + if post_cert_test: + asserts.assert_equal(certification_type, 2, "Certification declaration is not marked as production.") + elif is_ci: asserts.assert_in(certification_type, [0, 1, 2], "Certification type is out of range") else: asserts.assert_in(certification_type, [1, 2], "Certification type is out of range") @@ -392,7 +400,7 @@ async def test_TC_DA_1_2(self): self.mark_current_step_skipped() self.step(12) - proxy = self.default_controller.GetConnectedDeviceSync(self.dut_node_id, False) + proxy = self.default_controller.GetConnectedDeviceSync(self.dut_node_id, do_test_over_pase) asserts.assert_equal(len(proxy.attestationChallenge), 16, "Attestation challenge is the wrong length") attestation_tbs = elements + proxy.attestationChallenge diff --git a/src/python_testing/basic_composition_support.py b/src/python_testing/basic_composition_support.py index 299b7da194b1bb..8cc958a7207b3d 100644 --- a/src/python_testing/basic_composition_support.py +++ b/src/python_testing/basic_composition_support.py @@ -98,6 +98,11 @@ def ConvertValue(value) -> Any: class BasicCompositionTests: + def connect_over_pase(self, dev_ctrl): + setupCode = self.matter_test_config.qr_code_content if self.matter_test_config.qr_code_content is not None else self.matter_test_config.manual_code + asserts.assert_true(setupCode, "Require either --qr-code or --manual-code.") + dev_ctrl.FindOrEstablishPASESession(setupCode, self.dut_node_id) + def dump_wildcard(self, dump_device_composition_path: typing.Optional[str]): node_dump_dict = {endpoint_id: MatterTlvToJson(self.endpoints_tlv[endpoint_id]) for endpoint_id in self.endpoints_tlv} logging.debug(f"Raw TLV contents of Node: {json.dumps(node_dump_dict, indent=2)}") @@ -116,10 +121,8 @@ async def setup_class_helper(self, default_to_pase: bool = True): dump_device_composition_path: Optional[str] = self.user_params.get("dump_device_composition_path", None) if do_test_over_pase: - setupCode = self.matter_test_config.qr_code_content if self.matter_test_config.qr_code_content is not None else self.matter_test_config.manual_code - asserts.assert_true(setupCode, "Require either --qr-code or --manual-code.") + self.connect_over_pase(dev_ctrl) node_id = self.dut_node_id - dev_ctrl.EstablishPASESession(setupCode, node_id) else: # Using the already commissioned node node_id = self.dut_node_id diff --git a/src/python_testing/matter_testing_support.py b/src/python_testing/matter_testing_support.py index e0acefd1c61782..9fad2a0d316178 100644 --- a/src/python_testing/matter_testing_support.py +++ b/src/python_testing/matter_testing_support.py @@ -1670,7 +1670,7 @@ def run_tests_no_exit(test_class: MatterBaseTest, matter_test_config: MatterTest if hooks: # Right now, we only support running a single test class at once, - # but it's relatively easy to exapand that to make the test process faster + # but it's relatively easy to expand that to make the test process faster # TODO: support a list of tests hooks.start(count=1) # Mobly gives the test run time in seconds, lets be a bit more precise diff --git a/src/python_testing/post_certification_tests/production_device_checks.py b/src/python_testing/post_certification_tests/production_device_checks.py new file mode 100644 index 00000000000000..0e8fd617c44110 --- /dev/null +++ b/src/python_testing/post_certification_tests/production_device_checks.py @@ -0,0 +1,477 @@ +# +# Copyright (c) 2024 Project CHIP Authors +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This test is used to evaluate that all the proper post-certification +# work has been done to make a Matter device production ready. +# This test ensure that: +# - DAC chain is valid and spec compliant, and chains up to a PAA that +# is registered in the main net DCL +# - CD is valid and, signed by one of the known CSA signing certs and +# is marked as a production CD +# - DCL entries for this device and vendor have all been registered +# - DCL OTA entries have proper sizes and checksums +# - TestEventTriggers have been turned off +# +# This test is performed over PASE on a factory reset device. +# +# To run this test, first build and install the python chip wheel +# files, then add the extra dependencies. From the root: +# +# . scripts/activate.sh +# ./scripts/build_python.sh -i py +# source py/bin/activate +# pip install opencv-python requests click_option_group +# python src/python_testing/post_certification_tests/production_device_checks.py + +import base64 +import hashlib +import importlib +import logging +import os +import shutil +import sys +import time +import typing +import uuid +from dataclasses import dataclass +from enum import Enum, auto +from pathlib import Path + +import chip.clusters as Clusters +import cv2 +import requests +from mobly import asserts + +DEFAULT_CHIP_ROOT = os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..', '..')) + +try: + from basic_composition_support import BasicCompositionTests + from matter_testing_support import (MatterBaseTest, MatterStackState, MatterTestConfig, TestStep, async_test_body, + run_tests_no_exit) +except ImportError: + sys.path.append(os.path.abspath( + os.path.join(os.path.dirname(__file__), '..'))) + from basic_composition_support import BasicCompositionTests + from matter_testing_support import (MatterBaseTest, MatterStackState, MatterTestConfig, TestStep, async_test_body, + run_tests_no_exit) + +try: + import fetch_paa_certs_from_dcl +except ImportError: + sys.path.append(os.path.abspath( + os.path.join(DEFAULT_CHIP_ROOT, 'credentials'))) + import fetch_paa_certs_from_dcl + + +@dataclass +class Failure: + step: str + exception: typing.Optional[Exception] + + +class Hooks(): + def __init__(self): + self.failures = {} + self.current_step = 'unknown' + self.current_test = 'unknown' + + def start(self, count: int): + pass + + def stop(self, duration: int): + pass + + def test_start(self, filename: str, name: str, count: int): + self.current_test = name + pass + + def test_stop(self, exception: Exception, duration: int): + # Exception is the test assertion that caused the failure + if exception: + self.failures[self.current_test].exception = exception + + def step_skipped(self, name: str, expression: str): + pass + + def step_start(self, name: str): + self.current_step = name + + def step_success(self, logger, logs, duration: int, request): + pass + + def step_failure(self, logger, logs, duration: int, request, received): + self.failures[self.current_test] = Failure(self.current_step, None) + + def step_unknown(self): + pass + + def get_failures(self) -> list[str]: + return self.failures + + +class TestEventTriggersCheck(MatterBaseTest, BasicCompositionTests): + @async_test_body + async def test_TestEventTriggersCheck(self): + self.connect_over_pase(self.default_controller) + gd = Clusters.GeneralDiagnostics + ret = await self.read_single_attribute_check_success(cluster=gd, attribute=gd.Attributes.TestEventTriggersEnabled) + asserts.assert_equal(ret, 0, "TestEventTriggers are still on") + + +class DclCheck(MatterBaseTest, BasicCompositionTests): + @async_test_body + async def setup_class(self): + self.connect_over_pase(self.default_controller) + bi = Clusters.BasicInformation + self.vid = await self.read_single_attribute_check_success(cluster=bi, attribute=bi.Attributes.VendorID) + self.pid = await self.read_single_attribute_check_success(cluster=bi, attribute=bi.Attributes.ProductID) + self.software_version = await self.read_single_attribute_check_success(cluster=bi, attribute=bi.Attributes.SoftwareVersion) + self.url = fetch_paa_certs_from_dcl.PRODUCTION_NODE_URL_REST + + self.vid_str = f'vid = 0x{self.vid:04X}' + self.vid_pid_str = f'{self.vid_str} pid = 0x{self.pid:04X}' + self.vid_pid_sv_str = f'{self.vid_pid_str} software version = {self.software_version}' + + def steps_Vendor(self): + return [TestStep(1, "Check if device VID is listed in the DCL vendor schema", "Listing found")] + + def test_Vendor(self): + self.step(1) + entry = requests.get(f"{self.url}/dcl/vendorinfo/vendors/{self.vid}").json() + key = 'vendorInfo' + asserts.assert_true(key in entry.keys(), f"Unable to find vendor entry for {self.vid_str}") + logging.info(f'Found vendor key for {self.vid_str} in the DCL:') + logging.info(f'{entry[key]}') + + def steps_Model(self): + return [TestStep(1, "Check if device VID/PID are listed in the DCL model schema", "Listing found")] + + def test_Model(self): + self.step(1) + key = 'model' + entry = requests.get(f"{self.url}/dcl/model/models/{self.vid}/{self.pid}").json() + asserts.assert_true(key in entry.keys(), f"Unable to find model entry for {self.vid_pid_str}") + logging.info(f'Found model entry for {self.vid_pid_str} in the DCL:') + logging.info(f'{entry[key]}') + + def steps_Compliance(self): + return [TestStep(1, "Check if device VID/PID/SoftwareVersion are listed in the DCL compliance info schema", "Listing found")] + + def test_Compliance(self): + self.step(1) + key = 'complianceInfo' + entry = requests.get( + f"{self.url}/dcl/compliance/compliance-info/{self.vid}/{self.pid}/{self.software_version}/matter").json() + asserts.assert_true(key in entry.keys(), + f"Unable to find compliance entry for {self.vid_pid_sv_str}") + logging.info( + f'Found compliance info for {self.vid_pid_sv_str} in the DCL:') + logging.info(f'{entry[key]}') + + def steps_CertifiedModel(self): + return [TestStep(1, "Check if device VID/PID/SoftwareVersion are listed in the DCL certified model schema", "Listing found")] + + def test_CertifiedModel(self): + self.step(1) + key = 'certifiedModel' + entry = requests.get( + f"{self.url}/dcl/compliance/certified-models/{self.vid}/{self.pid}/{self.software_version}/matter").json() + asserts.assert_true(key in entry.keys(), + f"Unable to find certified model entry for {self.vid_pid_sv_str}") + logging.info( + f'Found certified model for {self.vid_pid_sv_str} in the DCL:') + logging.info(f'{entry[key]}') + + def steps_AllSoftwareVersions(self): + return [TestStep(1, "Query the version information for this software version", "DCL entry exists"), + TestStep(2, "For each valid software version with an OtaUrl, verify the OtaChecksumType is in the valid range and the OtaChecksum is a base64. If the softwareVersion matches the current softwareVersion on the device, ensure the entry is valid.", "OtaChecksum is base64 and OtaChecksumType is in the valid set")] + + def test_AllSoftwareVersions(self): + self.step(1) + versions_entry = requests.get(f"{self.url}/dcl/model/versions/{self.vid}/{self.pid}").json() + key_model_versions = 'modelVersions' + asserts.assert_true(key_model_versions in versions_entry.keys(), + f"Unable to find {key_model_versions} in software versions schema for {self.vid_pid_str}") + logging.info(f'Found version info for vid=0x{self.vid_pid_str} in the DCL:') + logging.info(f'{versions_entry[key_model_versions]}') + key_software_versions = 'softwareVersions' + asserts.assert_true(key_software_versions in versions_entry[key_model_versions].keys( + ), f"Unable to find {key_software_versions} in software versions schema for {self.vid_pid_str}") + + problems = [] + self.step(2) + for software_version in versions_entry[key_model_versions][key_software_versions]: + entry_wrapper = requests.get(f"{self.url}/dcl/model/versions/{self.vid}/{self.pid}/{software_version}").json() + key_model_version = 'modelVersion' + if key_model_version not in entry_wrapper: + problems.append( + f'Missing key {key_model_version} in entry for {self.vid_pid_str} software version={software_version}') + continue + logging.info(f'Found entry version entry for {self.vid_pid_str} software version={software_version}') + logging.info(entry_wrapper) + entry = entry_wrapper[key_model_version] + key_ota_url = 'otaUrl' + key_software_version_valid = 'softwareVersionValid' + key_ota_checksum = 'otaChecksum' + key_ota_checksum_type = 'otaChecksumType' + key_ota_file_size = 'otaFileSize' + + def check_key(key): + if key not in entry.keys(): + problems.append( + f'Missing key {key} in DCL versions entry for {self.vid_pid_str} software version={software_version}') + check_key(key_ota_url) + check_key(key_software_version_valid) + if entry[key_software_version_valid] and entry[key_ota_url]: + check_key(key_ota_checksum) + check_key(key_ota_checksum_type) + checksum_types = {1: hashlib.sha256, 7: hashlib.sha384, 8: hashlib.sha256, + 10: hashlib.sha3_256, 11: hashlib.sha3_384, 12: hashlib.sha3_512} + if entry[key_ota_checksum_type] not in checksum_types.keys(): + problems.append( + f'OtaChecksumType for entry {self.vid_pid_str} software version={software_version} is invalid. Found {entry[key_ota_checksum_type]} valid values: {checksum_types.keys()}') + continue + checksum = entry[key_ota_checksum] + try: + is_base64 = base64.b64encode(base64.b64decode(checksum)).decode('utf-8') == checksum + except (ValueError, TypeError): + is_base64 = False + if not is_base64: + problems.append( + f"Checksum {checksum} is not base64 encoded for for entry {self.vid_pid_str} software version={software_version}") + continue + + response = requests.get(entry[key_ota_url]) + if not response.ok: + problems.append( + f"Unable to get OTA object from {entry[key_ota_url]} for {self.vid_pid_str} software version = {software_version}") + continue + + ota_len = str(len(response.content)) + dcl_len = entry[key_ota_file_size] + if ota_len != dcl_len: + problems.append( + f'Incorrect OTA size for {self.vid_pid_str} software_version = {software_version}, received size: {len(response.content)} DCL states {entry[key_ota_file_size]}') + continue + + checksum = checksum_types[entry[key_ota_checksum_type]](response.content).digest() + dcl_checksum = base64.b64decode(entry[key_ota_checksum]) + if checksum != dcl_checksum: + problems.append( + f'Incorrect checksum for {self.vid_pid_str} software version = {software_version}, calculated: {checksum}, DCL: {dcl_checksum}') + + msg = 'Problems found in software version DCL checks:\n' + for problem in problems: + msg += f'{problem}\n' + asserts.assert_false(problems, msg) + + +def get_qr() -> str: + qr_code_detector = cv2.QRCodeDetector() + camera_id = 0 + video_capture = cv2.VideoCapture(camera_id) + window_name = 'Post-certification check QR code reader' + qr = '' + while not qr: + ret, frame = video_capture.read() + if ret: + ret_qr, decoded_info, points, _ = qr_code_detector.detectAndDecodeMulti( + frame) + if ret_qr: + for s, p in zip(decoded_info, points): + if s and s.startswith("MT:"): + qr = s + color = (0, 255, 0) + else: + color = (0, 0, 255) + frame = cv2.polylines( + frame, [p.astype(int)], True, color, 8) + cv2.imshow(window_name, frame) + + if (cv2.waitKey(1) & 0xFF == ord('q')): + break + if qr: + time.sleep(1) + break + + cv2.destroyWindow(window_name) + return qr + + +class SetupCodeType(Enum): + UNKNOWN = auto(), + QR = auto(), + MANUAL = auto(), + + +def get_setup_code() -> (str, bool): + ''' Returns the setup code and an enum indicating the code type.''' + while True: + print('Press q for qr code or m for manual code') + pref = input() + if pref in ['q', 'Q']: + return (get_qr(), SetupCodeType.QR) + elif pref in ['m', 'M']: + print('please enter manual code') + m = input() + m = ''.join([i for i in m if m.isnumeric()]) + if len(m) == 11 or len(m) == 21: + return (m, SetupCodeType.MANUAL) + else: + print("Invalid manual code - please try again") + + +class TestConfig(object): + def __init__(self, code: str, code_type: SetupCodeType): + tmp_uuid = str(uuid.uuid4()) + tmpdir_paa = f'paas_{tmp_uuid}' + tmpdir_cd = f'cd_{tmp_uuid}' + self.paa_path = os.path.join('.', tmpdir_paa) + self.cd_path = os.path.join('.', tmpdir_cd) + os.mkdir(self.paa_path) + os.mkdir(self.cd_path) + fetch_paa_certs_from_dcl.fetch_paa_certs(use_main_net_dcld='', use_test_net_dcld='', + use_main_net_http=True, use_test_net_http=False, paa_trust_store_path=tmpdir_paa) + fetch_paa_certs_from_dcl.fetch_cd_signing_certs(tmpdir_cd) + self.admin_storage = f'admin_storage_{tmp_uuid}.json' + global_test_params = {'use_pase_only': True, 'post_cert_test': True} + self.config = MatterTestConfig(endpoint=0, dut_node_ids=[ + 1], global_test_params=global_test_params, storage_path=self.admin_storage) + if code_type == SetupCodeType.QR: + self.config.qr_code_content = code + else: + self.config.manual_code = code + self.config.paa_trust_store_path = Path(self.paa_path) + # Set for DA-1.2, which uses the CD signing certs for verification. This test is now set to use the production CD signing certs from the DCL. + self.config.global_test_params['cd_cert_dir'] = tmpdir_cd + self.stack = MatterStackState(self.config) + self.default_controller = self.stack.certificate_authorities[0].adminList[0].NewController( + nodeId=112233, + paaTrustStorePath=str(self.config.paa_trust_store_path) + ) + + def get_stack(self): + return self.stack + + def get_controller(self): + return self.default_controller + + def get_config(self, tests: list[str]): + self.config.tests = tests + return self.config + + def __enter__(self): + return self + + def __exit__(self, *args): + self.default_controller.Shutdown() + self.stack.Shutdown() + os.remove(self.admin_storage) + shutil.rmtree(self.paa_path) + shutil.rmtree(self.cd_path) + + +def run_test(test_class: MatterBaseTest, tests: typing.List[str], test_config: TestConfig) -> list[str]: + hooks = Hooks() + stack = test_config.get_stack() + controller = test_config.get_controller() + matter_config = test_config.get_config(tests) + ok = run_tests_no_exit(test_class, matter_config, hooks, controller, stack) + if not ok: + print(f"Test failure. Failed on step: {hooks.get_failures()}") + return hooks.get_failures() + + +def run_cert_test(test: str, test_config: TestConfig) -> list[str]: + ''' Runs the specified test, returns a list of failures''' + # for simplicity and because I know the tests we're running follow this pattern, + # just assume the naming convention based off the base name - ie, file and class + # share a name, test is test_classname + module = importlib.import_module(test) + test_class = getattr(module, test) + return run_test(test_class, [f'test_{test}'], test_config) + + +def main(): + code, code_type = get_setup_code() + with TestConfig(code, code_type) as test_config: + # DA-1.2 is a test of the certification declaration + failures_DA_1_2 = run_cert_test('TC_DA_1_2', test_config) + # DA-1.7 is a test of the DAC chain (up to a PAA in the given directory) + failures_DA_1_7 = run_cert_test('TC_DA_1_7', test_config) + + failures_test_event_trigger = run_test(TestEventTriggersCheck, ['test_TestEventTriggersCheck'], test_config) + + # [] means all tests. + failures_dcl = run_test(DclCheck, [], test_config) + + report = [] + for test, failure in failures_DA_1_2.items(): + # Check for known failures first + # step 6.9 - non-production CD + # 9 - not signed by CSA CA + # other steps - should have been caught in cert, but we should report none the less + if failure.step.startswith('6.9'): + report.append('Device is using a non-production certification declaration') + elif failure.step.startswith('9'): + report.append('Device is using a certification declaration that was not signed by the CSA CA') + else: + report.append(f'Device attestation failure: TC-DA-1.2: {failure.step}') + report.append(f'\t{str(failure.exception)}\n') + + for test, failure in failures_DA_1_7.items(): + # Notable failures in DA-1.7: + # 1.3 - PAI signature does not chain to a PAA in the main net DCL + if failure.step.startswith('1.3'): + report.append('Device DAC chain does not chain to a PAA in the main net DCL') + else: + report.append(f'Device attestation failure: TC-DA-1.7: {failure.step}') + report.append(f'\t{str(failure.exception)}\n') + + for test, failure in failures_test_event_trigger.items(): + # only one possible failure here + report.append('Device has test event triggers enabled in production') + report.append(f'\t{str(failure.exception)}\n') + + for test, failure in failures_dcl.items(): + if test == 'test_Vendor': + report.append('Device vendor ID is not present in the DCL') + elif test == 'test_Model': + report.append('Device model is not present in the DCL') + elif test == 'test_Compliance': + report.append('Device compliance information is not present in the DCL') + elif test == 'test_CertifiedModel': + report.append('Device certified model is not present in the DCL') + elif test == 'test_AllSoftwareVersions': + report.append('Problems with device software version in the DCL') + else: + report.append(f'unknown DCL failure in test {test}: {failure.step}') + report.append(f'\t{str(failure.exception)}\n') + + print('\n\n\n') + if report: + print('TEST FAILED:') + for s in report: + print(f'\t{s}') + return 1 + else: + print('TEST PASSED!') + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From eeac38f492b35d13fa1e940eedda458206b45692 Mon Sep 17 00:00:00 2001 From: bakreanuj <85306569+bakreanuj@users.noreply.github.com> Date: Tue, 18 Jun 2024 10:34:05 -0700 Subject: [PATCH 02/28] Add battery support to AQ sensor and update default values for concentration measurements. (#33813) --- .../common/chef-concentration-measurement.cpp | 120 +++--- ...ootnode_airqualitysensor_e63187f6c9.matter | 284 ++++++++++++++ .../rootnode_airqualitysensor_e63187f6c9.zap | 349 +++++++++++++++++- 3 files changed, 692 insertions(+), 61 deletions(-) diff --git a/examples/chef/common/chef-concentration-measurement.cpp b/examples/chef/common/chef-concentration-measurement.cpp index 2d8b65ba2cad19..f0b8109bdf9eda 100644 --- a/examples/chef/common/chef-concentration-measurement.cpp +++ b/examples/chef/common/chef-concentration-measurement.cpp @@ -189,17 +189,17 @@ Protocols::InteractionModel::Status chefConcentrationMeasurementReadCallback(chi void emberAfCarbonMonoxideConcentrationMeasurementClusterInitCallback(EndpointId endpoint) { gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( - EndpointId(endpoint), CarbonMonoxideConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpb); + EndpointId(endpoint), CarbonMonoxideConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(401.0f)); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(50.0f)); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1500.0f)); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(511.0f)); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(10.0f)); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(12.0f)); gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(213.0f)); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(10.0f)); gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); - gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kHigh); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(1.0f); + gCarbonMonoxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -209,15 +209,15 @@ void emberAfCarbonDioxideConcentrationMeasurementClusterInitCallback(EndpointId gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), CarbonDioxideConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(458.0f)); - gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(300.0f)); - gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(2000.0f)); + gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(426.0f)); + gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(523.0f)); gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(421.0f)); gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(5.0f); - gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kLow); + gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); + gCarbonDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -227,15 +227,15 @@ void emberAfNitrogenDioxideConcentrationMeasurementClusterInitCallback(EndpointI gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), NitrogenDioxideConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpb); gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(3.0f)); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(70.0f)); gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(150.0f)); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(3.0f)); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(120); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(3.0f)); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(120); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(1.0f); - gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kLow); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(138.0f)); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(97.5f)); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); + gNitrogenDioxideConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -245,15 +245,15 @@ void emberAfOzoneConcentrationMeasurementClusterInitCallback(EndpointId endpoint gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), OzoneConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(10.0f)); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(3.0f)); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(300.0f)); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(50.0f)); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(60.0f)); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(99.0f)); gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(20.0f)); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(72.0f)); gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(0.0f); - gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kLow); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); + gOzoneConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -263,14 +263,14 @@ void emberAfPm25ConcentrationMeasurementClusterInitCallback(EndpointId endpoint) gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), Pm25ConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kUgm3); gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(42.0f)); + gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(35.0f)); gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); - gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(400.0f)); - gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(90.0f)); + gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(50.0f)); gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(35.0f)); + gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(43.0f)); gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(4.0f); + gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(1.0f); gPm25ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -281,14 +281,14 @@ void emberAfFormaldehydeConcentrationMeasurementClusterInitCallback(EndpointId e gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), FormaldehydeConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kMgm3); gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(10.0f)); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(0.0f)); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(200.0f)); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(10.0f)); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(40.0f)); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(88.0f)); gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(7200); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(2.0f)); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(40.0f)); gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(7200); - gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(0.0f); + gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(1.0f); gFormaldehydeConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -297,17 +297,17 @@ void emberAfFormaldehydeConcentrationMeasurementClusterInitCallback(EndpointId e void emberAfPm1ConcentrationMeasurementClusterInitCallback(EndpointId endpoint) { gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( - EndpointId(endpoint), Pm1ConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kUgm3); + EndpointId(endpoint), Pm1ConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(39.0f)); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(200.0f)); gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(400.0f)); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(70.0f)); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(430.0f)); gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(41.0f)); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(270.0f)); gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(4.0f); - gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kLow); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); + gPm1ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -315,17 +315,17 @@ void emberAfPm1ConcentrationMeasurementClusterInitCallback(EndpointId endpoint) void emberAfPm10ConcentrationMeasurementClusterInitCallback(EndpointId endpoint) { gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( - EndpointId(endpoint), Pm10ConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpt); + EndpointId(endpoint), Pm10ConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(7.0f)); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(2.0f)); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(400.0f)); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(49.0f)); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(50.0f)); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(81.0f)); gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(43.0f)); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(67.0f)); gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(10.0f); - gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kLow); + gPm10ConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif @@ -335,15 +335,15 @@ void emberAfRadonConcentrationMeasurementClusterInitCallback(EndpointId endpoint gRadonConcentrationMeasurementInstance[EndpointId(endpoint)] = new Instance( EndpointId(endpoint), RadonConcentrationMeasurement::Id, MeasurementMediumEnum::kAir, MeasurementUnitEnum::kPpm); gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->Init(); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(10.0f)); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(5.0f)); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(100.0f)); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(36.0f)); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMeasuredValue(MakeNullable(100.0f)); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMinMeasuredValue(MakeNullable(1.0f)); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetMaxMeasuredValue(MakeNullable(1000.0f)); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValue(MakeNullable(150.0f)); gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetPeakMeasuredValueWindow(3600); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(20.0f)); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValue(MakeNullable(120.0f)); gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetAverageMeasuredValueWindow(3600); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(0.0f); - gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kHigh); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetUncertainty(1.0f); + gRadonConcentrationMeasurementInstance[EndpointId(endpoint)]->SetLevelValue(LevelValueEnum::kMedium); } #endif diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter index aec256eb71b9eb..2dab6c7a1a71df 100644 --- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter +++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter @@ -471,6 +471,265 @@ cluster TimeFormatLocalization = 44 { readonly attribute int16u clusterRevision = 65533; } +/** This cluster is used to describe the configuration and capabilities of a physical power source that provides power to the Node. */ +cluster PowerSource = 47 { + revision 1; // NOTE: Default/not specifically set + + enum BatApprovedChemistryEnum : enum16 { + kUnspecified = 0; + kAlkaline = 1; + kLithiumCarbonFluoride = 2; + kLithiumChromiumOxide = 3; + kLithiumCopperOxide = 4; + kLithiumIronDisulfide = 5; + kLithiumManganeseDioxide = 6; + kLithiumThionylChloride = 7; + kMagnesium = 8; + kMercuryOxide = 9; + kNickelOxyhydride = 10; + kSilverOxide = 11; + kZincAir = 12; + kZincCarbon = 13; + kZincChloride = 14; + kZincManganeseDioxide = 15; + kLeadAcid = 16; + kLithiumCobaltOxide = 17; + kLithiumIon = 18; + kLithiumIonPolymer = 19; + kLithiumIronPhosphate = 20; + kLithiumSulfur = 21; + kLithiumTitanate = 22; + kNickelCadmium = 23; + kNickelHydrogen = 24; + kNickelIron = 25; + kNickelMetalHydride = 26; + kNickelZinc = 27; + kSilverZinc = 28; + kSodiumIon = 29; + kSodiumSulfur = 30; + kZincBromide = 31; + kZincCerium = 32; + } + + enum BatChargeFaultEnum : enum8 { + kUnspecified = 0; + kAmbientTooHot = 1; + kAmbientTooCold = 2; + kBatteryTooHot = 3; + kBatteryTooCold = 4; + kBatteryAbsent = 5; + kBatteryOverVoltage = 6; + kBatteryUnderVoltage = 7; + kChargerOverVoltage = 8; + kChargerUnderVoltage = 9; + kSafetyTimeout = 10; + } + + enum BatChargeLevelEnum : enum8 { + kOK = 0; + kWarning = 1; + kCritical = 2; + } + + enum BatChargeStateEnum : enum8 { + kUnknown = 0; + kIsCharging = 1; + kIsAtFullCharge = 2; + kIsNotCharging = 3; + } + + enum BatCommonDesignationEnum : enum16 { + kUnspecified = 0; + kAAA = 1; + kAA = 2; + kC = 3; + kD = 4; + k4v5 = 5; + k6v0 = 6; + k9v0 = 7; + k12AA = 8; + kAAAA = 9; + kA = 10; + kB = 11; + kF = 12; + kN = 13; + kNo6 = 14; + kSubC = 15; + kA23 = 16; + kA27 = 17; + kBA5800 = 18; + kDuplex = 19; + k4SR44 = 20; + k523 = 21; + k531 = 22; + k15v0 = 23; + k22v5 = 24; + k30v0 = 25; + k45v0 = 26; + k67v5 = 27; + kJ = 28; + kCR123A = 29; + kCR2 = 30; + k2CR5 = 31; + kCRP2 = 32; + kCRV3 = 33; + kSR41 = 34; + kSR43 = 35; + kSR44 = 36; + kSR45 = 37; + kSR48 = 38; + kSR54 = 39; + kSR55 = 40; + kSR57 = 41; + kSR58 = 42; + kSR59 = 43; + kSR60 = 44; + kSR63 = 45; + kSR64 = 46; + kSR65 = 47; + kSR66 = 48; + kSR67 = 49; + kSR68 = 50; + kSR69 = 51; + kSR516 = 52; + kSR731 = 53; + kSR712 = 54; + kLR932 = 55; + kA5 = 56; + kA10 = 57; + kA13 = 58; + kA312 = 59; + kA675 = 60; + kAC41E = 61; + k10180 = 62; + k10280 = 63; + k10440 = 64; + k14250 = 65; + k14430 = 66; + k14500 = 67; + k14650 = 68; + k15270 = 69; + k16340 = 70; + kRCR123A = 71; + k17500 = 72; + k17670 = 73; + k18350 = 74; + k18500 = 75; + k18650 = 76; + k19670 = 77; + k25500 = 78; + k26650 = 79; + k32600 = 80; + } + + enum BatFaultEnum : enum8 { + kUnspecified = 0; + kOverTemp = 1; + kUnderTemp = 2; + } + + enum BatReplaceabilityEnum : enum8 { + kUnspecified = 0; + kNotReplaceable = 1; + kUserReplaceable = 2; + kFactoryReplaceable = 3; + } + + enum PowerSourceStatusEnum : enum8 { + kUnspecified = 0; + kActive = 1; + kStandby = 2; + kUnavailable = 3; + } + + enum WiredCurrentTypeEnum : enum8 { + kAC = 0; + kDC = 1; + } + + enum WiredFaultEnum : enum8 { + kUnspecified = 0; + kOverVoltage = 1; + kUnderVoltage = 2; + } + + bitmap Feature : bitmap32 { + kWired = 0x1; + kBattery = 0x2; + kRechargeable = 0x4; + kReplaceable = 0x8; + } + + struct BatChargeFaultChangeType { + BatChargeFaultEnum current[] = 0; + BatChargeFaultEnum previous[] = 1; + } + + struct BatFaultChangeType { + BatFaultEnum current[] = 0; + BatFaultEnum previous[] = 1; + } + + struct WiredFaultChangeType { + WiredFaultEnum current[] = 0; + WiredFaultEnum previous[] = 1; + } + + info event WiredFaultChange = 0 { + WiredFaultEnum current[] = 0; + WiredFaultEnum previous[] = 1; + } + + info event BatFaultChange = 1 { + BatFaultEnum current[] = 0; + BatFaultEnum previous[] = 1; + } + + info event BatChargeFaultChange = 2 { + BatChargeFaultEnum current[] = 0; + BatChargeFaultEnum previous[] = 1; + } + + readonly attribute PowerSourceStatusEnum status = 0; + readonly attribute int8u order = 1; + readonly attribute char_string<60> description = 2; + readonly attribute optional nullable int32u wiredAssessedInputVoltage = 3; + readonly attribute optional nullable int16u wiredAssessedInputFrequency = 4; + readonly attribute optional WiredCurrentTypeEnum wiredCurrentType = 5; + readonly attribute optional nullable int32u wiredAssessedCurrent = 6; + readonly attribute optional int32u wiredNominalVoltage = 7; + readonly attribute optional int32u wiredMaximumCurrent = 8; + readonly attribute optional boolean wiredPresent = 9; + readonly attribute optional WiredFaultEnum activeWiredFaults[] = 10; + readonly attribute optional nullable int32u batVoltage = 11; + readonly attribute optional nullable int8u batPercentRemaining = 12; + readonly attribute optional nullable int32u batTimeRemaining = 13; + readonly attribute optional BatChargeLevelEnum batChargeLevel = 14; + readonly attribute optional boolean batReplacementNeeded = 15; + readonly attribute optional BatReplaceabilityEnum batReplaceability = 16; + readonly attribute optional boolean batPresent = 17; + readonly attribute optional BatFaultEnum activeBatFaults[] = 18; + readonly attribute optional char_string<60> batReplacementDescription = 19; + readonly attribute optional BatCommonDesignationEnum batCommonDesignation = 20; + readonly attribute optional char_string<20> batANSIDesignation = 21; + readonly attribute optional char_string<20> batIECDesignation = 22; + readonly attribute optional BatApprovedChemistryEnum batApprovedChemistry = 23; + readonly attribute optional int32u batCapacity = 24; + readonly attribute optional int8u batQuantity = 25; + readonly attribute optional BatChargeStateEnum batChargeState = 26; + readonly attribute optional nullable int32u batTimeToFullCharge = 27; + readonly attribute optional boolean batFunctionalWhileCharging = 28; + readonly attribute optional nullable int32u batChargingCurrent = 29; + readonly attribute optional BatChargeFaultEnum activeBatChargeFaults[] = 30; + readonly attribute endpoint_no endpointList[] = 31; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + /** This cluster is used to manage global aspects of the Commissioning flow. */ cluster GeneralCommissioning = 48 { revision 1; // NOTE: Default/not specifically set @@ -2087,6 +2346,31 @@ endpoint 1 { callback attribute clusterRevision; } + server cluster PowerSource { + emits event BatFaultChange; + emits event BatChargeFaultChange; + ram attribute status default = 1; + ram attribute order default = 1; + ram attribute description default = "Primary Battery"; + ram attribute batVoltage default = 4100; + ram attribute batPercentRemaining default = 95; + ram attribute batTimeRemaining default = 5184000; + ram attribute batChargeLevel default = 0; + ram attribute batReplacementNeeded default = 0; + ram attribute batReplaceability default = 1; + ram attribute batPresent default = 1; + ram attribute batCapacity default = 350; + ram attribute batChargeState default = 4; + ram attribute batFunctionalWhileCharging default = 1; + callback attribute endpointList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0x06; + ram attribute clusterRevision default = 1; + } + server cluster AirQuality { callback attribute airQuality; callback attribute generatedCommandList; diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap index f01777ec884313..13eb05e1675f81 100644 --- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap +++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 102, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -2770,6 +2771,352 @@ } ] }, + { + "name": "Power Source", + "code": 47, + "mfgCode": null, + "define": "POWER_SOURCE_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Status", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "PowerSourceStatusEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Order", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Description", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "Primary Battery", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatVoltage", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4100", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatPercentRemaining", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "95", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatTimeRemaining", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5184000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatChargeLevel", + "code": 14, + "mfgCode": null, + "side": "server", + "type": "BatChargeLevelEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatReplacementNeeded", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatReplaceability", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "BatReplaceabilityEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatPresent", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatCapacity", + "code": 24, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "350", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatChargeState", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "BatChargeStateEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BatFunctionalWhileCharging", + "code": 28, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EndpointList", + "code": 31, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x06", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "BatFaultChange", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "BatChargeFaultChange", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, { "name": "Air Quality", "code": 91, From a39c62e29e7c877aeb9baab819caeec15fb8558b Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Tue, 18 Jun 2024 14:23:19 -0400 Subject: [PATCH 03/28] Fix GRPKEY cluster in PICSGenerator (#33963) * Fix GRPKEY cluster in PICSGenerator - Group Key Management cluster was incorrectly mapped, leading to errors. This PR: - Fixes the mapping of GroupKeyManagement cluster Testing done: - Ran PICSGenerator against my product after changes, got no error where there previously was one. * Fix formatting, address review comment --------- Co-authored-by: Andrei Litvin --- src/tools/PICS-generator/PICSGenerator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/PICS-generator/PICSGenerator.py b/src/tools/PICS-generator/PICSGenerator.py index 2a3f3613274245..4fd51033cc1eba 100644 --- a/src/tools/PICS-generator/PICSGenerator.py +++ b/src/tools/PICS-generator/PICSGenerator.py @@ -50,7 +50,7 @@ def GenerateDevicePicsXmlFiles(clusterName, clusterPicsCode, featurePicsList, at elif "On/Off" == clusterName: clusterName = clusterName.replace("/", "-") - elif "Group Key Management" == clusterName: + elif "GroupKeyManagement" == clusterName: clusterName = "Group Communication" elif "Wake On LAN" == clusterName or "Low Power" == clusterName: From 1cbb1090ae0a0e5cf49bd36ab2441886448ab03d Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Tue, 18 Jun 2024 15:26:41 -0400 Subject: [PATCH 04/28] Update boringssl to 9cac8a6b38c1cbd45c77aee108411d588da006fe (#33965) * Update boringssl to 9cac8a6b38c1cbd45c77aee108411d588da006fe Problem: - BoringSSL needed to be updated since it's been a while This PR: - Updates BoringSSL to master as of June 12, 2024 - SHA 9cac8a6b38c1cbd45c77aee108411d588da006fe Testing done: - Full unit test suite still passes - chip-tool pairing passes - Python tests pass when built with BoringSSL * Add newline to kick push * Remove newline to kick push --- .gitmodules | 1 + .../boringssl/repo/BUILD.generated.gni | 629 ++++--- .../boringssl/repo/BUILD.generated_tests.gni | 1561 ++++++++++++++++- third_party/boringssl/repo/src | 2 +- 4 files changed, 1932 insertions(+), 261 deletions(-) diff --git a/.gitmodules b/.gitmodules index 55d44f9dba9e9f..b2e1bc8d4ebd98 100644 --- a/.gitmodules +++ b/.gitmodules @@ -252,6 +252,7 @@ [submodule "third_party/boringssl/repo/src"] path = third_party/boringssl/repo/src url = https://github.com/google/boringssl.git + branch = master [submodule "third_party/mt793x_sdk/filogic"] path = third_party/mt793x_sdk/filogic url = https://github.com/MediaTek-Labs/genio-matter-bsp.git diff --git a/third_party/boringssl/repo/BUILD.generated.gni b/third_party/boringssl/repo/BUILD.generated.gni index 04a98f7c776acd..7135993132e880 100644 --- a/third_party/boringssl/repo/BUILD.generated.gni +++ b/third_party/boringssl/repo/BUILD.generated.gni @@ -1,11 +1,20 @@ -# Copyright (c) 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. +# Copyright (c) 2015, Google Inc. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # This file is created by generate_build_files.py. Do not edit manually. crypto_sources = [ - "err_data.c", "src/crypto/asn1/a_bitstr.c", "src/crypto/asn1/a_bool.c", "src/crypto/asn1/a_d2i_fp.c", @@ -16,30 +25,29 @@ crypto_sources = [ "src/crypto/asn1/a_mbstr.c", "src/crypto/asn1/a_object.c", "src/crypto/asn1/a_octet.c", - "src/crypto/asn1/a_print.c", "src/crypto/asn1/a_strex.c", "src/crypto/asn1/a_strnid.c", "src/crypto/asn1/a_time.c", "src/crypto/asn1/a_type.c", "src/crypto/asn1/a_utctm.c", - "src/crypto/asn1/a_utf8.c", "src/crypto/asn1/asn1_lib.c", "src/crypto/asn1/asn1_par.c", "src/crypto/asn1/asn_pack.c", "src/crypto/asn1/f_int.c", "src/crypto/asn1/f_string.c", "src/crypto/asn1/internal.h", + "src/crypto/asn1/posix_time.c", "src/crypto/asn1/tasn_dec.c", "src/crypto/asn1/tasn_enc.c", "src/crypto/asn1/tasn_fre.c", "src/crypto/asn1/tasn_new.c", "src/crypto/asn1/tasn_typ.c", "src/crypto/asn1/tasn_utl.c", - "src/crypto/asn1/time_support.c", "src/crypto/base64/base64.c", "src/crypto/bio/bio.c", "src/crypto/bio/bio_mem.c", "src/crypto/bio/connect.c", + "src/crypto/bio/errno.c", "src/crypto/bio/fd.c", "src/crypto/bio/file.c", "src/crypto/bio/hexdump.c", @@ -73,19 +81,20 @@ crypto_sources = [ "src/crypto/cipher_extra/internal.h", "src/crypto/cipher_extra/tls_cbc.c", "src/crypto/conf/conf.c", - "src/crypto/conf/conf_def.h", "src/crypto/conf/internal.h", "src/crypto/cpu_aarch64_apple.c", "src/crypto/cpu_aarch64_fuchsia.c", "src/crypto/cpu_aarch64_linux.c", + "src/crypto/cpu_aarch64_openbsd.c", + "src/crypto/cpu_aarch64_sysreg.c", "src/crypto/cpu_aarch64_win.c", - "src/crypto/cpu_arm.c", + "src/crypto/cpu_arm_freebsd.c", "src/crypto/cpu_arm_linux.c", "src/crypto/cpu_arm_linux.h", "src/crypto/cpu_intel.c", - "src/crypto/cpu_ppc64le.c", "src/crypto/crypto.c", "src/crypto/curve25519/curve25519.c", + "src/crypto/curve25519/curve25519_64_adx.c", "src/crypto/curve25519/curve25519_tables.h", "src/crypto/curve25519/internal.h", "src/crypto/curve25519/spake25519.c", @@ -94,6 +103,8 @@ crypto_sources = [ "src/crypto/dh_extra/dh_asn1.c", "src/crypto/dh_extra/params.c", "src/crypto/digest_extra/digest_extra.c", + "src/crypto/dilithium/dilithium.c", + "src/crypto/dilithium/internal.h", "src/crypto/dsa/dsa.c", "src/crypto/dsa/dsa_asn1.c", "src/crypto/dsa/internal.h", @@ -110,6 +121,8 @@ crypto_sources = [ "src/crypto/evp/evp_asn1.c", "src/crypto/evp/evp_ctx.c", "src/crypto/evp/internal.h", + "src/crypto/evp/p_dh.c", + "src/crypto/evp/p_dh_asn1.c", "src/crypto/evp/p_dsa_asn1.c", "src/crypto/evp/p_ec.c", "src/crypto/evp/p_ec_asn1.c", @@ -134,6 +147,7 @@ crypto_sources = [ "src/crypto/fipsmodule/dh/internal.h", "src/crypto/fipsmodule/digest/internal.h", "src/crypto/fipsmodule/digest/md32_common.h", + "src/crypto/fipsmodule/ec/builtin_curves.h", "src/crypto/fipsmodule/ec/internal.h", "src/crypto/fipsmodule/ec/p256-nistz-table.h", "src/crypto/fipsmodule/ec/p256-nistz.h", @@ -149,11 +163,14 @@ crypto_sources = [ "src/crypto/fipsmodule/service_indicator/internal.h", "src/crypto/fipsmodule/sha/internal.h", "src/crypto/fipsmodule/tls/internal.h", - "src/crypto/hkdf/hkdf.c", "src/crypto/hpke/hpke.c", "src/crypto/hrss/hrss.c", "src/crypto/hrss/internal.h", "src/crypto/internal.h", + "src/crypto/keccak/internal.h", + "src/crypto/keccak/keccak.c", + "src/crypto/kyber/internal.h", + "src/crypto/kyber/kyber.c", "src/crypto/lhash/internal.h", "src/crypto/lhash/lhash.c", "src/crypto/mem.c", @@ -183,16 +200,33 @@ crypto_sources = [ "src/crypto/pool/pool.c", "src/crypto/rand_extra/deterministic.c", "src/crypto/rand_extra/forkunsafe.c", - "src/crypto/rand_extra/fuchsia.c", + "src/crypto/rand_extra/getentropy.c", + "src/crypto/rand_extra/ios.c", "src/crypto/rand_extra/passive.c", "src/crypto/rand_extra/rand_extra.c", + "src/crypto/rand_extra/trusty.c", "src/crypto/rand_extra/windows.c", "src/crypto/rc4/rc4.c", - "src/crypto/refcount_c11.c", - "src/crypto/refcount_lock.c", + "src/crypto/refcount.c", + "src/crypto/rsa_extra/internal.h", "src/crypto/rsa_extra/rsa_asn1.c", + "src/crypto/rsa_extra/rsa_crypt.c", "src/crypto/rsa_extra/rsa_print.c", "src/crypto/siphash/siphash.c", + "src/crypto/spx/address.c", + "src/crypto/spx/address.h", + "src/crypto/spx/fors.c", + "src/crypto/spx/fors.h", + "src/crypto/spx/merkle.c", + "src/crypto/spx/merkle.h", + "src/crypto/spx/params.h", + "src/crypto/spx/spx.c", + "src/crypto/spx/spx_util.c", + "src/crypto/spx/spx_util.h", + "src/crypto/spx/thash.c", + "src/crypto/spx/thash.h", + "src/crypto/spx/wots.c", + "src/crypto/spx/wots.h", "src/crypto/stack/stack.c", "src/crypto/thread.c", "src/crypto/thread_none.c", @@ -209,14 +243,39 @@ crypto_sources = [ "src/crypto/x509/asn1_gen.c", "src/crypto/x509/by_dir.c", "src/crypto/x509/by_file.c", + "src/crypto/x509/ext_dat.h", "src/crypto/x509/i2d_pr.c", "src/crypto/x509/internal.h", "src/crypto/x509/name_print.c", + "src/crypto/x509/policy.c", "src/crypto/x509/rsa_pss.c", "src/crypto/x509/t_crl.c", "src/crypto/x509/t_req.c", "src/crypto/x509/t_x509.c", "src/crypto/x509/t_x509a.c", + "src/crypto/x509/v3_akey.c", + "src/crypto/x509/v3_akeya.c", + "src/crypto/x509/v3_alt.c", + "src/crypto/x509/v3_bcons.c", + "src/crypto/x509/v3_bitst.c", + "src/crypto/x509/v3_conf.c", + "src/crypto/x509/v3_cpols.c", + "src/crypto/x509/v3_crld.c", + "src/crypto/x509/v3_enum.c", + "src/crypto/x509/v3_extku.c", + "src/crypto/x509/v3_genn.c", + "src/crypto/x509/v3_ia5.c", + "src/crypto/x509/v3_info.c", + "src/crypto/x509/v3_int.c", + "src/crypto/x509/v3_lib.c", + "src/crypto/x509/v3_ncons.c", + "src/crypto/x509/v3_ocsp.c", + "src/crypto/x509/v3_pcons.c", + "src/crypto/x509/v3_pmaps.c", + "src/crypto/x509/v3_prn.c", + "src/crypto/x509/v3_purp.c", + "src/crypto/x509/v3_skey.c", + "src/crypto/x509/v3_utl.c", "src/crypto/x509/x509.c", "src/crypto/x509/x509_att.c", "src/crypto/x509/x509_cmp.c", @@ -241,9 +300,7 @@ crypto_sources = [ "src/crypto/x509/x_attrib.c", "src/crypto/x509/x_crl.c", "src/crypto/x509/x_exten.c", - "src/crypto/x509/x_info.c", "src/crypto/x509/x_name.c", - "src/crypto/x509/x_pkey.c", "src/crypto/x509/x_pubkey.c", "src/crypto/x509/x_req.c", "src/crypto/x509/x_sig.c", @@ -251,49 +308,186 @@ crypto_sources = [ "src/crypto/x509/x_val.c", "src/crypto/x509/x_x509.c", "src/crypto/x509/x_x509a.c", - "src/crypto/x509v3/ext_dat.h", - "src/crypto/x509v3/internal.h", - "src/crypto/x509v3/pcy_cache.c", - "src/crypto/x509v3/pcy_data.c", - "src/crypto/x509v3/pcy_lib.c", - "src/crypto/x509v3/pcy_map.c", - "src/crypto/x509v3/pcy_node.c", - "src/crypto/x509v3/pcy_tree.c", - "src/crypto/x509v3/v3_akey.c", - "src/crypto/x509v3/v3_akeya.c", - "src/crypto/x509v3/v3_alt.c", - "src/crypto/x509v3/v3_bcons.c", - "src/crypto/x509v3/v3_bitst.c", - "src/crypto/x509v3/v3_conf.c", - "src/crypto/x509v3/v3_cpols.c", - "src/crypto/x509v3/v3_crld.c", - "src/crypto/x509v3/v3_enum.c", - "src/crypto/x509v3/v3_extku.c", - "src/crypto/x509v3/v3_genn.c", - "src/crypto/x509v3/v3_ia5.c", - "src/crypto/x509v3/v3_info.c", - "src/crypto/x509v3/v3_int.c", - "src/crypto/x509v3/v3_lib.c", - "src/crypto/x509v3/v3_ncons.c", - "src/crypto/x509v3/v3_ocsp.c", - "src/crypto/x509v3/v3_pci.c", - "src/crypto/x509v3/v3_pcia.c", - "src/crypto/x509v3/v3_pcons.c", - "src/crypto/x509v3/v3_pmaps.c", - "src/crypto/x509v3/v3_prn.c", - "src/crypto/x509v3/v3_purp.c", - "src/crypto/x509v3/v3_skey.c", - "src/crypto/x509v3/v3_utl.c", + "src/gen/crypto/err_data.c", "src/third_party/fiat/curve25519_32.h", "src/third_party/fiat/curve25519_64.h", + "src/third_party/fiat/curve25519_64_adx.h", + "src/third_party/fiat/curve25519_64_msvc.h", "src/third_party/fiat/p256_32.h", "src/third_party/fiat/p256_64.h", + "src/third_party/fiat/p256_64_msvc.h", +] + +crypto_sources_asm = [ + "src/crypto/curve25519/asm/x25519-asm-arm.S", + "src/crypto/hrss/asm/poly_rq_mul.S", + "src/crypto/poly1305/poly1305_arm_asm.S", + "src/gen/bcm/aesni-gcm-x86_64-apple.S", + "src/gen/bcm/aesni-gcm-x86_64-linux.S", + "src/gen/bcm/aesni-x86-apple.S", + "src/gen/bcm/aesni-x86-linux.S", + "src/gen/bcm/aesni-x86_64-apple.S", + "src/gen/bcm/aesni-x86_64-linux.S", + "src/gen/bcm/aesv8-armv7-linux.S", + "src/gen/bcm/aesv8-armv8-apple.S", + "src/gen/bcm/aesv8-armv8-linux.S", + "src/gen/bcm/aesv8-armv8-win.S", + "src/gen/bcm/aesv8-gcm-armv8-apple.S", + "src/gen/bcm/aesv8-gcm-armv8-linux.S", + "src/gen/bcm/aesv8-gcm-armv8-win.S", + "src/gen/bcm/armv4-mont-linux.S", + "src/gen/bcm/armv8-mont-apple.S", + "src/gen/bcm/armv8-mont-linux.S", + "src/gen/bcm/armv8-mont-win.S", + "src/gen/bcm/bn-586-apple.S", + "src/gen/bcm/bn-586-linux.S", + "src/gen/bcm/bn-armv8-apple.S", + "src/gen/bcm/bn-armv8-linux.S", + "src/gen/bcm/bn-armv8-win.S", + "src/gen/bcm/bsaes-armv7-linux.S", + "src/gen/bcm/co-586-apple.S", + "src/gen/bcm/co-586-linux.S", + "src/gen/bcm/ghash-armv4-linux.S", + "src/gen/bcm/ghash-neon-armv8-apple.S", + "src/gen/bcm/ghash-neon-armv8-linux.S", + "src/gen/bcm/ghash-neon-armv8-win.S", + "src/gen/bcm/ghash-ssse3-x86-apple.S", + "src/gen/bcm/ghash-ssse3-x86-linux.S", + "src/gen/bcm/ghash-ssse3-x86_64-apple.S", + "src/gen/bcm/ghash-ssse3-x86_64-linux.S", + "src/gen/bcm/ghash-x86-apple.S", + "src/gen/bcm/ghash-x86-linux.S", + "src/gen/bcm/ghash-x86_64-apple.S", + "src/gen/bcm/ghash-x86_64-linux.S", + "src/gen/bcm/ghashv8-armv7-linux.S", + "src/gen/bcm/ghashv8-armv8-apple.S", + "src/gen/bcm/ghashv8-armv8-linux.S", + "src/gen/bcm/ghashv8-armv8-win.S", + "src/gen/bcm/md5-586-apple.S", + "src/gen/bcm/md5-586-linux.S", + "src/gen/bcm/md5-x86_64-apple.S", + "src/gen/bcm/md5-x86_64-linux.S", + "src/gen/bcm/p256-armv8-asm-apple.S", + "src/gen/bcm/p256-armv8-asm-linux.S", + "src/gen/bcm/p256-armv8-asm-win.S", + "src/gen/bcm/p256-x86_64-asm-apple.S", + "src/gen/bcm/p256-x86_64-asm-linux.S", + "src/gen/bcm/p256_beeu-armv8-asm-apple.S", + "src/gen/bcm/p256_beeu-armv8-asm-linux.S", + "src/gen/bcm/p256_beeu-armv8-asm-win.S", + "src/gen/bcm/p256_beeu-x86_64-asm-apple.S", + "src/gen/bcm/p256_beeu-x86_64-asm-linux.S", + "src/gen/bcm/rdrand-x86_64-apple.S", + "src/gen/bcm/rdrand-x86_64-linux.S", + "src/gen/bcm/rsaz-avx2-apple.S", + "src/gen/bcm/rsaz-avx2-linux.S", + "src/gen/bcm/sha1-586-apple.S", + "src/gen/bcm/sha1-586-linux.S", + "src/gen/bcm/sha1-armv4-large-linux.S", + "src/gen/bcm/sha1-armv8-apple.S", + "src/gen/bcm/sha1-armv8-linux.S", + "src/gen/bcm/sha1-armv8-win.S", + "src/gen/bcm/sha1-x86_64-apple.S", + "src/gen/bcm/sha1-x86_64-linux.S", + "src/gen/bcm/sha256-586-apple.S", + "src/gen/bcm/sha256-586-linux.S", + "src/gen/bcm/sha256-armv4-linux.S", + "src/gen/bcm/sha256-armv8-apple.S", + "src/gen/bcm/sha256-armv8-linux.S", + "src/gen/bcm/sha256-armv8-win.S", + "src/gen/bcm/sha256-x86_64-apple.S", + "src/gen/bcm/sha256-x86_64-linux.S", + "src/gen/bcm/sha512-586-apple.S", + "src/gen/bcm/sha512-586-linux.S", + "src/gen/bcm/sha512-armv4-linux.S", + "src/gen/bcm/sha512-armv8-apple.S", + "src/gen/bcm/sha512-armv8-linux.S", + "src/gen/bcm/sha512-armv8-win.S", + "src/gen/bcm/sha512-x86_64-apple.S", + "src/gen/bcm/sha512-x86_64-linux.S", + "src/gen/bcm/vpaes-armv7-linux.S", + "src/gen/bcm/vpaes-armv8-apple.S", + "src/gen/bcm/vpaes-armv8-linux.S", + "src/gen/bcm/vpaes-armv8-win.S", + "src/gen/bcm/vpaes-x86-apple.S", + "src/gen/bcm/vpaes-x86-linux.S", + "src/gen/bcm/vpaes-x86_64-apple.S", + "src/gen/bcm/vpaes-x86_64-linux.S", + "src/gen/bcm/x86-mont-apple.S", + "src/gen/bcm/x86-mont-linux.S", + "src/gen/bcm/x86_64-mont-apple.S", + "src/gen/bcm/x86_64-mont-linux.S", + "src/gen/bcm/x86_64-mont5-apple.S", + "src/gen/bcm/x86_64-mont5-linux.S", + "src/gen/crypto/aes128gcmsiv-x86_64-apple.S", + "src/gen/crypto/aes128gcmsiv-x86_64-linux.S", + "src/gen/crypto/chacha-armv4-linux.S", + "src/gen/crypto/chacha-armv8-apple.S", + "src/gen/crypto/chacha-armv8-linux.S", + "src/gen/crypto/chacha-armv8-win.S", + "src/gen/crypto/chacha-x86-apple.S", + "src/gen/crypto/chacha-x86-linux.S", + "src/gen/crypto/chacha-x86_64-apple.S", + "src/gen/crypto/chacha-x86_64-linux.S", + "src/gen/crypto/chacha20_poly1305_armv8-apple.S", + "src/gen/crypto/chacha20_poly1305_armv8-linux.S", + "src/gen/crypto/chacha20_poly1305_armv8-win.S", + "src/gen/crypto/chacha20_poly1305_x86_64-apple.S", + "src/gen/crypto/chacha20_poly1305_x86_64-linux.S", + "src/gen/test_support/trampoline-armv4-linux.S", + "src/gen/test_support/trampoline-armv8-apple.S", + "src/gen/test_support/trampoline-armv8-linux.S", + "src/gen/test_support/trampoline-armv8-win.S", + "src/gen/test_support/trampoline-x86-apple.S", + "src/gen/test_support/trampoline-x86-linux.S", + "src/gen/test_support/trampoline-x86_64-apple.S", + "src/gen/test_support/trampoline-x86_64-linux.S", + "src/third_party/fiat/asm/fiat_curve25519_adx_mul.S", + "src/third_party/fiat/asm/fiat_curve25519_adx_square.S", + "src/third_party/fiat/asm/fiat_p256_adx_mul.S", + "src/third_party/fiat/asm/fiat_p256_adx_sqr.S", +] + +crypto_sources_nasm = [ + "src/gen/bcm/aesni-gcm-x86_64-win.asm", + "src/gen/bcm/aesni-x86-win.asm", + "src/gen/bcm/aesni-x86_64-win.asm", + "src/gen/bcm/bn-586-win.asm", + "src/gen/bcm/co-586-win.asm", + "src/gen/bcm/ghash-ssse3-x86-win.asm", + "src/gen/bcm/ghash-ssse3-x86_64-win.asm", + "src/gen/bcm/ghash-x86-win.asm", + "src/gen/bcm/ghash-x86_64-win.asm", + "src/gen/bcm/md5-586-win.asm", + "src/gen/bcm/md5-x86_64-win.asm", + "src/gen/bcm/p256-x86_64-asm-win.asm", + "src/gen/bcm/p256_beeu-x86_64-asm-win.asm", + "src/gen/bcm/rdrand-x86_64-win.asm", + "src/gen/bcm/rsaz-avx2-win.asm", + "src/gen/bcm/sha1-586-win.asm", + "src/gen/bcm/sha1-x86_64-win.asm", + "src/gen/bcm/sha256-586-win.asm", + "src/gen/bcm/sha256-x86_64-win.asm", + "src/gen/bcm/sha512-586-win.asm", + "src/gen/bcm/sha512-x86_64-win.asm", + "src/gen/bcm/vpaes-x86-win.asm", + "src/gen/bcm/vpaes-x86_64-win.asm", + "src/gen/bcm/x86-mont-win.asm", + "src/gen/bcm/x86_64-mont-win.asm", + "src/gen/bcm/x86_64-mont5-win.asm", + "src/gen/crypto/aes128gcmsiv-x86_64-win.asm", + "src/gen/crypto/chacha-x86-win.asm", + "src/gen/crypto/chacha-x86_64-win.asm", + "src/gen/crypto/chacha20_poly1305_x86_64-win.asm", + "src/gen/test_support/trampoline-x86-win.asm", + "src/gen/test_support/trampoline-x86_64-win.asm", ] crypto_headers = [ "src/include/openssl/aead.h", "src/include/openssl/aes.h", "src/include/openssl/arm_arch.h", + "src/include/openssl/asm_base.h", "src/include/openssl/asn1.h", "src/include/openssl/asn1_mac.h", "src/include/openssl/asn1t.h", @@ -313,6 +507,7 @@ crypto_headers = [ "src/include/openssl/conf.h", "src/include/openssl/cpu.h", "src/include/openssl/crypto.h", + "src/include/openssl/ctrdrbg.h", "src/include/openssl/curve25519.h", "src/include/openssl/des.h", "src/include/openssl/dh.h", @@ -328,6 +523,9 @@ crypto_headers = [ "src/include/openssl/evp.h", "src/include/openssl/evp_errors.h", "src/include/openssl/ex_data.h", + "src/include/openssl/experimental/dilithium.h", + "src/include/openssl/experimental/kyber.h", + "src/include/openssl/experimental/spx.h", "src/include/openssl/hkdf.h", "src/include/openssl/hmac.h", "src/include/openssl/hpke.h", @@ -351,6 +549,7 @@ crypto_headers = [ "src/include/openssl/pkcs8.h", "src/include/openssl/poly1305.h", "src/include/openssl/pool.h", + "src/include/openssl/posix_time.h", "src/include/openssl/rand.h", "src/include/openssl/rc4.h", "src/include/openssl/ripemd.h", @@ -361,12 +560,41 @@ crypto_headers = [ "src/include/openssl/siphash.h", "src/include/openssl/span.h", "src/include/openssl/stack.h", + "src/include/openssl/target.h", "src/include/openssl/thread.h", + "src/include/openssl/time.h", "src/include/openssl/trust_token.h", "src/include/openssl/type_check.h", "src/include/openssl/x509.h", "src/include/openssl/x509_vfy.h", "src/include/openssl/x509v3.h", + "src/include/openssl/x509v3_errors.h", +] + +rust_bssl_sys = [ "src/rust/bssl-sys/src/lib.rs" ] + +rust_bssl_crypto = [ + "src/rust/bssl-crypto/src/aead.rs", + "src/rust/bssl-crypto/src/aes.rs", + "src/rust/bssl-crypto/src/cipher/aes_cbc.rs", + "src/rust/bssl-crypto/src/cipher/aes_ctr.rs", + "src/rust/bssl-crypto/src/cipher/mod.rs", + "src/rust/bssl-crypto/src/digest.rs", + "src/rust/bssl-crypto/src/ec.rs", + "src/rust/bssl-crypto/src/ecdh.rs", + "src/rust/bssl-crypto/src/ecdsa.rs", + "src/rust/bssl-crypto/src/ed25519.rs", + "src/rust/bssl-crypto/src/hkdf.rs", + "src/rust/bssl-crypto/src/hmac.rs", + "src/rust/bssl-crypto/src/hpke.rs", + "src/rust/bssl-crypto/src/lib.rs", + "src/rust/bssl-crypto/src/macros.rs", + "src/rust/bssl-crypto/src/mem.rs", + "src/rust/bssl-crypto/src/rand.rs", + "src/rust/bssl-crypto/src/rsa.rs", + "src/rust/bssl-crypto/src/scoped.rs", + "src/rust/bssl-crypto/src/test_helpers.rs", + "src/rust/bssl-crypto/src/x25519.rs", ] ssl_sources = [ @@ -392,6 +620,7 @@ ssl_sources = [ "src/ssl/ssl_buffer.cc", "src/ssl/ssl_cert.cc", "src/ssl/ssl_cipher.cc", + "src/ssl/ssl_credential.cc", "src/ssl/ssl_file.cc", "src/ssl/ssl_key_share.cc", "src/ssl/ssl_lib.cc", @@ -418,6 +647,94 @@ ssl_headers = [ "src/include/openssl/tls1.h", ] +pki_sources = [ + "src/pki/cert_error_id.cc", + "src/pki/cert_error_params.cc", + "src/pki/cert_errors.cc", + "src/pki/cert_issuer_source_static.cc", + "src/pki/certificate.cc", + "src/pki/certificate_policies.cc", + "src/pki/common_cert_errors.cc", + "src/pki/crl.cc", + "src/pki/encode_values.cc", + "src/pki/extended_key_usage.cc", + "src/pki/general_names.cc", + "src/pki/input.cc", + "src/pki/ip_util.cc", + "src/pki/name_constraints.cc", + "src/pki/ocsp.cc", + "src/pki/ocsp_verify_result.cc", + "src/pki/parse_certificate.cc", + "src/pki/parse_name.cc", + "src/pki/parse_values.cc", + "src/pki/parsed_certificate.cc", + "src/pki/parser.cc", + "src/pki/path_builder.cc", + "src/pki/pem.cc", + "src/pki/revocation_util.cc", + "src/pki/signature_algorithm.cc", + "src/pki/simple_path_builder_delegate.cc", + "src/pki/string_util.cc", + "src/pki/trust_store.cc", + "src/pki/trust_store_collection.cc", + "src/pki/trust_store_in_memory.cc", + "src/pki/verify.cc", + "src/pki/verify_certificate_chain.cc", + "src/pki/verify_error.cc", + "src/pki/verify_name_match.cc", + "src/pki/verify_signed_data.cc", +] + +pki_internal_headers = [ + "src/pki/cert_error_id.h", + "src/pki/cert_error_params.h", + "src/pki/cert_errors.h", + "src/pki/cert_issuer_source.h", + "src/pki/cert_issuer_source_static.h", + "src/pki/cert_issuer_source_sync_unittest.h", + "src/pki/certificate_policies.h", + "src/pki/common_cert_errors.h", + "src/pki/crl.h", + "src/pki/encode_values.h", + "src/pki/extended_key_usage.h", + "src/pki/general_names.h", + "src/pki/input.h", + "src/pki/ip_util.h", + "src/pki/mock_signature_verify_cache.h", + "src/pki/name_constraints.h", + "src/pki/nist_pkits_unittest.h", + "src/pki/ocsp.h", + "src/pki/ocsp_revocation_status.h", + "src/pki/ocsp_verify_result.h", + "src/pki/parse_certificate.h", + "src/pki/parse_name.h", + "src/pki/parse_values.h", + "src/pki/parsed_certificate.h", + "src/pki/parser.h", + "src/pki/path_builder.h", + "src/pki/pem.h", + "src/pki/revocation_util.h", + "src/pki/signature_algorithm.h", + "src/pki/simple_path_builder_delegate.h", + "src/pki/string_util.h", + "src/pki/test_helpers.h", + "src/pki/testdata/nist-pkits/pkits_testcases-inl.h", + "src/pki/trust_store.h", + "src/pki/trust_store_collection.h", + "src/pki/trust_store_in_memory.h", + "src/pki/verify_certificate_chain.h", + "src/pki/verify_certificate_chain_typed_unittest.h", + "src/pki/verify_name_match.h", + "src/pki/verify_signed_data.h", +] + +pki_headers = [ + "src/include/openssl/pki/certificate.h", + "src/include/openssl/pki/signature_verify_cache.h", + "src/include/openssl/pki/verify.h", + "src/include/openssl/pki/verify_error.h", +] + tool_sources = [ "src/tool/args.cc", "src/tool/ciphers.cc", @@ -440,215 +757,28 @@ tool_sources = [ "src/tool/transport_common.h", ] -crypto_sources_apple_aarch64 = [ - "apple-aarch64/crypto/chacha/chacha-armv8.S", - "apple-aarch64/crypto/cipher_extra/chacha20_poly1305_armv8.S", - "apple-aarch64/crypto/fipsmodule/aesv8-armx64.S", - "apple-aarch64/crypto/fipsmodule/armv8-mont.S", - "apple-aarch64/crypto/fipsmodule/ghash-neon-armv8.S", - "apple-aarch64/crypto/fipsmodule/ghashv8-armx64.S", - "apple-aarch64/crypto/fipsmodule/p256-armv8-asm.S", - "apple-aarch64/crypto/fipsmodule/p256_beeu-armv8-asm.S", - "apple-aarch64/crypto/fipsmodule/sha1-armv8.S", - "apple-aarch64/crypto/fipsmodule/sha256-armv8.S", - "apple-aarch64/crypto/fipsmodule/sha512-armv8.S", - "apple-aarch64/crypto/fipsmodule/vpaes-armv8.S", - "apple-aarch64/crypto/test/trampoline-armv8.S", -] - -crypto_sources_apple_arm = [ - "apple-arm/crypto/chacha/chacha-armv4.S", - "apple-arm/crypto/fipsmodule/aesv8-armx32.S", - "apple-arm/crypto/fipsmodule/armv4-mont.S", - "apple-arm/crypto/fipsmodule/bsaes-armv7.S", - "apple-arm/crypto/fipsmodule/ghash-armv4.S", - "apple-arm/crypto/fipsmodule/ghashv8-armx32.S", - "apple-arm/crypto/fipsmodule/sha1-armv4-large.S", - "apple-arm/crypto/fipsmodule/sha256-armv4.S", - "apple-arm/crypto/fipsmodule/sha512-armv4.S", - "apple-arm/crypto/fipsmodule/vpaes-armv7.S", - "apple-arm/crypto/test/trampoline-armv4.S", -] - -crypto_sources_apple_x86 = [ - "apple-x86/crypto/chacha/chacha-x86.S", - "apple-x86/crypto/fipsmodule/aesni-x86.S", - "apple-x86/crypto/fipsmodule/bn-586.S", - "apple-x86/crypto/fipsmodule/co-586.S", - "apple-x86/crypto/fipsmodule/ghash-ssse3-x86.S", - "apple-x86/crypto/fipsmodule/ghash-x86.S", - "apple-x86/crypto/fipsmodule/md5-586.S", - "apple-x86/crypto/fipsmodule/sha1-586.S", - "apple-x86/crypto/fipsmodule/sha256-586.S", - "apple-x86/crypto/fipsmodule/sha512-586.S", - "apple-x86/crypto/fipsmodule/vpaes-x86.S", - "apple-x86/crypto/fipsmodule/x86-mont.S", - "apple-x86/crypto/test/trampoline-x86.S", -] - -crypto_sources_apple_x86_64 = [ - "apple-x86_64/crypto/chacha/chacha-x86_64.S", - "apple-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.S", - "apple-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.S", - "apple-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.S", - "apple-x86_64/crypto/fipsmodule/aesni-x86_64.S", - "apple-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.S", - "apple-x86_64/crypto/fipsmodule/ghash-x86_64.S", - "apple-x86_64/crypto/fipsmodule/md5-x86_64.S", - "apple-x86_64/crypto/fipsmodule/p256-x86_64-asm.S", - "apple-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.S", - "apple-x86_64/crypto/fipsmodule/rdrand-x86_64.S", - "apple-x86_64/crypto/fipsmodule/rsaz-avx2.S", - "apple-x86_64/crypto/fipsmodule/sha1-x86_64.S", - "apple-x86_64/crypto/fipsmodule/sha256-x86_64.S", - "apple-x86_64/crypto/fipsmodule/sha512-x86_64.S", - "apple-x86_64/crypto/fipsmodule/vpaes-x86_64.S", - "apple-x86_64/crypto/fipsmodule/x86_64-mont.S", - "apple-x86_64/crypto/fipsmodule/x86_64-mont5.S", - "apple-x86_64/crypto/test/trampoline-x86_64.S", -] - -crypto_sources_linux_aarch64 = [ - "linux-aarch64/crypto/chacha/chacha-armv8.S", - "linux-aarch64/crypto/cipher_extra/chacha20_poly1305_armv8.S", - "linux-aarch64/crypto/fipsmodule/aesv8-armx64.S", - "linux-aarch64/crypto/fipsmodule/armv8-mont.S", - "linux-aarch64/crypto/fipsmodule/ghash-neon-armv8.S", - "linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S", - "linux-aarch64/crypto/fipsmodule/p256-armv8-asm.S", - "linux-aarch64/crypto/fipsmodule/p256_beeu-armv8-asm.S", - "linux-aarch64/crypto/fipsmodule/sha1-armv8.S", - "linux-aarch64/crypto/fipsmodule/sha256-armv8.S", - "linux-aarch64/crypto/fipsmodule/sha512-armv8.S", - "linux-aarch64/crypto/fipsmodule/vpaes-armv8.S", - "linux-aarch64/crypto/test/trampoline-armv8.S", -] - -crypto_sources_linux_arm = [ - "linux-arm/crypto/chacha/chacha-armv4.S", - "linux-arm/crypto/fipsmodule/aesv8-armx32.S", - "linux-arm/crypto/fipsmodule/armv4-mont.S", - "linux-arm/crypto/fipsmodule/bsaes-armv7.S", - "linux-arm/crypto/fipsmodule/ghash-armv4.S", - "linux-arm/crypto/fipsmodule/ghashv8-armx32.S", - "linux-arm/crypto/fipsmodule/sha1-armv4-large.S", - "linux-arm/crypto/fipsmodule/sha256-armv4.S", - "linux-arm/crypto/fipsmodule/sha512-armv4.S", - "linux-arm/crypto/fipsmodule/vpaes-armv7.S", - "linux-arm/crypto/test/trampoline-armv4.S", - "src/crypto/curve25519/asm/x25519-asm-arm.S", - "src/crypto/poly1305/poly1305_arm_asm.S", -] - -crypto_sources_linux_ppc64le = [ - "linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S", - "linux-ppc64le/crypto/fipsmodule/ghashp8-ppc.S", - "linux-ppc64le/crypto/test/trampoline-ppc.S", -] - -crypto_sources_linux_x86 = [ - "linux-x86/crypto/chacha/chacha-x86.S", - "linux-x86/crypto/fipsmodule/aesni-x86.S", - "linux-x86/crypto/fipsmodule/bn-586.S", - "linux-x86/crypto/fipsmodule/co-586.S", - "linux-x86/crypto/fipsmodule/ghash-ssse3-x86.S", - "linux-x86/crypto/fipsmodule/ghash-x86.S", - "linux-x86/crypto/fipsmodule/md5-586.S", - "linux-x86/crypto/fipsmodule/sha1-586.S", - "linux-x86/crypto/fipsmodule/sha256-586.S", - "linux-x86/crypto/fipsmodule/sha512-586.S", - "linux-x86/crypto/fipsmodule/vpaes-x86.S", - "linux-x86/crypto/fipsmodule/x86-mont.S", - "linux-x86/crypto/test/trampoline-x86.S", -] - -crypto_sources_linux_x86_64 = [ - "linux-x86_64/crypto/chacha/chacha-x86_64.S", - "linux-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.S", - "linux-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.S", - "linux-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.S", - "linux-x86_64/crypto/fipsmodule/aesni-x86_64.S", - "linux-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.S", - "linux-x86_64/crypto/fipsmodule/ghash-x86_64.S", - "linux-x86_64/crypto/fipsmodule/md5-x86_64.S", - "linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S", - "linux-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.S", - "linux-x86_64/crypto/fipsmodule/rdrand-x86_64.S", - "linux-x86_64/crypto/fipsmodule/rsaz-avx2.S", - "linux-x86_64/crypto/fipsmodule/sha1-x86_64.S", - "linux-x86_64/crypto/fipsmodule/sha256-x86_64.S", - "linux-x86_64/crypto/fipsmodule/sha512-x86_64.S", - "linux-x86_64/crypto/fipsmodule/vpaes-x86_64.S", - "linux-x86_64/crypto/fipsmodule/x86_64-mont.S", - "linux-x86_64/crypto/fipsmodule/x86_64-mont5.S", - "linux-x86_64/crypto/test/trampoline-x86_64.S", - "src/crypto/hrss/asm/poly_rq_mul.S", -] - -crypto_sources_win_aarch64 = [ - "win-aarch64/crypto/chacha/chacha-armv8.S", - "win-aarch64/crypto/cipher_extra/chacha20_poly1305_armv8.S", - "win-aarch64/crypto/fipsmodule/aesv8-armx64.S", - "win-aarch64/crypto/fipsmodule/armv8-mont.S", - "win-aarch64/crypto/fipsmodule/ghash-neon-armv8.S", - "win-aarch64/crypto/fipsmodule/ghashv8-armx64.S", - "win-aarch64/crypto/fipsmodule/p256-armv8-asm.S", - "win-aarch64/crypto/fipsmodule/p256_beeu-armv8-asm.S", - "win-aarch64/crypto/fipsmodule/sha1-armv8.S", - "win-aarch64/crypto/fipsmodule/sha256-armv8.S", - "win-aarch64/crypto/fipsmodule/sha512-armv8.S", - "win-aarch64/crypto/fipsmodule/vpaes-armv8.S", - "win-aarch64/crypto/test/trampoline-armv8.S", -] - -crypto_sources_win_x86 = [ - "win-x86/crypto/chacha/chacha-x86.asm", - "win-x86/crypto/fipsmodule/aesni-x86.asm", - "win-x86/crypto/fipsmodule/bn-586.asm", - "win-x86/crypto/fipsmodule/co-586.asm", - "win-x86/crypto/fipsmodule/ghash-ssse3-x86.asm", - "win-x86/crypto/fipsmodule/ghash-x86.asm", - "win-x86/crypto/fipsmodule/md5-586.asm", - "win-x86/crypto/fipsmodule/sha1-586.asm", - "win-x86/crypto/fipsmodule/sha256-586.asm", - "win-x86/crypto/fipsmodule/sha512-586.asm", - "win-x86/crypto/fipsmodule/vpaes-x86.asm", - "win-x86/crypto/fipsmodule/x86-mont.asm", - "win-x86/crypto/test/trampoline-x86.asm", -] - -crypto_sources_win_x86_64 = [ - "win-x86_64/crypto/chacha/chacha-x86_64.asm", - "win-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.asm", - "win-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.asm", - "win-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.asm", - "win-x86_64/crypto/fipsmodule/aesni-x86_64.asm", - "win-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.asm", - "win-x86_64/crypto/fipsmodule/ghash-x86_64.asm", - "win-x86_64/crypto/fipsmodule/md5-x86_64.asm", - "win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm", - "win-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.asm", - "win-x86_64/crypto/fipsmodule/rdrand-x86_64.asm", - "win-x86_64/crypto/fipsmodule/rsaz-avx2.asm", - "win-x86_64/crypto/fipsmodule/sha1-x86_64.asm", - "win-x86_64/crypto/fipsmodule/sha256-x86_64.asm", - "win-x86_64/crypto/fipsmodule/sha512-x86_64.asm", - "win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm", - "win-x86_64/crypto/fipsmodule/x86_64-mont.asm", - "win-x86_64/crypto/fipsmodule/x86_64-mont5.asm", - "win-x86_64/crypto/test/trampoline-x86_64.asm", -] - fuzzers = [ "arm_cpuinfo", "bn_div", "bn_mod_exp", "cert", "client", + "conf", + "crl_getcrlstatusforcert_fuzzer", + "crl_parse_crl_certificatelist_fuzzer", + "crl_parse_crl_tbscertlist_fuzzer", + "crl_parse_issuing_distribution_point_fuzzer", "decode_client_hello_inner", "der_roundtrip", "dtls_client", "dtls_server", + "ocsp_parse_ocsp_cert_id_fuzzer", + "ocsp_parse_ocsp_response_data_fuzzer", + "ocsp_parse_ocsp_response_fuzzer", + "ocsp_parse_ocsp_single_response_fuzzer", + "parse_authority_key_identifier_fuzzer", + "parse_certificate_fuzzer", + "parse_crldp_fuzzer", "pkcs12", "pkcs8", "privkey", @@ -657,4 +787,7 @@ fuzzers = [ "session", "spki", "ssl_ctx_api", + "verify_name_match_fuzzer", + "verify_name_match_normalizename_fuzzer", + "verify_name_match_verifynameinsubtree_fuzzer", ] diff --git a/third_party/boringssl/repo/BUILD.generated_tests.gni b/third_party/boringssl/repo/BUILD.generated_tests.gni index 6e478092295874..2f97c1879b583f 100644 --- a/third_party/boringssl/repo/BUILD.generated_tests.gni +++ b/third_party/boringssl/repo/BUILD.generated_tests.gni @@ -1,15 +1,30 @@ -# Copyright (c) 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. +# Copyright (c) 2015, Google Inc. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # This file is created by generate_build_files.py. Do not edit manually. test_support_sources = [ + "src/crypto/test/abi_test.cc", "src/crypto/test/abi_test.h", "src/crypto/test/file_test.cc", "src/crypto/test/file_test.h", + "src/crypto/test/file_test_gtest.cc", + "src/crypto/test/file_util.cc", + "src/crypto/test/file_util.h", "src/crypto/test/gtest_main.h", - "src/crypto/test/malloc.cc", + "src/crypto/test/test_data.cc", + "src/crypto/test/test_data.h", "src/crypto/test/test_util.cc", "src/crypto/test/test_util.h", "src/crypto/test/wycheproof_util.cc", @@ -26,7 +41,6 @@ test_support_sources = [ ] crypto_test_sources = [ - "crypto_test_data.cc", "src/crypto/abi_self_test.cc", "src/crypto/asn1/asn1_test.cc", "src/crypto/base64/base64_test.cc", @@ -47,6 +61,7 @@ crypto_test_sources = [ "src/crypto/curve25519/x25519_test.cc", "src/crypto/dh_extra/dh_test.cc", "src/crypto/digest_extra/digest_test.cc", + "src/crypto/dilithium/dilithium_test.cc", "src/crypto/dsa/dsa_test.cc", "src/crypto/ecdh_extra/ecdh_test.cc", "src/crypto/err/err_test.cc", @@ -59,18 +74,21 @@ crypto_test_sources = [ "src/crypto/fipsmodule/cmac/cmac_test.cc", "src/crypto/fipsmodule/ec/ec_test.cc", "src/crypto/fipsmodule/ec/p256-nistz_test.cc", + "src/crypto/fipsmodule/ec/p256_test.cc", "src/crypto/fipsmodule/ecdsa/ecdsa_test.cc", + "src/crypto/fipsmodule/hkdf/hkdf_test.cc", "src/crypto/fipsmodule/md5/md5_test.cc", "src/crypto/fipsmodule/modes/gcm_test.cc", "src/crypto/fipsmodule/rand/ctrdrbg_test.cc", "src/crypto/fipsmodule/rand/fork_detect_test.cc", "src/crypto/fipsmodule/service_indicator/service_indicator_test.cc", "src/crypto/fipsmodule/sha/sha_test.cc", - "src/crypto/hkdf/hkdf_test.cc", "src/crypto/hmac_extra/hmac_test.cc", "src/crypto/hpke/hpke_test.cc", "src/crypto/hrss/hrss_test.cc", "src/crypto/impl_dispatch_test.cc", + "src/crypto/keccak/keccak_test.cc", + "src/crypto/kyber/kyber_test.cc", "src/crypto/lhash/lhash_test.cc", "src/crypto/obj/obj_test.cc", "src/crypto/pem/pem_test.cc", @@ -79,20 +97,20 @@ crypto_test_sources = [ "src/crypto/pkcs8/pkcs8_test.cc", "src/crypto/poly1305/poly1305_test.cc", "src/crypto/pool/pool_test.cc", + "src/crypto/rand_extra/getentropy_test.cc", "src/crypto/rand_extra/rand_test.cc", "src/crypto/refcount_test.cc", "src/crypto/rsa_extra/rsa_test.cc", "src/crypto/self_test.cc", "src/crypto/siphash/siphash_test.cc", + "src/crypto/spx/spx_test.cc", "src/crypto/stack/stack_test.cc", - "src/crypto/test/abi_test.cc", - "src/crypto/test/file_test_gtest.cc", "src/crypto/test/gtest_main.cc", "src/crypto/thread_test.cc", "src/crypto/trust_token/trust_token_test.cc", + "src/crypto/x509/tab_test.cc", "src/crypto/x509/x509_test.cc", "src/crypto/x509/x509_time_test.cc", - "src/crypto/x509v3/tab_test.cc", ] crypto_test_data = [ @@ -129,12 +147,24 @@ crypto_test_data = [ "src/crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt", "src/crypto/cipher_extra/test/xchacha20_poly1305_tests.txt", "src/crypto/curve25519/ed25519_tests.txt", + "src/crypto/dilithium/dilithium_tests.txt", + "src/crypto/dilithium/edge_cases_draft_dilithium3_sign.txt", + "src/crypto/dilithium/edge_cases_draft_dilithium3_verify.txt", "src/crypto/ecdh_extra/ecdh_tests.txt", "src/crypto/evp/evp_tests.txt", "src/crypto/evp/scrypt_tests.txt", "src/crypto/fipsmodule/aes/aes_tests.txt", - "src/crypto/fipsmodule/bn/bn_tests.txt", - "src/crypto/fipsmodule/bn/miller_rabin_tests.txt", + "src/crypto/fipsmodule/bn/test/exp_tests.txt", + "src/crypto/fipsmodule/bn/test/gcd_tests.txt", + "src/crypto/fipsmodule/bn/test/miller_rabin_tests.txt", + "src/crypto/fipsmodule/bn/test/mod_exp_tests.txt", + "src/crypto/fipsmodule/bn/test/mod_inv_tests.txt", + "src/crypto/fipsmodule/bn/test/mod_mul_tests.txt", + "src/crypto/fipsmodule/bn/test/mod_sqrt_tests.txt", + "src/crypto/fipsmodule/bn/test/product_tests.txt", + "src/crypto/fipsmodule/bn/test/quotient_tests.txt", + "src/crypto/fipsmodule/bn/test/shift_tests.txt", + "src/crypto/fipsmodule/bn/test/sum_tests.txt", "src/crypto/fipsmodule/cmac/cavp_3des_cmac_tests.txt", "src/crypto/fipsmodule/cmac/cavp_aes128_cmac_tests.txt", "src/crypto/fipsmodule/cmac/cavp_aes192_cmac_tests.txt", @@ -147,7 +177,14 @@ crypto_test_data = [ "src/crypto/fipsmodule/rand/ctrdrbg_vectors.txt", "src/crypto/hmac_extra/hmac_tests.txt", "src/crypto/hpke/hpke_test_vectors.txt", + "src/crypto/keccak/keccak_tests.txt", + "src/crypto/kyber/kyber_tests.txt", + "src/crypto/pkcs8/test/bad1.p12", + "src/crypto/pkcs8/test/bad2.p12", + "src/crypto/pkcs8/test/bad3.p12", "src/crypto/pkcs8/test/empty_password.p12", + "src/crypto/pkcs8/test/empty_password_ber.p12", + "src/crypto/pkcs8/test/empty_password_ber_nested.p12", "src/crypto/pkcs8/test/no_encryption.p12", "src/crypto/pkcs8/test/nss.p12", "src/crypto/pkcs8/test/null_password.p12", @@ -158,6 +195,8 @@ crypto_test_data = [ "src/crypto/pkcs8/test/windows.p12", "src/crypto/poly1305/poly1305_tests.txt", "src/crypto/siphash/siphash_tests.txt", + "src/crypto/spx/spx_tests.txt", + "src/crypto/spx/spx_tests_deterministic.txt", "src/crypto/x509/test/basic_constraints_ca.pem", "src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem", "src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem", @@ -192,6 +231,48 @@ crypto_test_data = [ "src/crypto/x509/test/many_names1.pem", "src/crypto/x509/test/many_names2.pem", "src/crypto/x509/test/many_names3.pem", + "src/crypto/x509/test/policy_intermediate.pem", + "src/crypto/x509/test/policy_intermediate_any.pem", + "src/crypto/x509/test/policy_intermediate_duplicate.pem", + "src/crypto/x509/test/policy_intermediate_invalid.pem", + "src/crypto/x509/test/policy_intermediate_mapped.pem", + "src/crypto/x509/test/policy_intermediate_mapped_any.pem", + "src/crypto/x509/test/policy_intermediate_mapped_oid3.pem", + "src/crypto/x509/test/policy_intermediate_require.pem", + "src/crypto/x509/test/policy_intermediate_require1.pem", + "src/crypto/x509/test/policy_intermediate_require2.pem", + "src/crypto/x509/test/policy_intermediate_require_duplicate.pem", + "src/crypto/x509/test/policy_intermediate_require_no_policies.pem", + "src/crypto/x509/test/policy_leaf.pem", + "src/crypto/x509/test/policy_leaf_any.pem", + "src/crypto/x509/test/policy_leaf_duplicate.pem", + "src/crypto/x509/test/policy_leaf_invalid.pem", + "src/crypto/x509/test/policy_leaf_none.pem", + "src/crypto/x509/test/policy_leaf_oid1.pem", + "src/crypto/x509/test/policy_leaf_oid2.pem", + "src/crypto/x509/test/policy_leaf_oid3.pem", + "src/crypto/x509/test/policy_leaf_oid4.pem", + "src/crypto/x509/test/policy_leaf_oid5.pem", + "src/crypto/x509/test/policy_leaf_require.pem", + "src/crypto/x509/test/policy_leaf_require1.pem", + "src/crypto/x509/test/policy_root.pem", + "src/crypto/x509/test/policy_root2.pem", + "src/crypto/x509/test/policy_root_cross_inhibit_mapping.pem", + "src/crypto/x509/test/pss_sha1.pem", + "src/crypto/x509/test/pss_sha1_explicit.pem", + "src/crypto/x509/test/pss_sha1_mgf1_syntax_error.pem", + "src/crypto/x509/test/pss_sha224.pem", + "src/crypto/x509/test/pss_sha256.pem", + "src/crypto/x509/test/pss_sha256_explicit_trailer.pem", + "src/crypto/x509/test/pss_sha256_mgf1_sha384.pem", + "src/crypto/x509/test/pss_sha256_mgf1_syntax_error.pem", + "src/crypto/x509/test/pss_sha256_omit_nulls.pem", + "src/crypto/x509/test/pss_sha256_salt31.pem", + "src/crypto/x509/test/pss_sha256_salt_overflow.pem", + "src/crypto/x509/test/pss_sha256_unknown_mgf.pem", + "src/crypto/x509/test/pss_sha256_wrong_trailer.pem", + "src/crypto/x509/test/pss_sha384.pem", + "src/crypto/x509/test/pss_sha512.pem", "src/crypto/x509/test/some_names1.pem", "src/crypto/x509/test/some_names2.pem", "src/crypto/x509/test/some_names3.pem", @@ -276,10 +357,1466 @@ crypto_test_data = [ "src/third_party/wycheproof_testvectors/xchacha20_poly1305_test.txt", ] +pki_test_data = [ + "src/pki/testdata/cert_issuer_source_static_unittest/c1.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/c2.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/d.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/e1.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/e2.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/i1_1.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/i1_2.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/i2.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/i3_1.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/i3_2.pem", + "src/pki/testdata/cert_issuer_source_static_unittest/root.pem", + "src/pki/testdata/certificate_policies_unittest/anypolicy.pem", + "src/pki/testdata/certificate_policies_unittest/anypolicy_with_qualifier.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-anypolicy_with_custom_qualifier.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-empty.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_dupe.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyinformation_unconsumed_data.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyqualifierinfo_unconsumed_data.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_with_empty_qualifiers_sequence.pem", + "src/pki/testdata/certificate_policies_unittest/invalid-policy_identifier_not_oid.pem", + "src/pki/testdata/certificate_policies_unittest/policy_1_2_3.pem", + "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4.pem", + "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4_with_qualifiers.pem", + "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_custom_qualifier.pem", + "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_qualifier.pem", + "src/pki/testdata/crl_unittest/bad_crldp_has_crlissuer.pem", + "src/pki/testdata/crl_unittest/bad_fake_critical_crlentryextension.pem", + "src/pki/testdata/crl_unittest/bad_fake_critical_extension.pem", + "src/pki/testdata/crl_unittest/bad_idp_contains_wrong_uri.pem", + "src/pki/testdata/crl_unittest/bad_idp_indirectcrl.pem", + "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts.pem", + "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts_no_basic_constraints.pem", + "src/pki/testdata/crl_unittest/bad_idp_onlycontainsusercerts.pem", + "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainscacerts.pem", + "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainsusercerts.pem", + "src/pki/testdata/crl_unittest/bad_key_rollover_signature.pem", + "src/pki/testdata/crl_unittest/bad_nextupdate_too_old.pem", + "src/pki/testdata/crl_unittest/bad_signature.pem", + "src/pki/testdata/crl_unittest/bad_thisupdate_in_future.pem", + "src/pki/testdata/crl_unittest/bad_thisupdate_too_old.pem", + "src/pki/testdata/crl_unittest/bad_wrong_issuer.pem", + "src/pki/testdata/crl_unittest/good.pem", + "src/pki/testdata/crl_unittest/good_fake_extension.pem", + "src/pki/testdata/crl_unittest/good_fake_extension_no_nextupdate.pem", + "src/pki/testdata/crl_unittest/good_generalizedtime.pem", + "src/pki/testdata/crl_unittest/good_idp_contains_uri.pem", + "src/pki/testdata/crl_unittest/good_idp_onlycontainscacerts.pem", + "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts.pem", + "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts_no_basic_constraints.pem", + "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainscacerts.pem", + "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainsusercerts.pem", + "src/pki/testdata/crl_unittest/good_issuer_name_normalization.pem", + "src/pki/testdata/crl_unittest/good_issuer_no_keyusage.pem", + "src/pki/testdata/crl_unittest/good_key_rollover.pem", + "src/pki/testdata/crl_unittest/good_no_crldp.pem", + "src/pki/testdata/crl_unittest/good_no_nextupdate.pem", + "src/pki/testdata/crl_unittest/good_no_version.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_crlentryextensions.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_extensions.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_nextupdate.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_revocationdate.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_revokedcerts.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_signaturevalue.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_after_thisupdate.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_crlentry.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_issuer_name.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_revocationdate.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_revoked_serial_number.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_signaturealgorithm.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_signaturevalue.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_tbs_signature_algorithm.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_tbscertlist.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_thisupdate.pem", + "src/pki/testdata/crl_unittest/invalid_garbage_version.pem", + "src/pki/testdata/crl_unittest/invalid_idp_dpname_choice_extra_data.pem", + "src/pki/testdata/crl_unittest/invalid_idp_empty_sequence.pem", + "src/pki/testdata/crl_unittest/invalid_idp_onlycontains_user_and_ca_certs.pem", + "src/pki/testdata/crl_unittest/invalid_idp_onlycontainsusercerts_v1_leaf.pem", + "src/pki/testdata/crl_unittest/invalid_issuer_keyusage_no_crlsign.pem", + "src/pki/testdata/crl_unittest/invalid_key_rollover_issuer_keyusage_no_crlsign.pem", + "src/pki/testdata/crl_unittest/invalid_mismatched_signature_algorithm.pem", + "src/pki/testdata/crl_unittest/invalid_revoked_empty_sequence.pem", + "src/pki/testdata/crl_unittest/invalid_v1_explicit.pem", + "src/pki/testdata/crl_unittest/invalid_v1_with_crlentryextension.pem", + "src/pki/testdata/crl_unittest/invalid_v1_with_extension.pem", + "src/pki/testdata/crl_unittest/invalid_v3.pem", + "src/pki/testdata/crl_unittest/revoked.pem", + "src/pki/testdata/crl_unittest/revoked_fake_crlentryextension.pem", + "src/pki/testdata/crl_unittest/revoked_generalized_revocationdate.pem", + "src/pki/testdata/crl_unittest/revoked_key_rollover.pem", + "src/pki/testdata/crl_unittest/revoked_no_nextupdate.pem", + "src/pki/testdata/name_constraints_unittest/directoryname-excludeall.pem", + "src/pki/testdata/name_constraints_unittest/directoryname-excluded.pem", + "src/pki/testdata/name_constraints_unittest/directoryname.pem", + "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname.pem", + "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname_and_ipaddress.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-exclude_dot.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-excludeall.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-excluded.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-excluded_with_leading_dot.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-permitted_two_dot.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-permitted_with_leading_dot.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-with_max.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0_and_max.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1.pem", + "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1_and_max.pem", + "src/pki/testdata/name_constraints_unittest/dnsname.pem", + "src/pki/testdata/name_constraints_unittest/dnsname2.pem", + "src/pki/testdata/name_constraints_unittest/edipartyname-excluded.pem", + "src/pki/testdata/name_constraints_unittest/edipartyname-permitted.pem", + "src/pki/testdata/name_constraints_unittest/invalid-empty_excluded_subtree.pem", + "src/pki/testdata/name_constraints_unittest/invalid-empty_permitted_subtree.pem", + "src/pki/testdata/name_constraints_unittest/invalid-no_subtrees.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-excludeall.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-excluded.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_addr.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_1.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_2.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_3.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_4.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-permit_all.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix1.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix31.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress-permit_singlehost.pem", + "src/pki/testdata/name_constraints_unittest/ipaddress.pem", + "src/pki/testdata/name_constraints_unittest/name-ca.pem", + "src/pki/testdata/name_constraints_unittest/name-de.pem", + "src/pki/testdata/name_constraints_unittest/name-empty.pem", + "src/pki/testdata/name_constraints_unittest/name-jp-tokyo.pem", + "src/pki/testdata/name_constraints_unittest/name-jp.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-1.1.1.1.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-192.168.1.1.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-invalidstring.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-localpartcase.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-multiple.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-email.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-foo.com.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-ipv6.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona-permitted.example.com.pem", + "src/pki/testdata/name_constraints_unittest/name-us-arizona.pem", + "src/pki/testdata/name_constraints_unittest/name-us-california-192.168.1.1.pem", + "src/pki/testdata/name_constraints_unittest/name-us-california-mountain_view.pem", + "src/pki/testdata/name_constraints_unittest/name-us-california-permitted.example.com.pem", + "src/pki/testdata/name_constraints_unittest/name-us-california.pem", + "src/pki/testdata/name_constraints_unittest/name-us.pem", + "src/pki/testdata/name_constraints_unittest/othername-excluded.pem", + "src/pki/testdata/name_constraints_unittest/othername-permitted.pem", + "src/pki/testdata/name_constraints_unittest/registeredid-excluded.pem", + "src/pki/testdata/name_constraints_unittest/registeredid-permitted.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-empty.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostname.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostnamewithat.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-ipv4.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-quoted.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-subdomains.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-excluded.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-empty.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostname.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostnamewithat.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-ipv4.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-quoted.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-subdomains.pem", + "src/pki/testdata/name_constraints_unittest/rfc822name-permitted.pem", + "src/pki/testdata/name_constraints_unittest/san-directoryname.pem", + "src/pki/testdata/name_constraints_unittest/san-dnsname.pem", + "src/pki/testdata/name_constraints_unittest/san-edipartyname.pem", + "src/pki/testdata/name_constraints_unittest/san-excluded-directoryname.pem", + "src/pki/testdata/name_constraints_unittest/san-excluded-dnsname.pem", + "src/pki/testdata/name_constraints_unittest/san-excluded-ipaddress.pem", + "src/pki/testdata/name_constraints_unittest/san-invalid-empty.pem", + "src/pki/testdata/name_constraints_unittest/san-invalid-ipaddress.pem", + "src/pki/testdata/name_constraints_unittest/san-ipaddress4.pem", + "src/pki/testdata/name_constraints_unittest/san-ipaddress6.pem", + "src/pki/testdata/name_constraints_unittest/san-othername.pem", + "src/pki/testdata/name_constraints_unittest/san-permitted.pem", + "src/pki/testdata/name_constraints_unittest/san-registeredid.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-domaincase.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty-localpart.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-ipv4.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-localpartcase.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-multiple.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-no-at.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-quoted.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-no-at.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-two-ats.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomaincase.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name-two-ats.pem", + "src/pki/testdata/name_constraints_unittest/san-rfc822name.pem", + "src/pki/testdata/name_constraints_unittest/san-uri.pem", + "src/pki/testdata/name_constraints_unittest/san-x400address.pem", + "src/pki/testdata/name_constraints_unittest/uri-excluded.pem", + "src/pki/testdata/name_constraints_unittest/uri-permitted.pem", + "src/pki/testdata/name_constraints_unittest/x400address-excluded.pem", + "src/pki/testdata/name_constraints_unittest/x400address-permitted.pem", + "src/pki/testdata/nist-pkits/certs/AllCertificatesNoPoliciesTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/AllCertificatesanyPolicyTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/AnyPolicyTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/BadCRLIssuerNameCACert.crt", + "src/pki/testdata/nist-pkits/certs/BadCRLSignatureCACert.crt", + "src/pki/testdata/nist-pkits/certs/BadSignedCACert.crt", + "src/pki/testdata/nist-pkits/certs/BadnotAfterDateCACert.crt", + "src/pki/testdata/nist-pkits/certs/BadnotBeforeDateCACert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCACert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCRLCert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyCACert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyOldWithNewCACert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyCACert.crt", + "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyNewWithOldCACert.crt", + "src/pki/testdata/nist-pkits/certs/CPSPointerQualifierTest20EE.crt", + "src/pki/testdata/nist-pkits/certs/DSACACert.crt", + "src/pki/testdata/nist-pkits/certs/DSAParametersInheritedCACert.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/GeneralizedTimeCRLnextUpdateCACert.crt", + "src/pki/testdata/nist-pkits/certs/GoodCACert.crt", + "src/pki/testdata/nist-pkits/certs/GoodsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/GoodsubCAPanyPolicyMapping1to2CACert.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBadCRLIssuerNameTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBadCRLSignatureTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedNewWithOldTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedOldWithNewTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidCASignatureTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidCAnotAfterDateTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidCAnotBeforeDateTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest31EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest33EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest38EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest28EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest29EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest15EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest16EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest17EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest20EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidDSASignatureTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidEESignatureTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidEEnotAfterDateTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidEEnotBeforeDateTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest23EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest26EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidLongSerialNumberTest18EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidMappingFromanyPolicyTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidMappingToanyPolicyTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidMissingCRLTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidMissingbasicConstraintsTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidNameChainingOrderTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidNameChainingTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidNegativeSerialNumberTest15EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidOldCRLnextUpdateTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest22EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest24EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest26EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidRevokedCATest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidRevokedEETest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedpathLenConstraintTest16EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest20EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest21EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest35EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest37EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLEntryExtensionTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidUnknownCriticalCertificateExtensionTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidWrongCRLTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest27EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest31EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest32EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest34EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest35EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLIndicatorNoBaseTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalcRLSignFalseTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalkeyCertSignFalseTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalcRLSignFalseTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalkeyCertSignFalseTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsAttributeCertsTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsCACertsTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsUserCertsTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest15EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest16EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest17EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest20EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest21EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/Invalidpre2000CRLnextUpdateTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/Invalidpre2000UTCEEnotAfterDateTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/LongSerialNumberCACert.crt", + "src/pki/testdata/nist-pkits/certs/Mapping1to2CACert.crt", + "src/pki/testdata/nist-pkits/certs/MappingFromanyPolicyCACert.crt", + "src/pki/testdata/nist-pkits/certs/MappingToanyPolicyCACert.crt", + "src/pki/testdata/nist-pkits/certs/MissingbasicConstraintsCACert.crt", + "src/pki/testdata/nist-pkits/certs/NameOrderingCACert.crt", + "src/pki/testdata/nist-pkits/certs/NegativeSerialNumberCACert.crt", + "src/pki/testdata/nist-pkits/certs/NoCRLCACert.crt", + "src/pki/testdata/nist-pkits/certs/NoPoliciesCACert.crt", + "src/pki/testdata/nist-pkits/certs/NoissuingDistributionPointCACert.crt", + "src/pki/testdata/nist-pkits/certs/OldCRLnextUpdateCACert.crt", + "src/pki/testdata/nist-pkits/certs/OverlappingPoliciesTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/P12Mapping1to3CACert.crt", + "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subCACert.crt", + "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/P1Mapping1to234CACert.crt", + "src/pki/testdata/nist-pkits/certs/P1Mapping1to234subCACert.crt", + "src/pki/testdata/nist-pkits/certs/P1anyPolicyMapping1to2CACert.crt", + "src/pki/testdata/nist-pkits/certs/PanyPolicyMapping1to2CACert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP1234CACert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP1234subCAP123Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP1234subsubCAP123P12Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP123CACert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP123subCAP12Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P1Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P2Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubsubCAP12P2P1Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP12CACert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP12subCAP1Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP12subsubCAP1P2Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP2subCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP2subCACert.crt", + "src/pki/testdata/nist-pkits/certs/PoliciesP3CACert.crt", + "src/pki/testdata/nist-pkits/certs/RFC3280MandatoryAttributeTypesCACert.crt", + "src/pki/testdata/nist-pkits/certs/RFC3280OptionalAttributeTypesCACert.crt", + "src/pki/testdata/nist-pkits/certs/RevokedsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/RolloverfromPrintableStringtoUTF8StringCACert.crt", + "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CRLSigningCert.crt", + "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CertificateSigningCACert.crt", + "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCRLSigningCert.crt", + "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCertificateSigningCACert.crt", + "src/pki/testdata/nist-pkits/certs/TrustAnchorRootCertificate.crt", + "src/pki/testdata/nist-pkits/certs/TwoCRLsCACert.crt", + "src/pki/testdata/nist-pkits/certs/UIDCACert.crt", + "src/pki/testdata/nist-pkits/certs/UTF8StringCaseInsensitiveMatchCACert.crt", + "src/pki/testdata/nist-pkits/certs/UTF8StringEncodedNamesCACert.crt", + "src/pki/testdata/nist-pkits/certs/UnknownCRLEntryExtensionCACert.crt", + "src/pki/testdata/nist-pkits/certs/UnknownCRLExtensionCACert.crt", + "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest15EE.crt", + "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest16EE.crt", + "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest17EE.crt", + "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest18EE.crt", + "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest19EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedCRLSigningKeyTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedOldWithNewTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidCertificatePathTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest30EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest32EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNandRFC822nameConstraintsTest27EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest18EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest19EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDSAParameterInheritanceTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidDSASignaturesTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimeCRLnextUpdateTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotAfterDateTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotBeforeDateTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest22EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest24EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest25EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest16EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest17EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNameChainingCapitalizationTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNameUIDsTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNegativeSerialNumberTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidNoissuingDistributionPointTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest12EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRFC3280MandatoryAttributeTypesTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRFC3280OptionalAttributeTypesTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest21EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest23EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest25EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidRolloverfromPrintableStringtoUTF8StringTest10EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitPolicyMappingTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest15EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest17EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedrequireExplicitPolicyTest6EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidSeparateCertificateandCRLKeysTest19EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidTwoCRLsTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest34EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest36EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidUTF8StringCaseInsensitiveMatchTest11EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidUTF8StringEncodedNamesTest9EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidUnknownNotCriticalCertificateExtensionTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidbasicConstraintsNotCriticalTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest28EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest29EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest30EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest33EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest5EE.crt", + "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidinhibitAnyPolicyTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidkeyUsageNotCriticalTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidonlyContainsCACertsTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest18EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest19EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest13EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest14EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest7EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest8EE.crt", + "src/pki/testdata/nist-pkits/certs/Validpre2000UTCnotBeforeDateTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest1EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest2EE.crt", + "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest4EE.crt", + "src/pki/testdata/nist-pkits/certs/WrongCRLCACert.crt", + "src/pki/testdata/nist-pkits/certs/anyPolicyCACert.crt", + "src/pki/testdata/nist-pkits/certs/basicConstraintsCriticalcAFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalCACert.crt", + "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalcAFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/deltaCRLCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/deltaCRLCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/deltaCRLCA3Cert.crt", + "src/pki/testdata/nist-pkits/certs/deltaCRLIndicatorNoBaseCACert.crt", + "src/pki/testdata/nist-pkits/certs/distributionPoint1CACert.crt", + "src/pki/testdata/nist-pkits/certs/distributionPoint2CACert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA3Cert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA3cRLIssuerCert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA4Cert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA4cRLIssuerCert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA5Cert.crt", + "src/pki/testdata/nist-pkits/certs/indirectCRLCA6Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy0CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedsubCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCAIAP5Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subsubCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicyTest3EE.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0subCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCAIPM5Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCAIPM5Cert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5CACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/keyUsageCriticalcRLSignFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/keyUsageCriticalkeyCertSignFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalCACert.crt", + "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalcRLSignFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalkeyCertSignFalseCACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA3Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN2CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN4CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDN5CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS1CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS2CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA3Cert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsURI1CACert.crt", + "src/pki/testdata/nist-pkits/certs/nameConstraintsURI2CACert.crt", + "src/pki/testdata/nist-pkits/certs/onlyContainsAttributeCertsCACert.crt", + "src/pki/testdata/nist-pkits/certs/onlyContainsCACertsCACert.crt", + "src/pki/testdata/nist-pkits/certs/onlyContainsUserCertsCACert.crt", + "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA3Cert.crt", + "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA4Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint0CACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint0SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCA2Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint1CACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint1subCACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6CACert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA0Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA1Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA4Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA00Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA11Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA41Cert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA11XCert.crt", + "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA41XCert.crt", + "src/pki/testdata/nist-pkits/certs/pre2000CRLnextUpdateCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2subCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubsubCACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7CACert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subCARE2Cert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubCARE2RE4Cert.crt", + "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubsubCARE2RE4Cert.crt", + "src/pki/testdata/nist-pkits/crls/BadCRLIssuerNameCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BadCRLSignatureCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BadSignedCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BadnotAfterDateCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BadnotBeforeDateCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCRLCertCRL.crl", + "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedNewKeyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeySelfIssuedCertCRL.crl", + "src/pki/testdata/nist-pkits/crls/DSACACRL.crl", + "src/pki/testdata/nist-pkits/crls/DSAParametersInheritedCACRL.crl", + "src/pki/testdata/nist-pkits/crls/GeneralizedTimeCRLnextUpdateCACRL.crl", + "src/pki/testdata/nist-pkits/crls/GoodCACRL.crl", + "src/pki/testdata/nist-pkits/crls/GoodsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/GoodsubCAPanyPolicyMapping1to2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/LongSerialNumberCACRL.crl", + "src/pki/testdata/nist-pkits/crls/Mapping1to2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/MappingFromanyPolicyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/MappingToanyPolicyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/MissingbasicConstraintsCACRL.crl", + "src/pki/testdata/nist-pkits/crls/NameOrderCACRL.crl", + "src/pki/testdata/nist-pkits/crls/NegativeSerialNumberCACRL.crl", + "src/pki/testdata/nist-pkits/crls/NoPoliciesCACRL.crl", + "src/pki/testdata/nist-pkits/crls/NoissuingDistributionPointCACRL.crl", + "src/pki/testdata/nist-pkits/crls/OldCRLnextUpdateCACRL.crl", + "src/pki/testdata/nist-pkits/crls/P12Mapping1to3CACRL.crl", + "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/P1Mapping1to234CACRL.crl", + "src/pki/testdata/nist-pkits/crls/P1Mapping1to234subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/P1anyPolicyMapping1to2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/PanyPolicyMapping1to2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP1234CACRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP1234subCAP123CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP1234subsubCAP123P12CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP123CACRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP123subCAP12CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP12P1CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP2P2CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubsubCAP12P2P1CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP12CACRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP12subCAP1CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP12subsubCAP1P2CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP2subCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP2subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/PoliciesP3CACRL.crl", + "src/pki/testdata/nist-pkits/crls/RFC3280MandatoryAttributeTypesCACRL.crl", + "src/pki/testdata/nist-pkits/crls/RFC3280OptionalAttributeTypesCACRL.crl", + "src/pki/testdata/nist-pkits/crls/RevokedsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/RolloverfromPrintableStringtoUTF8StringCACRL.crl", + "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCRL.crl", + "src/pki/testdata/nist-pkits/crls/TrustAnchorRootCRL.crl", + "src/pki/testdata/nist-pkits/crls/TwoCRLsCABadCRL.crl", + "src/pki/testdata/nist-pkits/crls/TwoCRLsCAGoodCRL.crl", + "src/pki/testdata/nist-pkits/crls/UIDCACRL.crl", + "src/pki/testdata/nist-pkits/crls/UTF8StringCaseInsensitiveMatchCACRL.crl", + "src/pki/testdata/nist-pkits/crls/UTF8StringEncodedNamesCACRL.crl", + "src/pki/testdata/nist-pkits/crls/UnknownCRLEntryExtensionCACRL.crl", + "src/pki/testdata/nist-pkits/crls/UnknownCRLExtensionCACRL.crl", + "src/pki/testdata/nist-pkits/crls/WrongCRLCACRL.crl", + "src/pki/testdata/nist-pkits/crls/anyPolicyCACRL.crl", + "src/pki/testdata/nist-pkits/crls/basicConstraintsCriticalcAFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalCACRL.crl", + "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalcAFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA1deltaCRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA2deltaCRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA3CRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLCA3deltaCRL.crl", + "src/pki/testdata/nist-pkits/crls/deltaCRLIndicatorNoBaseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/distributionPoint1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/distributionPoint2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/indirectCRLCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/indirectCRLCA3CRL.crl", + "src/pki/testdata/nist-pkits/crls/indirectCRLCA3cRLIssuerCRL.crl", + "src/pki/testdata/nist-pkits/crls/indirectCRLCA4cRLIssuerCRL.crl", + "src/pki/testdata/nist-pkits/crls/indirectCRLCA5CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy0CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCAIAP5CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subsubCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCAIPM5CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCAIPM5CRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5CACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/keyUsageCriticalcRLSignFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/keyUsageCriticalkeyCertSignFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalCACRL.crl", + "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalcRLSignFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalkeyCertSignFalseCACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA3CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN4CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDN5CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA3CRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsURI1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/nameConstraintsURI2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/onlyContainsAttributeCertsCACRL.crl", + "src/pki/testdata/nist-pkits/crls/onlyContainsCACertsCACRL.crl", + "src/pki/testdata/nist-pkits/crls/onlyContainsUserCertsCACRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1compromiseCRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1otherreasonsCRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL1.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL2.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3compromiseCRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3otherreasonsCRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4compromiseCRL.crl", + "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4otherreasonsCRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint0CACRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCA2CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint1CACRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint1subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6CACRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA0CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA1CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA4CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA00CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA11CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA41CRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA11XCRL.crl", + "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA41XCRL.crl", + "src/pki/testdata/nist-pkits/crls/pre2000CRLnextUpdateCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubsubCACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7CACRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subCARE2CRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubCARE2RE4CRL.crl", + "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubsubCARE2RE4CRL.crl", + "src/pki/testdata/ocsp_unittest/bad_ocsp_type.pem", + "src/pki/testdata/ocsp_unittest/bad_signature.pem", + "src/pki/testdata/ocsp_unittest/bad_status.pem", + "src/pki/testdata/ocsp_unittest/good_response.pem", + "src/pki/testdata/ocsp_unittest/good_response_next_update.pem", + "src/pki/testdata/ocsp_unittest/good_response_sha256.pem", + "src/pki/testdata/ocsp_unittest/has_critical_ct_extension.pem", + "src/pki/testdata/ocsp_unittest/has_critical_response_extension.pem", + "src/pki/testdata/ocsp_unittest/has_critical_single_extension.pem", + "src/pki/testdata/ocsp_unittest/has_extension.pem", + "src/pki/testdata/ocsp_unittest/has_single_extension.pem", + "src/pki/testdata/ocsp_unittest/has_version.pem", + "src/pki/testdata/ocsp_unittest/malformed_request.pem", + "src/pki/testdata/ocsp_unittest/missing_response.pem", + "src/pki/testdata/ocsp_unittest/multiple_response.pem", + "src/pki/testdata/ocsp_unittest/no_response.pem", + "src/pki/testdata/ocsp_unittest/ocsp_extra_certs.pem", + "src/pki/testdata/ocsp_unittest/ocsp_sign_bad_indirect.pem", + "src/pki/testdata/ocsp_unittest/ocsp_sign_direct.pem", + "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect.pem", + "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect_missing.pem", + "src/pki/testdata/ocsp_unittest/other_response.pem", + "src/pki/testdata/ocsp_unittest/responder_id.pem", + "src/pki/testdata/ocsp_unittest/responder_name.pem", + "src/pki/testdata/ocsp_unittest/revoke_response.pem", + "src/pki/testdata/ocsp_unittest/revoke_response_reason.pem", + "src/pki/testdata/ocsp_unittest/unknown_response.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/empty_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_extension_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_issuer_and_serial.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_contents.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_issuer.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_key_identifier.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_serial.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_and_serial.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_only.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier_and_issuer_and_serial.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/serial_only.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/url_issuer_and_serial.pem", + "src/pki/testdata/parse_certificate_unittest/authority_key_identifier_not_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/bad_key_usage.pem", + "src/pki/testdata/parse_certificate_unittest/bad_policy_qualifiers.pem", + "src/pki/testdata/parse_certificate_unittest/bad_signature_algorithm_oid.pem", + "src/pki/testdata/parse_certificate_unittest/bad_validity.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_false.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_no_path.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_path_9.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_negative_path.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_not_ca.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_path_too_large.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_255.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_256.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_not_ca.pem", + "src/pki/testdata/parse_certificate_unittest/basic_constraints_unconsumed_data.pem", + "src/pki/testdata/parse_certificate_unittest/cert_algorithm_not_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/cert_data_after_signature.pem", + "src/pki/testdata/parse_certificate_unittest/cert_empty_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/cert_missing_signature.pem", + "src/pki/testdata/parse_certificate_unittest/cert_not_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/cert_signature_not_bit_string.pem", + "src/pki/testdata/parse_certificate_unittest/cert_skeleton.pem", + "src/pki/testdata/parse_certificate_unittest/cert_version3.pem", + "src/pki/testdata/parse_certificate_unittest/crldp_1uri_noissuer.pem", + "src/pki/testdata/parse_certificate_unittest/crldp_3uri_noissuer.pem", + "src/pki/testdata/parse_certificate_unittest/crldp_full_name_as_dirname.pem", + "src/pki/testdata/parse_certificate_unittest/crldp_issuer_as_dirname.pem", + "src/pki/testdata/parse_certificate_unittest/extended_key_usage.pem", + "src/pki/testdata/parse_certificate_unittest/extension_critical.pem", + "src/pki/testdata/parse_certificate_unittest/extension_critical_0.pem", + "src/pki/testdata/parse_certificate_unittest/extension_critical_3.pem", + "src/pki/testdata/parse_certificate_unittest/extension_not_critical.pem", + "src/pki/testdata/parse_certificate_unittest/extensions_data_after_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/extensions_duplicate_key_usage.pem", + "src/pki/testdata/parse_certificate_unittest/extensions_empty_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/extensions_not_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/extensions_real.pem", + "src/pki/testdata/parse_certificate_unittest/failed_signature_algorithm.pem", + "src/pki/testdata/parse_certificate_unittest/inhibit_any_policy.pem", + "src/pki/testdata/parse_certificate_unittest/issuer_bad_printable_string.pem", + "src/pki/testdata/parse_certificate_unittest/key_usage.pem", + "src/pki/testdata/parse_certificate_unittest/name_constraints_bad_ip.pem", + "src/pki/testdata/parse_certificate_unittest/policies.pem", + "src/pki/testdata/parse_certificate_unittest/policy_constraints_empty.pem", + "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit.pem", + "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit_require.pem", + "src/pki/testdata/parse_certificate_unittest/policy_constraints_require.pem", + "src/pki/testdata/parse_certificate_unittest/policy_qualifiers_empty_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/serial_37_bytes.pem", + "src/pki/testdata/parse_certificate_unittest/serial_negative.pem", + "src/pki/testdata/parse_certificate_unittest/serial_not_minimal.pem", + "src/pki/testdata/parse_certificate_unittest/serial_not_number.pem", + "src/pki/testdata/parse_certificate_unittest/serial_zero.pem", + "src/pki/testdata/parse_certificate_unittest/serial_zero_padded.pem", + "src/pki/testdata/parse_certificate_unittest/serial_zero_padded_21_bytes.pem", + "src/pki/testdata/parse_certificate_unittest/signature_algorithm_null.pem", + "src/pki/testdata/parse_certificate_unittest/subject_alt_name.pem", + "src/pki/testdata/parse_certificate_unittest/subject_blank_subjectaltname_not_critical.pem", + "src/pki/testdata/parse_certificate_unittest/subject_key_identifier_not_octet_string.pem", + "src/pki/testdata/parse_certificate_unittest/subject_not_ascii.pem", + "src/pki/testdata/parse_certificate_unittest/subject_not_printable_string.pem", + "src/pki/testdata/parse_certificate_unittest/subject_printable_string_containing_utf8_client_cert.pem", + "src/pki/testdata/parse_certificate_unittest/subject_t61string.pem", + "src/pki/testdata/parse_certificate_unittest/subject_t61string_1-32.pem", + "src/pki/testdata/parse_certificate_unittest/subject_t61string_126-160.pem", + "src/pki/testdata/parse_certificate_unittest/subject_t61string_actual.pem", + "src/pki/testdata/parse_certificate_unittest/subjectaltname_bad_ip.pem", + "src/pki/testdata/parse_certificate_unittest/subjectaltname_dns_not_ascii.pem", + "src/pki/testdata/parse_certificate_unittest/subjectaltname_general_names_empty_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/subjectaltname_trailing_data.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_explicit_v1.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v1.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v1_extensions.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v2_extensions.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_and_subject_unique_id.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_unique_id.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v2_no_optionals.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_all_optionals.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_data_after_extensions.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions_not_sequence.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_no_optionals.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v3_real.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_v4.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_generalized_time.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_utc_time.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_validity_generalized_time_and_utc_time.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_validity_relaxed.pem", + "src/pki/testdata/parse_certificate_unittest/tbs_validity_utc_time_and_generalized_time.pem", + "src/pki/testdata/parse_certificate_unittest/v1_explicit_version.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_match_name_only.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_matching.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_mismatch.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root2.pem", + "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/target.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_a.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_b.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_c.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_a.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_b.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_c.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_a.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_b.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_c.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/root.pem", + "src/pki/testdata/path_builder_unittest/key_id_prioritization/target.pem", + "src/pki/testdata/path_builder_unittest/multi-root-A-by-B.pem", + "src/pki/testdata/path_builder_unittest/multi-root-B-by-C.pem", + "src/pki/testdata/path_builder_unittest/multi-root-B-by-F.pem", + "src/pki/testdata/path_builder_unittest/multi-root-C-by-D.pem", + "src/pki/testdata/path_builder_unittest/multi-root-C-by-E.pem", + "src/pki/testdata/path_builder_unittest/multi-root-D-by-D.pem", + "src/pki/testdata/path_builder_unittest/multi-root-E-by-E.pem", + "src/pki/testdata/path_builder_unittest/multi-root-F-by-E.pem", + "src/pki/testdata/path_builder_unittest/precertificate/precertificate.pem", + "src/pki/testdata/path_builder_unittest/precertificate/root.pem", + "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1.pem", + "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1_cross.pem", + "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root2.pem", + "src/pki/testdata/path_builder_unittest/self_issued_prioritization/target.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ac.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ad.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bc.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bd.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/root.pem", + "src/pki/testdata/path_builder_unittest/validity_date_prioritization/target.pem", + "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-after.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-before.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration-and-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before-ta-with-expiration.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-target/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-after.test", + "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-before.test", + "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-any.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-any.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem", + "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem", + "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.test", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.test", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.test", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.pem", + "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.test", + "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.4.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.10.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.13.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.4.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.7.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.10.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.11.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.9.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.10.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.4.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.10.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.12.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.13.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.15.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.16.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.17.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.20.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.21.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.22.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.23.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.24.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.25.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.26.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.27.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.28.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.29.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.31.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.33.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.34.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.35.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.36.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.37.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.38.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.7.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.9.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.16.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.7.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.10.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.11.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.12.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.16.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.9.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.1.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.12.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.14.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.2.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.4.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.6.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.7.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.9.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.3.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.5.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.7.txt", + "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.8.txt", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration-and-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints-require-basic-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-require-basic-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root-expired.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-constraints.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-expiration.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-and-trust_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-root.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/unspecified-trust-root.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/any.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf-strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict-leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-and-trust_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-not_after.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-wrong_eku.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf_require_self_signed.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf-and-trust_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf_require_self_signed.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-and-trust_anchor.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-not_after.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-wrong_eku.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf_require_self_signed.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only-trusted_leaf.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem", + "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test", + "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_1.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_2.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-dupe_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_attr.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_rdn.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_1.pem", + "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_2.pem", + "src/pki/testdata/verify_name_match_unittest/names/custom-custom-normalized.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-badAttributeType.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-empty.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-extradata.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-onlyOneElement.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-setNotSequence.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-Name-setInsteadOfSequence.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-empty.pem", + "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-sequenceInsteadOfSet.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-normalized.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-unnormalized.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-BMPSTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UNIVERSALSTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UTF8-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UNIVERSALSTRING-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UTF8-unmangled.pem", + "src/pki/testdata/verify_name_match_unittest/names/valid-Name-empty.pem", + "src/pki/testdata/verify_name_match_unittest/names/valid-minimal.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-spki-params-null.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-unused-bits-signature.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecdh-key.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecmqv-key.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-wrong-signature-format.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256-corrupted-data.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256.pem", + "src/pki/testdata/verify_signed_data_unittest/ecdsa-using-rsa-key.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-length.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-null.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-key-params-absent.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-using-pss-key-no-params.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-wrong-algorithm.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-key-encoded-ber.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-spki-non-null-params.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-id-ea-rsa.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-using-pss-key-with-params.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-wrong-salt.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa-using-ec-key.pem", + "src/pki/testdata/verify_signed_data_unittest/rsa2048-pkcs1-sha512.pem", + "src/pki/testdata/verify_unittest/google-intermediate1.der", + "src/pki/testdata/verify_unittest/google-intermediate2.der", + "src/pki/testdata/verify_unittest/google-leaf.der", + "src/pki/testdata/verify_unittest/lencr-intermediate-r3.der", + "src/pki/testdata/verify_unittest/lencr-leaf.der", + "src/pki/testdata/verify_unittest/lencr-root-dst-x3.der", + "src/pki/testdata/verify_unittest/lencr-root-x1-cross-signed.der", + "src/pki/testdata/verify_unittest/lencr-root-x1.der", + "src/pki/testdata/verify_unittest/mozilla_roots.der", + "src/pki/testdata/verify_unittest/self-issued.pem", +] + ssl_test_sources = [ - "src/crypto/test/abi_test.cc", "src/crypto/test/gtest_main.cc", "src/ssl/span_test.cc", "src/ssl/ssl_c_test.c", "src/ssl/ssl_test.cc", ] + +pki_test_sources = [ + "src/crypto/test/gtest_main.cc", + "src/pki/cert_issuer_source_static_unittest.cc", + "src/pki/certificate_policies_unittest.cc", + "src/pki/certificate_unittest.cc", + "src/pki/crl_unittest.cc", + "src/pki/encode_values_unittest.cc", + "src/pki/extended_key_usage_unittest.cc", + "src/pki/general_names_unittest.cc", + "src/pki/input_unittest.cc", + "src/pki/ip_util_unittest.cc", + "src/pki/mock_signature_verify_cache.cc", + "src/pki/name_constraints_unittest.cc", + "src/pki/nist_pkits_unittest.cc", + "src/pki/ocsp_unittest.cc", + "src/pki/parse_certificate_unittest.cc", + "src/pki/parse_name_unittest.cc", + "src/pki/parse_values_unittest.cc", + "src/pki/parsed_certificate_unittest.cc", + "src/pki/parser_unittest.cc", + "src/pki/path_builder_pkits_unittest.cc", + "src/pki/path_builder_unittest.cc", + "src/pki/path_builder_verify_certificate_chain_unittest.cc", + "src/pki/pem_unittest.cc", + "src/pki/signature_algorithm_unittest.cc", + "src/pki/simple_path_builder_delegate_unittest.cc", + "src/pki/string_util_unittest.cc", + "src/pki/test_helpers.cc", + "src/pki/trust_store_collection_unittest.cc", + "src/pki/trust_store_in_memory_unittest.cc", + "src/pki/verify_certificate_chain_pkits_unittest.cc", + "src/pki/verify_certificate_chain_unittest.cc", + "src/pki/verify_name_match_unittest.cc", + "src/pki/verify_signed_data_unittest.cc", + "src/pki/verify_unittest.cc", +] diff --git a/third_party/boringssl/repo/src b/third_party/boringssl/repo/src index c8d31372f73427..9cac8a6b38c1cb 160000 --- a/third_party/boringssl/repo/src +++ b/third_party/boringssl/repo/src @@ -1 +1 @@ -Subproject commit c8d31372f7342707d8c6e40c814ce1b64fe36086 +Subproject commit 9cac8a6b38c1cbd45c77aee108411d588da006fe From b6e1a482745b02931f1282680335c04afca2bf33 Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Tue, 18 Jun 2024 15:39:49 -0400 Subject: [PATCH 05/28] Improve documentation of ScheduleLambda (#33967) * Improve documentation of ScheduleLambda Problem: - SystemLayer::ScheduleLambda is critical to allow correct context updates to data, but it was claimed it had to be executed in Matter context already, which is the opposite of the point of the method. Fixes #26538 This PR: - Improves the documentation of several methods in SystemLayer.h - Makes ScheduleLambdaBridge private (not called elsewhere) - Adds a static assert to avoid arguments on the lambda Testing done: - All unit tests still pass * Restyled by clang-format --------- Co-authored-by: Restyled.io --- src/system/SystemLayer.h | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/system/SystemLayer.h b/src/system/SystemLayer.h index d91a80d9be8f57..76d778a59a6d79 100644 --- a/src/system/SystemLayer.h +++ b/src/system/SystemLayer.h @@ -25,6 +25,9 @@ #pragma once +#include +#include + // Include configuration headers #include @@ -47,8 +50,6 @@ #include #endif // CHIP_SYSTEM_CONFIG_USE_DISPATCH/LIBEV -#include - namespace chip { namespace System { @@ -181,9 +182,11 @@ class DLL_EXPORT Layer /** * @brief - * Schedules a function with a signature identical to `OnCompleteFunct` to be run as soon as possible in the Matter context. - * This must only be called when already in the Matter context (from the Matter event loop, or while holding the Matter - * stack lock). + * Schedules a `TimerCompleteCallback` to be run as soon as possible in the Matter context. + * + * WARNING: This must only be called when already in the Matter context (from the Matter event loop, or + * while holding the Matter stack lock). The `PlatformMgr::ScheduleWork()` equivalent method + * is safe to call outside Matter context. * * @param[in] aComplete A pointer to a callback function to be called when this timer fires. * @param[in] aAppState A pointer to an application state object to be passed to the callback function as argument. @@ -196,31 +199,29 @@ class DLL_EXPORT Layer /** * @brief - * Schedules a lambda even to be run as soon as possible in the CHIP context. This function is not thread-safe, - * it must be called with in the CHIP context + * Schedules a lambda object to be run as soon as possible in the Matter context. * - * @param[in] event A object encapsulate the context of a lambda + * This is safe to call from any context and will guarantee execution in Matter context. + * Note that the Lambda's capture have to fit within `CHIP_CONFIG_LAMBDA_EVENT_SIZE` bytes. * - * @retval CHIP_NO_ERROR On success. - * @retval other Platform-specific errors generated indicating the reason for failure. - */ - CHIP_ERROR ScheduleLambdaBridge(LambdaBridge && event); - - /** - * @brief - * Schedules a lambda object to be run as soon as possible in the CHIP context. This function is not thread-safe, - * it must be called with in the CHIP context + * @param[in] lambda The Lambda to execute in Matter context. + * + * @retval CHIP_NO_ERROR On success. + * @retval other Platform-specific errors generated indicating the reason for failure. */ template CHIP_ERROR ScheduleLambda(const Lambda & lambda) { + static_assert(std::is_invocable_v, "lambda argument must be an invocable with no arguments"); LambdaBridge bridge; bridge.Initialize(lambda); return ScheduleLambdaBridge(std::move(bridge)); } private: - // Copy and assignment NOT DEFINED + CHIP_ERROR ScheduleLambdaBridge(LambdaBridge && bridge); + + // Not copyable Layer(const Layer &) = delete; Layer & operator=(const Layer &) = delete; }; From dacf5608f2954b5759aece0a6b7116c6368bc458 Mon Sep 17 00:00:00 2001 From: Yufeng Wang Date: Tue, 18 Jun 2024 13:08:59 -0700 Subject: [PATCH 06/28] =?UTF-8?q?[Fabric=20Bridge]=20Overwrite=20the=20def?= =?UTF-8?q?ault=20implementation=20of=20Administrator=20Commissioning=20C?= =?UTF-8?q?=E2=80=A6=20(#33909)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Overwrite the default implementation of Administrator Commissioning Cluster * Address review comments --- examples/fabric-bridge-app/linux/main.cpp | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/examples/fabric-bridge-app/linux/main.cpp b/examples/fabric-bridge-app/linux/main.cpp index 3ad6a5a1b20fe1..f4217a14868972 100644 --- a/examples/fabric-bridge-app/linux/main.cpp +++ b/examples/fabric-bridge-app/linux/main.cpp @@ -36,6 +36,10 @@ using namespace chip; +using namespace chip::app; +using namespace chip::app::Clusters; +using namespace chip::app::Clusters::AdministratorCommissioning; + #define ZCL_DESCRIPTOR_CLUSTER_REVISION (1u) #define ZCL_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER_REVISION (2u) #define ZCL_BRIDGED_DEVICE_BASIC_INFORMATION_FEATURE_MAP (0u) @@ -97,10 +101,62 @@ void AttemptRpcClientConnect(System::Layer * systemLayer, void * appState) } #endif // defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE +class AdministratorCommissioningCommandHandler : public CommandHandlerInterface +{ +public: + // Register for the AdministratorCommissioning cluster on all endpoints. + AdministratorCommissioningCommandHandler() : + CommandHandlerInterface(Optional::Missing(), AdministratorCommissioning::Id) + {} + + void InvokeCommand(HandlerContext & handlerContext) override; +}; + +void AdministratorCommissioningCommandHandler::InvokeCommand(HandlerContext & handlerContext) +{ + using Protocols::InteractionModel::Status; + + EndpointId endpointId = handlerContext.mRequestPath.mEndpointId; + ChipLogProgress(NotSpecified, "Received command to open commissioning window on Endpoind: %d", endpointId); + + if (handlerContext.mRequestPath.mCommandId != Commands::OpenCommissioningWindow::Id || endpointId == kRootEndpointId) + { + // Proceed with default handling in Administrator Commissioning Server + return; + } + + handlerContext.SetCommandHandled(); + Status status = Status::Success; + +#if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE + Device * device = DeviceMgr().GetDevice(endpointId); + + // TODO: issues:#33784, need to make OpenCommissioningWindow synchronous + if (device != nullptr && OpenCommissioningWindow(device->GetNodeId()) == CHIP_NO_ERROR) + { + ChipLogProgress(NotSpecified, "Commissioning window is now open"); + } + else + { + status = Status::Failure; + ChipLogProgress(NotSpecified, "Commissioning window is failed to open"); + } +#else + status = Status::Failure; + ChipLogProgress(NotSpecified, "Commissioning window failed to open: PW_RPC_FABRIC_BRIDGE_SERVICE not defined"); +#endif // defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE + + handlerContext.mCommandHandler.AddStatus(handlerContext.mRequestPath, status); +} + +AdministratorCommissioningCommandHandler gAdministratorCommissioningCommandHandler; + } // namespace void ApplicationInit() { + InteractionModelEngine::GetInstance()->RegisterCommandHandler(&gAdministratorCommissioningCommandHandler); + #if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE InitRpcServer(kFabricBridgeServerPort); AttemptRpcClientConnect(&DeviceLayer::SystemLayer(), nullptr); From e22266b34409c409ae7000b4e8b8b44f17233980 Mon Sep 17 00:00:00 2001 From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:24:23 -0400 Subject: [PATCH 07/28] =?UTF-8?q?Apply=20ColorTempPhysicalMaxMireds=20when?= =?UTF-8?q?=20ColorTemperatureMaximumMireds=20f=E2=80=A6=20(#33983)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Apply ColorTempPhysicalMaxMireds when ColorTemperatureMaximumMireds field is 0. Add tests * Restyled by whitespace * Restyled by prettier-yaml * Change wait time to 1 sec as rate is calculated in step per second * Add code comment, fix typo in test command --------- Co-authored-by: Restyled.io --- .../color-control-server.cpp | 14 +++- .../suites/certification/Test_TC_CC_6_2.yaml | 79 +++++++++++++++++ .../suites/certification/Test_TC_CC_6_3.yaml | 84 +++++++++++++++++++ 3 files changed, 175 insertions(+), 2 deletions(-) diff --git a/src/app/clusters/color-control-server/color-control-server.cpp b/src/app/clusters/color-control-server/color-control-server.cpp index 784bca88b85955..558703a8f12fce 100644 --- a/src/app/clusters/color-control-server/color-control-server.cpp +++ b/src/app/clusters/color-control-server/color-control-server.cpp @@ -2693,11 +2693,16 @@ bool ColorControlServer::moveColorTempCommand(app::CommandHandler * commandObj, return true; } + // Per spec, colorTemperatureMinimumMireds field is limited to ColorTempPhysicalMinMireds and + // when colorTemperatureMinimumMireds field is 0, ColorTempPhysicalMinMireds shall be used (always >= to 0) if (colorTemperatureMinimum < tempPhysicalMin) { colorTemperatureMinimum = tempPhysicalMin; } - if (colorTemperatureMaximum > tempPhysicalMax) + + // Per spec, colorTemperatureMaximumMireds field is limited to ColorTempPhysicalMaxMireds and + // when colorTemperatureMaximumMireds field is 0, ColorTempPhysicalMaxMireds shall be used + if ((colorTemperatureMaximum == 0) || (colorTemperatureMaximum > tempPhysicalMax)) { colorTemperatureMaximum = tempPhysicalMax; } @@ -2804,11 +2809,16 @@ bool ColorControlServer::stepColorTempCommand(app::CommandHandler * commandObj, Attributes::ColorTempPhysicalMinMireds::Get(endpoint, &tempPhysicalMin); Attributes::ColorTempPhysicalMaxMireds::Get(endpoint, &tempPhysicalMax); + // Per spec, colorTemperatureMinimumMireds field is limited to ColorTempPhysicalMinMireds and + // when colorTemperatureMinimumMireds field is 0, ColorTempPhysicalMinMireds shall be used (always >= to 0) if (colorTemperatureMinimum < tempPhysicalMin) { colorTemperatureMinimum = tempPhysicalMin; } - if (colorTemperatureMaximum > tempPhysicalMax) + + // Per spec, colorTemperatureMaximumMireds field is limited to ColorTempPhysicalMaxMireds and + // when colorTemperatureMaximumMireds field is 0, ColorTempPhysicalMaxMireds shall be used + if ((colorTemperatureMaximum == 0) || (colorTemperatureMaximum > tempPhysicalMax)) { colorTemperatureMaximum = tempPhysicalMax; } diff --git a/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml index fcb4f1c7691e8c..f5259372823048 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml @@ -364,6 +364,85 @@ tests: constraints: minValue: 0 maxValue: 3 + - label: + "Step 6a: TH sends MoveColorTemperature command to DUT with MoveMode = + 0x03(down), Rate = 65535 (max value) with + ColorTemperatureMinimumMireds of 0" + PICS: CC.S.F04 && CC.S.C4b.Rsp + command: MoveColorTemperature + arguments: + values: + - name: "MoveMode" + value: 3 + - name: "Rate" + value: 65535 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: ColorTempPhysicalMaxMiredsValue + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + + - label: "Wait 1s" + PICS: CC.S.F04 + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: 1000 + + - label: "Step 6b: TH reads ColorTemperatureMireds attribute from DUT." + PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4b.Rsp + command: "readAttribute" + attribute: "ColorTemperatureMireds" + response: + value: ColorTempPhysicalMinMiredsValue + constraints: + minValue: ColorTempPhysicalMinMiredsValue + maxValue: ColorTempPhysicalMaxMiredsValue + + - label: + "Step 7a: TH sends MoveColorTemperature command to DUT with MoveMode = + 0x01(up), Rate = 65535 (max value) with ColorTemperatureMaximumMireds + of 0" + PICS: CC.S.F04 && CC.S.C4b.Rsp + command: MoveColorTemperature + arguments: + values: + - name: "MoveMode" + value: 1 + - name: "Rate" + value: 65535 + - name: "ColorTemperatureMinimumMireds" + value: ColorTempPhysicalMinMiredsValue + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + + - label: "Wait 1s" + PICS: CC.S.F04 + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: 1000 + + - label: "Step 7b: TH reads ColorTemperatureMireds attribute from DUT." + PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4b.Rsp + command: "readAttribute" + attribute: "ColorTemperatureMireds" + response: + value: ColorTempPhysicalMaxMiredsValue + constraints: + minValue: ColorTempPhysicalMinMiredsValue + maxValue: ColorTempPhysicalMaxMiredsValue - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp diff --git a/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml index 934a4a3bfc243a..437ef78af33f27 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml @@ -287,6 +287,90 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends StepColorTemperature command to DUT with StepMode = + 0x01 (up), StepSize = ColorTempPhysicalMaxMireds and TransitionTime = + 0 (instant)." + PICS: CC.S.F04 && CC.S.C4c.Rsp + command: "StepColorTemperature" + arguments: + values: + - name: "StepMode" + value: 1 + - name: "StepSize" + value: ColorTempPhysicalMaxMiredsValue + - name: "ColorTemperatureMinimumMireds" + value: ColorTempPhysicalMinMiredsValue + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + + - label: "Wait 100ms" + PICS: CC.S.F04 + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: 100 + + - label: "Step 5b: TH reads ColorTemperatureMireds attribute from DUT." + PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4c.Rsp + command: "readAttribute" + attribute: "ColorTemperatureMireds" + response: + value: ColorTempPhysicalMaxMiredsValue + constraints: + minValue: ColorTempPhysicalMinMiredsValue + maxValue: ColorTempPhysicalMaxMiredsValue + + - label: + "Step 6a: TH sends StepColorTemperature command to DUT with StepMode = + 0x03 (down), StepSize = ColorTempPhysicalMaxMireds and TransitionTime + = 0 (instant)." + PICS: CC.S.F04 && CC.S.C4c.Rsp + command: "StepColorTemperature" + arguments: + values: + - name: "StepMode" + value: 3 + - name: "StepSize" + value: ColorTempPhysicalMaxMiredsValue + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: ColorTempPhysicalMaxMiredsValue + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + + - label: "Wait 100ms" + PICS: CC.S.F04 + cluster: "DelayCommands" + command: "WaitForMs" + arguments: + values: + - name: "ms" + value: 100 + + - label: "Step 6b: TH reads ColorTemperatureMireds attribute from DUT." + PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4c.Rsp + command: "readAttribute" + attribute: "ColorTemperatureMireds" + response: + value: ColorTempPhysicalMinMiredsValue + constraints: + minValue: ColorTempPhysicalMinMiredsValue + maxValue: ColorTempPhysicalMaxMiredsValue + - label: "Turn Off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" From bec5fc3cbd3a13684f2161f889009f09ff394f61 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 18 Jun 2024 23:16:47 +0200 Subject: [PATCH 08/28] [Python] Make Commissioning APIs more pythonic and consistent (#33905) * [Python] Make Commissioning APIs more pythonic and consistent This commit makes the commissioning APIs more pythonic and consistent by not returning PyChipError but simply raising ChipStackError exceptions on errors instead. The return value instead returns the effectively assigned node ID as defined by the NOC. If the SDK ends up generating that NOC, it will use the thing passed to PairDevice, so those will match with what is provided when calling the commissioning API. * [Python] Adjust tests to use new commissioning error handling --- src/controller/python/chip/ChipDeviceCtrl.py | 95 +++++++++++-------- src/controller/python/chip/yaml/runner.py | 6 +- .../python/test/test_scripts/base.py | 28 ++++-- src/python_testing/TC_ACE_1_5.py | 4 +- src/python_testing/TC_CGEN_2_4.py | 24 +++-- src/python_testing/TC_DA_1_5.py | 3 +- src/python_testing/TC_TIMESYNC_2_13.py | 3 +- .../TestCommissioningTimeSync.py | 3 +- src/python_testing/matter_testing_support.py | 72 +++++++++----- .../integration-tests/common/utils.py | 5 +- 10 files changed, 143 insertions(+), 100 deletions(-) diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 736bfae0a5cf85..6e03e7a77f2d19 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -230,11 +230,14 @@ class CommissionableNode(discovery.CommissionableNode): def SetDeviceController(self, devCtrl: 'ChipDeviceController'): self._devCtrl = devCtrl - def Commission(self, nodeId: int, setupPinCode: int) -> PyChipError: + def Commission(self, nodeId: int, setupPinCode: int) -> int: ''' Commission the device using the device controller discovered this device. nodeId: The nodeId commissioned to the device setupPinCode: The setup pin code of the device + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) ''' return self._devCtrl.CommissionOnNetwork( nodeId, setupPinCode, filterType=discovery.FilterType.INSTANCE_NAME, filter=self.instanceName) @@ -365,7 +368,10 @@ def HandleCommissioningComplete(nodeId: int, err: PyChipError): logging.exception("HandleCommissioningComplete called unexpectedly") return - self._commissioning_complete_future.set_result(err) + if err.is_success: + self._commissioning_complete_future.set_result(nodeId) + else: + self._commissioning_complete_future.set_exception(err.to_exception()) def HandleFabricCheck(nodeId): self.fabricCheckNodeId = nodeId @@ -413,14 +419,17 @@ def HandlePASEEstablishmentComplete(err: PyChipError): # During Commissioning, HandlePASEEstablishmentComplete will also be called. # Only complete the future if PASE session establishment failed. if not err.is_success: - self._commissioning_complete_future.set_result(err) + self._commissioning_complete_future.set_exception(err.to_exception()) return if self._pase_establishment_complete_future is None: logging.exception("HandlePASEEstablishmentComplete called unexpectedly") return - self._pase_establishment_complete_future.set_result(err) + if err.is_success: + self._pase_establishment_complete_future.set_result(None) + else: + self._pase_establishment_complete_future.set_exception(err.to_exception()) self.pairingDelegate = pairingDelegate self.devCtrl = devCtrl @@ -538,7 +547,12 @@ def IsConnected(self): self.devCtrl) ) - def ConnectBLE(self, discriminator: int, setupPinCode: int, nodeid: int, isShortDiscriminator: bool = False) -> PyChipError: + def ConnectBLE(self, discriminator: int, setupPinCode: int, nodeid: int, isShortDiscriminator: bool = False) -> int: + """Connect to a BLE device using the given discriminator and setup pin code. + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) + """ self.CheckIsActive() self._commissioning_complete_future = concurrent.futures.Future() @@ -550,11 +564,7 @@ def ConnectBLE(self, discriminator: int, setupPinCode: int, nodeid: int, isShort self.devCtrl, discriminator, isShortDiscriminator, setupPinCode, nodeid) ).raise_on_error() - # TODO: Change return None. Only returning on success is not useful. - # but that is what the previous implementation did. - res = self._commissioning_complete_future.result() - res.raise_on_error() - return res + return self._commissioning_complete_future.result() finally: self._commissioning_complete_future = None @@ -600,7 +610,7 @@ def CloseSession(self, nodeid): self.devCtrl, nodeid) ).raise_on_error() - def EstablishPASESessionBLE(self, setupPinCode: int, discriminator: int, nodeid: int): + def EstablishPASESessionBLE(self, setupPinCode: int, discriminator: int, nodeid: int) -> None: self.CheckIsActive() self._pase_establishment_complete_future = concurrent.futures.Future() @@ -611,16 +621,11 @@ def EstablishPASESessionBLE(self, setupPinCode: int, discriminator: int, nodeid: self.devCtrl, setupPinCode, discriminator, nodeid) ).raise_on_error() - # TODO: This is a bit funky, but what the API returned with the previous - # implementation. We should revisit this. - err = self._pase_establishment_complete_future.result() - if not err.is_success: - return err.to_exception() - return None + self._pase_establishment_complete_future.result() finally: self._pase_establishment_complete_future = None - def EstablishPASESessionIP(self, ipaddr: str, setupPinCode: int, nodeid: int, port: int = 0): + def EstablishPASESessionIP(self, ipaddr: str, setupPinCode: int, nodeid: int, port: int = 0) -> None: self.CheckIsActive() self._pase_establishment_complete_future = concurrent.futures.Future() @@ -631,16 +636,11 @@ def EstablishPASESessionIP(self, ipaddr: str, setupPinCode: int, nodeid: int, po self.devCtrl, ipaddr.encode("utf-8"), setupPinCode, nodeid, port) ).raise_on_error() - # TODO: This is a bit funky, but what the API returned with the previous - # implementation. We should revisit this. - err = self._pase_establishment_complete_future.result() - if not err.is_success: - return err.to_exception() - return None + self._pase_establishment_complete_future.result() finally: self._pase_establishment_complete_future = None - def EstablishPASESession(self, setUpCode: str, nodeid: int): + def EstablishPASESession(self, setUpCode: str, nodeid: int) -> None: self.CheckIsActive() self._pase_establishment_complete_future = concurrent.futures.Future() @@ -651,12 +651,7 @@ def EstablishPASESession(self, setUpCode: str, nodeid: int): self.devCtrl, setUpCode.encode("utf-8"), nodeid) ).raise_on_error() - # TODO: This is a bit funky, but what the API returned with the previous - # implementation. We should revisit this. - err = self._pase_establishment_complete_future.result() - if not err.is_success: - return err.to_exception() - return None + self._pase_establishment_complete_future.result() finally: self._pase_establishment_complete_future = None @@ -1874,17 +1869,19 @@ def caIndex(self) -> int: def fabricAdmin(self) -> FabricAdmin: return self._fabricAdmin - def Commission(self, nodeid) -> PyChipError: + def Commission(self, nodeid) -> int: ''' Start the auto-commissioning process on a node after establishing a PASE connection. This function is intended to be used in conjunction with `EstablishPASESessionBLE` or `EstablishPASESessionIP`. It can be called either before or after the DevicePairingDelegate receives the OnPairingComplete call. Commissioners that want to perform simple - auto-commissioning should use the supplied "PairDevice" functions above, which will + auto-commissioning should use the supplied "CommissionWithCode" function, which will establish the PASE connection and commission automatically. - Return: - bool: True if successful, False otherwise. + Raises a ChipStackError on failure. + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) ''' self.CheckIsActive() @@ -1900,13 +1897,13 @@ def Commission(self, nodeid) -> PyChipError: finally: self._commissioning_complete_future = None - def CommissionThread(self, discriminator, setupPinCode, nodeId, threadOperationalDataset: bytes, isShortDiscriminator: bool = False) -> PyChipError: + def CommissionThread(self, discriminator, setupPinCode, nodeId, threadOperationalDataset: bytes, isShortDiscriminator: bool = False) -> int: ''' Commissions a Thread device over BLE ''' self.SetThreadOperationalDataset(threadOperationalDataset) return self.ConnectBLE(discriminator, setupPinCode, nodeId, isShortDiscriminator) - def CommissionWiFi(self, discriminator, setupPinCode, nodeId, ssid: str, credentials: str, isShortDiscriminator: bool = False) -> PyChipError: + def CommissionWiFi(self, discriminator, setupPinCode, nodeId, ssid: str, credentials: str, isShortDiscriminator: bool = False) -> int: ''' Commissions a Wi-Fi device over BLE. ''' self.SetWiFiCredentials(ssid, credentials) @@ -2009,7 +2006,7 @@ def GetFabricCheckResult(self) -> int: return self.fabricCheckNodeId def CommissionOnNetwork(self, nodeId: int, setupPinCode: int, - filterType: DiscoveryFilterType = DiscoveryFilterType.NONE, filter: typing.Any = None, discoveryTimeoutMsec: int = 30000) -> PyChipError: + filterType: DiscoveryFilterType = DiscoveryFilterType.NONE, filter: typing.Any = None, discoveryTimeoutMsec: int = 30000) -> int: ''' Does the routine for OnNetworkCommissioning, with a filter for mDNS discovery. Supported filters are: @@ -2025,6 +2022,11 @@ def CommissionOnNetwork(self, nodeId: int, setupPinCode: int, DiscoveryFilterType.COMPRESSED_FABRIC_ID The filter can be an integer, a string or None depending on the actual type of selected filter. + + Raises a ChipStackError on failure. + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) ''' self.CheckIsActive() @@ -2044,9 +2046,14 @@ def CommissionOnNetwork(self, nodeId: int, setupPinCode: int, finally: self._commissioning_complete_future = None - def CommissionWithCode(self, setupPayload: str, nodeid: int, discoveryType: DiscoveryType = DiscoveryType.DISCOVERY_ALL) -> PyChipError: + def CommissionWithCode(self, setupPayload: str, nodeid: int, discoveryType: DiscoveryType = DiscoveryType.DISCOVERY_ALL) -> int: ''' Commission with the given nodeid from the setupPayload. setupPayload may be a QR or manual code. + + Raises a ChipStackError on failure. + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) ''' self.CheckIsActive() @@ -2063,8 +2070,14 @@ def CommissionWithCode(self, setupPayload: str, nodeid: int, discoveryType: Disc finally: self._commissioning_complete_future = None - def CommissionIP(self, ipaddr: str, setupPinCode: int, nodeid: int) -> PyChipError: - """ DEPRECATED, DO NOT USE! Use `CommissionOnNetwork` or `CommissionWithCode` """ + def CommissionIP(self, ipaddr: str, setupPinCode: int, nodeid: int) -> int: + """ DEPRECATED, DO NOT USE! Use `CommissionOnNetwork` or `CommissionWithCode` + + Raises a ChipStackError on failure. + + Returns: + - Effective Node ID of the device (as defined by the assigned NOC) + """ self.CheckIsActive() self._commissioning_complete_future = concurrent.futures.Future() diff --git a/src/controller/python/chip/yaml/runner.py b/src/controller/python/chip/yaml/runner.py index fb7a71bd457715..312940f34bffd5 100644 --- a/src/controller/python/chip/yaml/runner.py +++ b/src/controller/python/chip/yaml/runner.py @@ -664,10 +664,10 @@ async def run_action(self, dev_ctrl: ChipDeviceController) -> _ActionResult: if self._command == 'GetCommissionerNodeId': return _ActionResult(status=_ActionStatus.SUCCESS, response=_GetCommissionerNodeIdResult(dev_ctrl.nodeId)) - resp = dev_ctrl.CommissionWithCode(self._setup_payload, self._node_id) - if resp: + try: + dev_ctrl.CommissionWithCode(self._setup_payload, self._node_id) return _ActionResult(status=_ActionStatus.SUCCESS, response=None) - else: + except ChipStackError: return _ActionResult(status=_ActionStatus.ERROR, response=None) diff --git a/src/controller/python/test/test_scripts/base.py b/src/controller/python/test/test_scripts/base.py index 3f9f76d9101874..1861627c0cbff4 100644 --- a/src/controller/python/test/test_scripts/base.py +++ b/src/controller/python/test/test_scripts/base.py @@ -41,6 +41,7 @@ from chip import ChipDeviceCtrl from chip.ChipStack import ChipStack from chip.crypto import p256keypair +from chip.exceptions import ChipStackException from chip.utils import CommissioningBuildingBlocks from cirque_restart_remote_device import restartRemoteDevice from ecdsa import NIST256p @@ -256,8 +257,9 @@ def TestPaseOnly(self, ip: str, setuppin: int, nodeid: int, devCtrl=None): devCtrl = self.devCtrl self.logger.info( "Attempting to establish PASE session with device id: {} addr: {}".format(str(nodeid), ip)) - if devCtrl.EstablishPASESessionIP( - ip, setuppin, nodeid) is not None: + try: + devCtrl.EstablishPASESessionIP(ip, setuppin, nodeid) + except ChipStackException: self.logger.info( "Failed to establish PASE session with device id: {} addr: {}".format(str(nodeid), ip)) return False @@ -268,7 +270,9 @@ def TestPaseOnly(self, ip: str, setuppin: int, nodeid: int, devCtrl=None): def TestCommissionOnly(self, nodeid: int): self.logger.info( "Commissioning device with id {}".format(nodeid)) - if not self.devCtrl.Commission(nodeid): + try: + self.devCtrl.Commission(nodeid) + except ChipStackException: self.logger.info( "Failed to commission device with id {}".format(str(nodeid))) return False @@ -311,8 +315,10 @@ def TestCommissionFailureOnReport(self, nodeid: int, failAfter: int): def TestCommissioning(self, ip: str, setuppin: int, nodeid: int): self.logger.info("Commissioning device {}".format(ip)) - if not self.devCtrl.CommissionIP(ip, setuppin, nodeid): - self.logger.info( + try: + self.devCtrl.CommissionIP(ip, setuppin, nodeid) + except ChipStackException: + self.logger.exception( "Failed to finish commissioning device {}".format(ip)) return False self.logger.info("Commissioning finished.") @@ -320,8 +326,10 @@ def TestCommissioning(self, ip: str, setuppin: int, nodeid: int): def TestCommissioningWithSetupPayload(self, setupPayload: str, nodeid: int, discoveryType: int = 2): self.logger.info("Commissioning device with setup payload {}".format(setupPayload)) - if not self.devCtrl.CommissionWithCode(setupPayload, nodeid, chip.discovery.DiscoveryType(discoveryType)): - self.logger.info( + try: + self.devCtrl.CommissionWithCode(setupPayload, nodeid, chip.discovery.DiscoveryType(discoveryType)) + except ChipStackException: + self.logger.exception( "Failed to finish commissioning device {}".format(setupPayload)) return False self.logger.info("Commissioning finished.") @@ -783,8 +791,10 @@ async def TestMultiFabric(self, ip: str, setuppin: int, nodeid: int): self.devCtrl2 = self.fabricAdmin2.NewController( self.controllerNodeId, self.paaTrustStorePath) - if not self.devCtrl2.CommissionIP(ip, setuppin, nodeid): - self.logger.info( + try: + self.devCtrl2.CommissionIP(ip, setuppin, nodeid) + except ChipStackException: + self.logger.exception( "Failed to finish key exchange with device {}".format(ip)) return False diff --git a/src/python_testing/TC_ACE_1_5.py b/src/python_testing/TC_ACE_1_5.py index 93c3fce5c58c11..bab70260fc6508 100644 --- a/src/python_testing/TC_ACE_1_5.py +++ b/src/python_testing/TC_ACE_1_5.py @@ -54,10 +54,10 @@ async def test_TC_ACE_1_5(self): params = self.openCommissioningWindow(self.th1, self.dut_node_id) self.print_step(2, "TH1 opens the commissioning window on the DUT") - errcode = self.th2.CommissionOnNetwork( + self.th2.CommissionOnNetwork( nodeId=self.dut_node_id, setupPinCode=params.commissioningParameters.setupPinCode, filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=params.randomDiscriminator) - logging.info('Commissioning complete done. Successful? {}, errorcode = {}'.format(errcode.is_success, errcode)) + logging.info('Commissioning complete done. Successful.') self.print_step(3, "TH2 commissions DUT using admin node ID N2") self.print_step(4, "TH2 reads its fabric index from the Operational Credentials cluster CurrentFabricIndex attribute") diff --git a/src/python_testing/TC_CGEN_2_4.py b/src/python_testing/TC_CGEN_2_4.py index 7bb2e6d21d3d73..fcfe2aaf044d3d 100644 --- a/src/python_testing/TC_CGEN_2_4.py +++ b/src/python_testing/TC_CGEN_2_4.py @@ -25,6 +25,7 @@ import chip.FabricAdmin from chip import ChipDeviceCtrl from chip.ChipDeviceCtrl import CommissioningParameters +from chip.exceptions import ChipStackError from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main from mobly import asserts @@ -60,11 +61,12 @@ async def CommissionToStageSendCompleteAndCleanup( # This will run the commissioning up to the point where stage x is run and the # response is sent before the test commissioner simulates a failure self.th2.SetTestCommissionerPrematureCompleteAfter(stage) - errcode = self.th2.CommissionOnNetwork( - nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, - filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) - logging.info('Commissioning complete done. Successful? {}, errorcode = {}'.format(errcode.is_success, errcode)) - asserts.assert_false(errcode.is_success, 'Commissioning complete did not error as expected') + ctx = asserts.assert_raises(ChipStackError) + with ctx: + self.th2.CommissionOnNetwork( + nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, + filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) + errcode = ctx.exception.chip_error asserts.assert_true(errcode.sdk_part == expectedErrorPart, 'Unexpected error type returned from CommissioningComplete') asserts.assert_true(errcode.sdk_code == expectedErrCode, 'Unexpected error code returned from CommissioningComplete') revokeCmd = Clusters.AdministratorCommissioning.Commands.RevokeCommissioning() @@ -101,10 +103,14 @@ async def test_TC_CGEN_2_4(self): logging.info('Step 16 - TH2 fully commissions the DUT') self.th2.ResetTestCommissioner() - errcode = self.th2.CommissionOnNetwork( - nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, - filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) - logging.info('Commissioning complete done. Successful? {}, errorcode = {}'.format(errcode.is_success, errcode)) + + ctx = asserts.assert_raises(ChipStackError) + with ctx: + self.th2.CommissionOnNetwork( + nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, + filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) + asserts.assert_true(ctx.exception.chip_error.sdk_code == 0x02, 'Unexpected error code returned from CommissioningComplete') + logging.info('Commissioning complete done.') logging.info('Step 17 - TH1 sends an arm failsafe') cmd = Clusters.GeneralCommissioning.Commands.ArmFailSafe(expiryLengthSeconds=900, breadcrumb=0) diff --git a/src/python_testing/TC_DA_1_5.py b/src/python_testing/TC_DA_1_5.py index 567d7577604288..17c6e3c16da0fb 100644 --- a/src/python_testing/TC_DA_1_5.py +++ b/src/python_testing/TC_DA_1_5.py @@ -170,10 +170,9 @@ async def test_TC_DA_1_5(self): new_fabric_admin = new_certificate_authority.NewFabricAdmin(vendorId=0xFFF1, fabricId=2) TH2 = new_fabric_admin.NewController(nodeId=112233) - errcode = TH2.CommissionOnNetwork( + TH2.CommissionOnNetwork( nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=1234) - asserts.assert_true(errcode.is_success, 'Commissioning on TH2 did not complete successfully') self.print_step(15, "Read NOCs list for TH1") temp = await self.read_single_attribute_check_success( diff --git a/src/python_testing/TC_TIMESYNC_2_13.py b/src/python_testing/TC_TIMESYNC_2_13.py index ceabb23e5df5c7..fa43bbd00cffcb 100644 --- a/src/python_testing/TC_TIMESYNC_2_13.py +++ b/src/python_testing/TC_TIMESYNC_2_13.py @@ -53,10 +53,9 @@ async def test_TC_TIMESYNC_2_13(self): new_fabric_admin = new_certificate_authority.NewFabricAdmin(vendorId=0xFFF1, fabricId=2) TH2 = new_fabric_admin.NewController(nodeId=112233) - errcode = TH2.CommissionOnNetwork( + TH2.CommissionOnNetwork( nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=1234) - asserts.assert_true(errcode.is_success, 'Commissioning on TH2 did not complete successfully') self.print_step(3, "TH2 reads the current fabric") th2_fabric_idx = await self.read_single_attribute_check_success( diff --git a/src/python_testing/TestCommissioningTimeSync.py b/src/python_testing/TestCommissioningTimeSync.py index 509aabfc6aa500..0fca7063fcc666 100644 --- a/src/python_testing/TestCommissioningTimeSync.py +++ b/src/python_testing/TestCommissioningTimeSync.py @@ -58,10 +58,9 @@ async def teardown_test(self): async def commission_and_base_checks(self): params = self.default_controller.OpenCommissioningWindow( nodeid=self.dut_node_id, timeout=600, iteration=10000, discriminator=1234, option=1) - errcode = self.commissioner.CommissionOnNetwork( + self.commissioner.CommissionOnNetwork( nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=1234) - asserts.assert_true(errcode.is_success, 'Commissioning did not complete successfully') self.commissioned = True # Check the feature map - if we have a time cluster, we want UTC time to be set diff --git a/src/python_testing/matter_testing_support.py b/src/python_testing/matter_testing_support.py index 9fad2a0d316178..231640f2c3ddf5 100644 --- a/src/python_testing/matter_testing_support.py +++ b/src/python_testing/matter_testing_support.py @@ -1542,35 +1542,55 @@ def _commission_device(self, i) -> bool: info.filter_value = conf.discriminators[i] if conf.commissioning_method == "on-network": - return dev_ctrl.CommissionOnNetwork( - nodeId=conf.dut_node_ids[i], - setupPinCode=info.passcode, - filterType=info.filter_type, - filter=info.filter_value - ) + try: + dev_ctrl.CommissionOnNetwork( + nodeId=conf.dut_node_ids[i], + setupPinCode=info.passcode, + filterType=info.filter_type, + filter=info.filter_value + ) + return True + except ChipStackError as e: + logging.error("Commissioning failed: %s" % e) + return False elif conf.commissioning_method == "ble-wifi": - return dev_ctrl.CommissionWiFi( - info.filter_value, - info.passcode, - conf.dut_node_ids[i], - conf.wifi_ssid, - conf.wifi_passphrase, - isShortDiscriminator=(info.filter_type == DiscoveryFilterType.SHORT_DISCRIMINATOR) - ) + try: + dev_ctrl.CommissionWiFi( + info.filter_value, + info.passcode, + conf.dut_node_ids[i], + conf.wifi_ssid, + conf.wifi_passphrase, + isShortDiscriminator=(info.filter_type == DiscoveryFilterType.SHORT_DISCRIMINATOR) + ) + return True + except ChipStackError as e: + logging.error("Commissioning failed: %s" % e) + return False elif conf.commissioning_method == "ble-thread": - return dev_ctrl.CommissionThread( - info.filter_value, - info.passcode, - conf.dut_node_ids[i], - conf.thread_operational_dataset, - isShortDiscriminator=(info.filter_type == DiscoveryFilterType.SHORT_DISCRIMINATOR) - ) + try: + dev_ctrl.CommissionThread( + info.filter_value, + info.passcode, + conf.dut_node_ids[i], + conf.thread_operational_dataset, + isShortDiscriminator=(info.filter_type == DiscoveryFilterType.SHORT_DISCRIMINATOR) + ) + return True + except ChipStackError as e: + logging.error("Commissioning failed: %s" % e) + return False elif conf.commissioning_method == "on-network-ip": - logging.warning("==== USING A DIRECT IP COMMISSIONING METHOD NOT SUPPORTED IN THE LONG TERM ====") - return dev_ctrl.CommissionIP( - ipaddr=conf.commissionee_ip_address_just_for_testing, - setupPinCode=info.passcode, nodeid=conf.dut_node_ids[i] - ) + try: + logging.warning("==== USING A DIRECT IP COMMISSIONING METHOD NOT SUPPORTED IN THE LONG TERM ====") + dev_ctrl.CommissionIP( + ipaddr=conf.commissionee_ip_address_just_for_testing, + setupPinCode=info.passcode, nodeid=conf.dut_node_ids[i] + ) + return True + except ChipStackError as e: + logging.error("Commissioning failed: %s" % e) + return False else: raise ValueError("Invalid commissioning method %s!" % conf.commissioning_method) diff --git a/src/test_driver/openiotsdk/integration-tests/common/utils.py b/src/test_driver/openiotsdk/integration-tests/common/utils.py index 1865cf6274f6ed..da2dcff787de7a 100644 --- a/src/test_driver/openiotsdk/integration-tests/common/utils.py +++ b/src/test_driver/openiotsdk/integration-tests/common/utils.py @@ -92,14 +92,11 @@ def connect_device(devCtrl, setupPayload, commissionableDevice, nodeId=None): pincode = int(setupPayload.attributes['SetUpPINCode']) try: - res = devCtrl.CommissionOnNetwork( + devCtrl.CommissionOnNetwork( nodeId, pincode, filterType=discovery.FilterType.INSTANCE_NAME, filter=commissionableDevice.instanceName) except exceptions.ChipStackError as ex: log.error("Commission discovered device failed {}".format(str(ex))) return None - if not res: - log.info("Commission discovered device failed: %r" % res) - return None return nodeId From 71e0eb994f3369d10542ead280bd4a5555fa4918 Mon Sep 17 00:00:00 2001 From: bakreanuj <85306569+bakreanuj@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:55:25 -0700 Subject: [PATCH 09/28] Add dimmable plugin unit device type to chef sample apps (#33835) * Add dimmable plugin unit device type to chef sample apps * Add dimmable plugin unit device type to chef sample apps --- ...tnode_dimmablepluginunit_f8a9a0b9d4.matter | 2040 +++++++++ ...rootnode_dimmablepluginunit_f8a9a0b9d4.zap | 3864 +++++++++++++++++ 2 files changed, 5904 insertions(+) create mode 100644 examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter create mode 100644 examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter new file mode 100644 index 00000000000000..9178ac128c2268 --- /dev/null +++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter @@ -0,0 +1,2040 @@ +// This IDL was generated automatically by ZAP. +// It is for view/code review purposes only. + +/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */ +cluster Identify = 3 { + revision 4; + + enum EffectIdentifierEnum : enum8 { + kBlink = 0; + kBreathe = 1; + kOkay = 2; + kChannelChange = 11; + kFinishEffect = 254; + kStopEffect = 255; + } + + enum EffectVariantEnum : enum8 { + kDefault = 0; + } + + enum IdentifyTypeEnum : enum8 { + kNone = 0; + kLightOutput = 1; + kVisibleIndicator = 2; + kAudibleBeep = 3; + kDisplay = 4; + kActuator = 5; + } + + attribute int16u identifyTime = 0; + readonly attribute IdentifyTypeEnum identifyType = 1; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct IdentifyRequest { + int16u identifyTime = 0; + } + + request struct TriggerEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + EffectVariantEnum effectVariant = 1; + } + + /** Command description for Identify */ + command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0; + /** Command description for TriggerEffect */ + command access(invoke: manage) TriggerEffect(TriggerEffectRequest): DefaultSuccess = 64; +} + +/** Attributes and commands for group configuration and manipulation. */ +cluster Groups = 4 { + revision 4; + + bitmap Feature : bitmap32 { + kGroupNames = 0x1; + } + + bitmap NameSupportBitmap : bitmap8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 0; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct AddGroupRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + response struct AddGroupResponse = 0 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct ViewGroupRequest { + group_id groupID = 0; + } + + response struct ViewGroupResponse = 1 { + enum8 status = 0; + group_id groupID = 1; + char_string<16> groupName = 2; + } + + request struct GetGroupMembershipRequest { + group_id groupList[] = 0; + } + + response struct GetGroupMembershipResponse = 2 { + nullable int8u capacity = 0; + group_id groupList[] = 1; + } + + request struct RemoveGroupRequest { + group_id groupID = 0; + } + + response struct RemoveGroupResponse = 3 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct AddGroupIfIdentifyingRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + /** Command description for AddGroup */ + fabric command access(invoke: manage) AddGroup(AddGroupRequest): AddGroupResponse = 0; + /** Command description for ViewGroup */ + fabric command ViewGroup(ViewGroupRequest): ViewGroupResponse = 1; + /** Command description for GetGroupMembership */ + fabric command GetGroupMembership(GetGroupMembershipRequest): GetGroupMembershipResponse = 2; + /** Command description for RemoveGroup */ + fabric command access(invoke: manage) RemoveGroup(RemoveGroupRequest): RemoveGroupResponse = 3; + /** Command description for RemoveAllGroups */ + fabric command access(invoke: manage) RemoveAllGroups(): DefaultSuccess = 4; + /** Command description for AddGroupIfIdentifying */ + fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; +} + +/** Attributes and commands for switching devices between 'On' and 'Off' states. */ +cluster OnOff = 6 { + revision 6; + + enum DelayedAllOffEffectVariantEnum : enum8 { + kDelayedOffFastFade = 0; + kNoFade = 1; + kDelayedOffSlowFade = 2; + } + + enum DyingLightEffectVariantEnum : enum8 { + kDyingLightFadeOff = 0; + } + + enum EffectIdentifierEnum : enum8 { + kDelayedAllOff = 0; + kDyingLight = 1; + } + + enum StartUpOnOffEnum : enum8 { + kOff = 0; + kOn = 1; + kToggle = 2; + } + + bitmap Feature : bitmap32 { + kLighting = 0x1; + kDeadFrontBehavior = 0x2; + kOffOnly = 0x4; + } + + bitmap OnOffControlBitmap : bitmap8 { + kAcceptOnlyWhenOn = 0x1; + } + + readonly attribute boolean onOff = 0; + readonly attribute optional boolean globalSceneControl = 16384; + attribute optional int16u onTime = 16385; + attribute optional int16u offWaitTime = 16386; + attribute access(write: manage) optional nullable StartUpOnOffEnum startUpOnOff = 16387; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct OffWithEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + enum8 effectVariant = 1; + } + + request struct OnWithTimedOffRequest { + OnOffControlBitmap onOffControl = 0; + int16u onTime = 1; + int16u offWaitTime = 2; + } + + /** On receipt of this command, a device SHALL enter its ‘Off’ state. This state is device dependent, but it is recommended that it is used for power off or similar functions. On receipt of the Off command, the OnTime attribute SHALL be set to 0. */ + command Off(): DefaultSuccess = 0; + /** On receipt of this command, a device SHALL enter its ‘On’ state. This state is device dependent, but it is recommended that it is used for power on or similar functions. On receipt of the On command, if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. */ + command On(): DefaultSuccess = 1; + /** On receipt of this command, if a device is in its ‘Off’ state it SHALL enter its ‘On’ state. Otherwise, if it is in its ‘On’ state it SHALL enter its ‘Off’ state. On receipt of the Toggle command, if the value of the OnOff attribute is equal to FALSE and if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. If the value of the OnOff attribute is equal to TRUE, the OnTime attribute SHALL be set to 0. */ + command Toggle(): DefaultSuccess = 2; + /** The OffWithEffect command allows devices to be turned off using enhanced ways of fading. */ + command OffWithEffect(OffWithEffectRequest): DefaultSuccess = 64; + /** The OnWithRecallGlobalScene command allows the recall of the settings when the device was turned off. */ + command OnWithRecallGlobalScene(): DefaultSuccess = 65; + /** The OnWithTimedOff command allows devices to be turned on for a specific duration with a guarded off duration so that SHOULD the device be subsequently switched off, further OnWithTimedOff commands, received during this time, are prevented from turning the devices back on. */ + command OnWithTimedOff(OnWithTimedOffRequest): DefaultSuccess = 66; +} + +/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ +cluster LevelControl = 8 { + revision 5; + + enum MoveModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + enum StepModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : bitmap32 { + kOnOff = 0x1; + kLighting = 0x2; + kFrequency = 0x4; + } + + bitmap OptionsBitmap : bitmap8 { + kExecuteIfOff = 0x1; + kCoupleColorTempToLevel = 0x2; + } + + readonly attribute nullable int8u currentLevel = 0; + readonly attribute optional int16u remainingTime = 1; + readonly attribute optional int8u minLevel = 2; + readonly attribute optional int8u maxLevel = 3; + readonly attribute optional int16u currentFrequency = 4; + readonly attribute optional int16u minFrequency = 5; + readonly attribute optional int16u maxFrequency = 6; + attribute OptionsBitmap options = 15; + attribute optional int16u onOffTransitionTime = 16; + attribute nullable int8u onLevel = 17; + attribute optional nullable int16u onTransitionTime = 18; + attribute optional nullable int16u offTransitionTime = 19; + attribute optional nullable int8u defaultMoveRate = 20; + attribute access(write: manage) optional nullable int8u startUpCurrentLevel = 16384; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct MoveToLevelRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToLevelWithOnOffRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveWithOnOffRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepWithOnOffRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopWithOnOffRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToClosestFrequencyRequest { + int16u frequency = 0; + } + + /** Command description for MoveToLevel */ + command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0; + /** Command description for Move */ + command Move(MoveRequest): DefaultSuccess = 1; + /** Command description for Step */ + command Step(StepRequest): DefaultSuccess = 2; + /** Command description for Stop */ + command Stop(StopRequest): DefaultSuccess = 3; + /** Command description for MoveToLevelWithOnOff */ + command MoveToLevelWithOnOff(MoveToLevelWithOnOffRequest): DefaultSuccess = 4; + /** Command description for MoveWithOnOff */ + command MoveWithOnOff(MoveWithOnOffRequest): DefaultSuccess = 5; + /** Command description for StepWithOnOff */ + command StepWithOnOff(StepWithOnOffRequest): DefaultSuccess = 6; + /** Command description for StopWithOnOff */ + command StopWithOnOff(StopWithOnOffRequest): DefaultSuccess = 7; + /** Change the currrent frequency to the provided one, or a close + approximation if the exact provided one is not possible. */ + command MoveToClosestFrequency(MoveToClosestFrequencyRequest): DefaultSuccess = 8; +} + +/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */ +cluster Descriptor = 29 { + revision 2; + + bitmap Feature : bitmap32 { + kTagList = 0x1; + } + + struct DeviceTypeStruct { + devtype_id deviceType = 0; + int16u revision = 1; + } + + struct SemanticTagStruct { + nullable vendor_id mfgCode = 0; + enum8 namespaceID = 1; + enum8 tag = 2; + optional nullable char_string label = 3; + } + + readonly attribute DeviceTypeStruct deviceTypeList[] = 0; + readonly attribute cluster_id serverList[] = 1; + readonly attribute cluster_id clientList[] = 2; + readonly attribute endpoint_no partsList[] = 3; + readonly attribute optional SemanticTagStruct tagList[] = 4; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** The Binding Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for supporting the binding table. */ +cluster Binding = 30 { + revision 1; // NOTE: Default/not specifically set + + fabric_scoped struct TargetStruct { + optional node_id node = 1; + optional group_id group = 2; + optional endpoint_no endpoint = 3; + optional cluster_id cluster = 4; + fabric_idx fabricIndex = 254; + } + + attribute access(write: manage) TargetStruct binding[] = 0; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** The Access Control Cluster exposes a data model view of a + Node's Access Control List (ACL), which codifies the rules used to manage + and enforce Access Control for the Node's endpoints and their associated + cluster instances. */ +cluster AccessControl = 31 { + revision 1; // NOTE: Default/not specifically set + + enum AccessControlEntryAuthModeEnum : enum8 { + kPASE = 1; + kCASE = 2; + kGroup = 3; + } + + enum AccessControlEntryPrivilegeEnum : enum8 { + kView = 1; + kProxyView = 2; + kOperate = 3; + kManage = 4; + kAdminister = 5; + } + + enum ChangeTypeEnum : enum8 { + kChanged = 0; + kAdded = 1; + kRemoved = 2; + } + + struct AccessControlTargetStruct { + nullable cluster_id cluster = 0; + nullable endpoint_no endpoint = 1; + nullable devtype_id deviceType = 2; + } + + fabric_scoped struct AccessControlEntryStruct { + fabric_sensitive AccessControlEntryPrivilegeEnum privilege = 1; + fabric_sensitive AccessControlEntryAuthModeEnum authMode = 2; + nullable fabric_sensitive int64u subjects[] = 3; + nullable fabric_sensitive AccessControlTargetStruct targets[] = 4; + fabric_idx fabricIndex = 254; + } + + fabric_scoped struct AccessControlExtensionStruct { + fabric_sensitive octet_string<128> data = 1; + fabric_idx fabricIndex = 254; + } + + fabric_sensitive info event access(read: administer) AccessControlEntryChanged = 0 { + nullable node_id adminNodeID = 1; + nullable int16u adminPasscodeID = 2; + ChangeTypeEnum changeType = 3; + nullable AccessControlEntryStruct latestValue = 4; + fabric_idx fabricIndex = 254; + } + + fabric_sensitive info event access(read: administer) AccessControlExtensionChanged = 1 { + nullable node_id adminNodeID = 1; + nullable int16u adminPasscodeID = 2; + ChangeTypeEnum changeType = 3; + nullable AccessControlExtensionStruct latestValue = 4; + fabric_idx fabricIndex = 254; + } + + attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0; + attribute access(read: administer, write: administer) optional AccessControlExtensionStruct extension[] = 1; + readonly attribute int16u subjectsPerAccessControlEntry = 2; + readonly attribute int16u targetsPerAccessControlEntry = 3; + readonly attribute int16u accessControlEntriesPerFabric = 4; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** This cluster provides attributes and events for determining basic information about Nodes, which supports both + Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number, + which apply to the whole Node. Also allows setting user device information such as location. */ +cluster BasicInformation = 40 { + revision 3; + + enum ColorEnum : enum8 { + kBlack = 0; + kNavy = 1; + kGreen = 2; + kTeal = 3; + kMaroon = 4; + kPurple = 5; + kOlive = 6; + kGray = 7; + kBlue = 8; + kLime = 9; + kAqua = 10; + kRed = 11; + kFuchsia = 12; + kYellow = 13; + kWhite = 14; + kNickel = 15; + kChrome = 16; + kBrass = 17; + kCopper = 18; + kSilver = 19; + kGold = 20; + } + + enum ProductFinishEnum : enum8 { + kOther = 0; + kMatte = 1; + kSatin = 2; + kPolished = 3; + kRugged = 4; + kFabric = 5; + } + + struct CapabilityMinimaStruct { + int16u caseSessionsPerFabric = 0; + int16u subscriptionsPerFabric = 1; + } + + struct ProductAppearanceStruct { + ProductFinishEnum finish = 0; + nullable ColorEnum primaryColor = 1; + } + + critical event StartUp = 0 { + int32u softwareVersion = 0; + } + + critical event ShutDown = 1 { + } + + info event Leave = 2 { + fabric_idx fabricIndex = 0; + } + + info event ReachableChanged = 3 { + boolean reachableNewValue = 0; + } + + readonly attribute int16u dataModelRevision = 0; + readonly attribute char_string<32> vendorName = 1; + readonly attribute vendor_id vendorID = 2; + readonly attribute char_string<32> productName = 3; + readonly attribute int16u productID = 4; + attribute access(write: manage) char_string<32> nodeLabel = 5; + attribute access(write: administer) char_string<2> location = 6; + readonly attribute int16u hardwareVersion = 7; + readonly attribute char_string<64> hardwareVersionString = 8; + readonly attribute int32u softwareVersion = 9; + readonly attribute char_string<64> softwareVersionString = 10; + readonly attribute optional char_string<16> manufacturingDate = 11; + readonly attribute optional char_string<32> partNumber = 12; + readonly attribute optional long_char_string<256> productURL = 13; + readonly attribute optional char_string<64> productLabel = 14; + readonly attribute optional char_string<32> serialNumber = 15; + attribute access(write: manage) optional boolean localConfigDisabled = 16; + readonly attribute optional boolean reachable = 17; + readonly attribute optional char_string<32> uniqueID = 18; + readonly attribute CapabilityMinimaStruct capabilityMinima = 19; + readonly attribute optional ProductAppearanceStruct productAppearance = 20; + readonly attribute int32u specificationVersion = 21; + readonly attribute int16u maxPathsPerInvoke = 22; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + command MfgSpecificPing(): DefaultSuccess = 0; +} + +/** Provides an interface for providing OTA software updates */ +cluster OtaSoftwareUpdateProvider = 41 { + revision 1; // NOTE: Default/not specifically set + + enum ApplyUpdateActionEnum : enum8 { + kProceed = 0; + kAwaitNextAction = 1; + kDiscontinue = 2; + } + + enum DownloadProtocolEnum : enum8 { + kBDXSynchronous = 0; + kBDXAsynchronous = 1; + kHTTPS = 2; + kVendorSpecific = 3; + } + + enum StatusEnum : enum8 { + kUpdateAvailable = 0; + kBusy = 1; + kNotAvailable = 2; + kDownloadProtocolNotSupported = 3; + } + + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct QueryImageRequest { + vendor_id vendorID = 0; + int16u productID = 1; + int32u softwareVersion = 2; + DownloadProtocolEnum protocolsSupported[] = 3; + optional int16u hardwareVersion = 4; + optional char_string<2> location = 5; + optional boolean requestorCanConsent = 6; + optional octet_string<512> metadataForProvider = 7; + } + + response struct QueryImageResponse = 1 { + StatusEnum status = 0; + optional int32u delayedActionTime = 1; + optional char_string<256> imageURI = 2; + optional int32u softwareVersion = 3; + optional char_string<64> softwareVersionString = 4; + optional octet_string<32> updateToken = 5; + optional boolean userConsentNeeded = 6; + optional octet_string<512> metadataForRequestor = 7; + } + + request struct ApplyUpdateRequestRequest { + octet_string<32> updateToken = 0; + int32u newVersion = 1; + } + + response struct ApplyUpdateResponse = 3 { + ApplyUpdateActionEnum action = 0; + int32u delayedActionTime = 1; + } + + request struct NotifyUpdateAppliedRequest { + octet_string<32> updateToken = 0; + int32u softwareVersion = 1; + } + + /** Determine availability of a new Software Image */ + command QueryImage(QueryImageRequest): QueryImageResponse = 0; + /** Determine next action to take for a downloaded Software Image */ + command ApplyUpdateRequest(ApplyUpdateRequestRequest): ApplyUpdateResponse = 2; + /** Notify OTA Provider that an update was applied */ + command NotifyUpdateApplied(NotifyUpdateAppliedRequest): DefaultSuccess = 4; +} + +/** Provides an interface for downloading and applying OTA software updates */ +cluster OtaSoftwareUpdateRequestor = 42 { + revision 1; // NOTE: Default/not specifically set + + enum AnnouncementReasonEnum : enum8 { + kSimpleAnnouncement = 0; + kUpdateAvailable = 1; + kUrgentUpdateAvailable = 2; + } + + enum ChangeReasonEnum : enum8 { + kUnknown = 0; + kSuccess = 1; + kFailure = 2; + kTimeOut = 3; + kDelayByProvider = 4; + } + + enum UpdateStateEnum : enum8 { + kUnknown = 0; + kIdle = 1; + kQuerying = 2; + kDelayedOnQuery = 3; + kDownloading = 4; + kApplying = 5; + kDelayedOnApply = 6; + kRollingBack = 7; + kDelayedOnUserConsent = 8; + } + + fabric_scoped struct ProviderLocation { + node_id providerNodeID = 1; + endpoint_no endpoint = 2; + fabric_idx fabricIndex = 254; + } + + info event StateTransition = 0 { + UpdateStateEnum previousState = 0; + UpdateStateEnum newState = 1; + ChangeReasonEnum reason = 2; + nullable int32u targetSoftwareVersion = 3; + } + + critical event VersionApplied = 1 { + int32u softwareVersion = 0; + int16u productID = 1; + } + + info event DownloadError = 2 { + int32u softwareVersion = 0; + int64u bytesDownloaded = 1; + nullable int8u progressPercent = 2; + nullable int64s platformCode = 3; + } + + attribute access(write: administer) ProviderLocation defaultOTAProviders[] = 0; + readonly attribute boolean updatePossible = 1; + readonly attribute UpdateStateEnum updateState = 2; + readonly attribute nullable int8u updateStateProgress = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct AnnounceOTAProviderRequest { + node_id providerNodeID = 0; + vendor_id vendorID = 1; + AnnouncementReasonEnum announcementReason = 2; + optional octet_string<512> metadataForNode = 3; + endpoint_no endpoint = 4; + } + + /** Announce the presence of an OTA Provider */ + command AnnounceOTAProvider(AnnounceOTAProviderRequest): DefaultSuccess = 0; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing common languages, units of measurements, and numerical formatting + standards. As such, Nodes that visually or audibly convey information need a mechanism by which + they can be configured to use a user’s preferred language, units, etc */ +cluster LocalizationConfiguration = 43 { + revision 1; // NOTE: Default/not specifically set + + attribute access(write: manage) char_string<35> activeLocale = 0; + readonly attribute char_string supportedLocales[] = 1; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing preferences for how dates and times are conveyed. As such, Nodes that visually + or audibly convey time information need a mechanism by which they can be configured to use a + user’s preferred format. */ +cluster TimeFormatLocalization = 44 { + revision 1; // NOTE: Default/not specifically set + + enum CalendarTypeEnum : enum8 { + kBuddhist = 0; + kChinese = 1; + kCoptic = 2; + kEthiopian = 3; + kGregorian = 4; + kHebrew = 5; + kIndian = 6; + kIslamic = 7; + kJapanese = 8; + kKorean = 9; + kPersian = 10; + kTaiwanese = 11; + kUseActiveLocale = 255; + } + + enum HourFormatEnum : enum8 { + k12hr = 0; + k24hr = 1; + kUseActiveLocale = 255; + } + + bitmap Feature : bitmap32 { + kCalendarFormat = 0x1; + } + + attribute access(write: manage) HourFormatEnum hourFormat = 0; + attribute access(write: manage) optional CalendarTypeEnum activeCalendarType = 1; + readonly attribute optional CalendarTypeEnum supportedCalendarTypes[] = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** This cluster is used to manage global aspects of the Commissioning flow. */ +cluster GeneralCommissioning = 48 { + revision 1; // NOTE: Default/not specifically set + + enum CommissioningErrorEnum : enum8 { + kOK = 0; + kValueOutsideRange = 1; + kInvalidAuthentication = 2; + kNoFailSafe = 3; + kBusyWithOtherAdmin = 4; + } + + enum RegulatoryLocationTypeEnum : enum8 { + kIndoor = 0; + kOutdoor = 1; + kIndoorOutdoor = 2; + } + + struct BasicCommissioningInfo { + int16u failSafeExpiryLengthSeconds = 0; + int16u maxCumulativeFailsafeSeconds = 1; + } + + attribute access(write: administer) int64u breadcrumb = 0; + readonly attribute BasicCommissioningInfo basicCommissioningInfo = 1; + readonly attribute RegulatoryLocationTypeEnum regulatoryConfig = 2; + readonly attribute RegulatoryLocationTypeEnum locationCapability = 3; + readonly attribute boolean supportsConcurrentConnection = 4; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct ArmFailSafeRequest { + int16u expiryLengthSeconds = 0; + int64u breadcrumb = 1; + } + + response struct ArmFailSafeResponse = 1 { + CommissioningErrorEnum errorCode = 0; + char_string<128> debugText = 1; + } + + request struct SetRegulatoryConfigRequest { + RegulatoryLocationTypeEnum newRegulatoryConfig = 0; + char_string<2> countryCode = 1; + int64u breadcrumb = 2; + } + + response struct SetRegulatoryConfigResponse = 3 { + CommissioningErrorEnum errorCode = 0; + char_string debugText = 1; + } + + response struct CommissioningCompleteResponse = 5 { + CommissioningErrorEnum errorCode = 0; + char_string debugText = 1; + } + + /** Arm the persistent fail-safe timer with an expiry time of now + ExpiryLengthSeconds using device clock */ + command access(invoke: administer) ArmFailSafe(ArmFailSafeRequest): ArmFailSafeResponse = 0; + /** Set the regulatory configuration to be used during commissioning */ + command access(invoke: administer) SetRegulatoryConfig(SetRegulatoryConfigRequest): SetRegulatoryConfigResponse = 2; + /** Signals the Server that the Client has successfully completed all steps of Commissioning/Recofiguration needed during fail-safe period. */ + fabric command access(invoke: administer) CommissioningComplete(): CommissioningCompleteResponse = 4; +} + +/** Functionality to configure, enable, disable network credentials and access on a Matter device. */ +cluster NetworkCommissioning = 49 { + revision 1; // NOTE: Default/not specifically set + + enum NetworkCommissioningStatusEnum : enum8 { + kSuccess = 0; + kOutOfRange = 1; + kBoundsExceeded = 2; + kNetworkIDNotFound = 3; + kDuplicateNetworkID = 4; + kNetworkNotFound = 5; + kRegulatoryError = 6; + kAuthFailure = 7; + kUnsupportedSecurity = 8; + kOtherConnectionFailure = 9; + kIPV6Failed = 10; + kIPBindFailed = 11; + kUnknownError = 12; + } + + enum WiFiBandEnum : enum8 { + k2G4 = 0; + k3G65 = 1; + k5G = 2; + k6G = 3; + k60G = 4; + k1G = 5; + } + + bitmap Feature : bitmap32 { + kWiFiNetworkInterface = 0x1; + kThreadNetworkInterface = 0x2; + kEthernetNetworkInterface = 0x4; + kPerDeviceCredentials = 0x8; + } + + bitmap ThreadCapabilitiesBitmap : bitmap16 { + kIsBorderRouterCapable = 0x1; + kIsRouterCapable = 0x2; + kIsSleepyEndDeviceCapable = 0x4; + kIsFullThreadDevice = 0x8; + kIsSynchronizedSleepyEndDeviceCapable = 0x10; + } + + bitmap WiFiSecurityBitmap : bitmap8 { + kUnencrypted = 0x1; + kWEP = 0x2; + kWPAPersonal = 0x4; + kWPA2Personal = 0x8; + kWPA3Personal = 0x10; + kWPA3MatterPDC = 0x20; + } + + struct NetworkInfoStruct { + octet_string<32> networkID = 0; + boolean connected = 1; + optional nullable octet_string<20> networkIdentifier = 2; + optional nullable octet_string<20> clientIdentifier = 3; + } + + struct ThreadInterfaceScanResultStruct { + int16u panId = 0; + int64u extendedPanId = 1; + char_string<16> networkName = 2; + int16u channel = 3; + int8u version = 4; + octet_string<8> extendedAddress = 5; + int8s rssi = 6; + int8u lqi = 7; + } + + struct WiFiInterfaceScanResultStruct { + WiFiSecurityBitmap security = 0; + octet_string<32> ssid = 1; + octet_string<6> bssid = 2; + int16u channel = 3; + WiFiBandEnum wiFiBand = 4; + int8s rssi = 5; + } + + readonly attribute access(read: administer) int8u maxNetworks = 0; + readonly attribute access(read: administer) NetworkInfoStruct networks[] = 1; + readonly attribute optional int8u scanMaxTimeSeconds = 2; + readonly attribute optional int8u connectMaxTimeSeconds = 3; + attribute access(write: administer) boolean interfaceEnabled = 4; + readonly attribute access(read: administer) nullable NetworkCommissioningStatusEnum lastNetworkingStatus = 5; + readonly attribute access(read: administer) nullable octet_string<32> lastNetworkID = 6; + readonly attribute access(read: administer) nullable int32s lastConnectErrorValue = 7; + provisional readonly attribute optional WiFiBandEnum supportedWiFiBands[] = 8; + provisional readonly attribute optional ThreadCapabilitiesBitmap supportedThreadFeatures = 9; + provisional readonly attribute optional int16u threadVersion = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct ScanNetworksRequest { + optional nullable octet_string<32> ssid = 0; + optional int64u breadcrumb = 1; + } + + response struct ScanNetworksResponse = 1 { + NetworkCommissioningStatusEnum networkingStatus = 0; + optional char_string debugText = 1; + optional WiFiInterfaceScanResultStruct wiFiScanResults[] = 2; + optional ThreadInterfaceScanResultStruct threadScanResults[] = 3; + } + + request struct AddOrUpdateWiFiNetworkRequest { + octet_string<32> ssid = 0; + octet_string<64> credentials = 1; + optional int64u breadcrumb = 2; + optional octet_string<140> networkIdentity = 3; + optional octet_string<20> clientIdentifier = 4; + optional octet_string<32> possessionNonce = 5; + } + + request struct AddOrUpdateThreadNetworkRequest { + octet_string<254> operationalDataset = 0; + optional int64u breadcrumb = 1; + } + + request struct RemoveNetworkRequest { + octet_string<32> networkID = 0; + optional int64u breadcrumb = 1; + } + + response struct NetworkConfigResponse = 5 { + NetworkCommissioningStatusEnum networkingStatus = 0; + optional char_string<512> debugText = 1; + optional int8u networkIndex = 2; + optional octet_string<140> clientIdentity = 3; + optional octet_string<64> possessionSignature = 4; + } + + request struct ConnectNetworkRequest { + octet_string<32> networkID = 0; + optional int64u breadcrumb = 1; + } + + response struct ConnectNetworkResponse = 7 { + NetworkCommissioningStatusEnum networkingStatus = 0; + optional char_string debugText = 1; + nullable int32s errorValue = 2; + } + + request struct ReorderNetworkRequest { + octet_string<32> networkID = 0; + int8u networkIndex = 1; + optional int64u breadcrumb = 2; + } + + request struct QueryIdentityRequest { + octet_string<20> keyIdentifier = 0; + optional octet_string<32> possessionNonce = 1; + } + + response struct QueryIdentityResponse = 10 { + octet_string<140> identity = 0; + optional octet_string<64> possessionSignature = 1; + } + + /** Detemine the set of networks the device sees as available. */ + command access(invoke: administer) ScanNetworks(ScanNetworksRequest): ScanNetworksResponse = 0; + /** Add or update the credentials for a given Wi-Fi network. */ + command access(invoke: administer) AddOrUpdateWiFiNetwork(AddOrUpdateWiFiNetworkRequest): NetworkConfigResponse = 2; + /** Add or update the credentials for a given Thread network. */ + command access(invoke: administer) AddOrUpdateThreadNetwork(AddOrUpdateThreadNetworkRequest): NetworkConfigResponse = 3; + /** Remove the definition of a given network (including its credentials). */ + command access(invoke: administer) RemoveNetwork(RemoveNetworkRequest): NetworkConfigResponse = 4; + /** Connect to the specified network, using previously-defined credentials. */ + command access(invoke: administer) ConnectNetwork(ConnectNetworkRequest): ConnectNetworkResponse = 6; + /** Modify the order in which networks will be presented in the Networks attribute. */ + command access(invoke: administer) ReorderNetwork(ReorderNetworkRequest): NetworkConfigResponse = 8; + /** Retrieve details about and optionally proof of possession of a network client identity. */ + command access(invoke: administer) QueryIdentity(QueryIdentityRequest): QueryIdentityResponse = 9; +} + +/** The cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */ +cluster DiagnosticLogs = 50 { + revision 1; // NOTE: Default/not specifically set + + enum IntentEnum : enum8 { + kEndUserSupport = 0; + kNetworkDiag = 1; + kCrashLogs = 2; + } + + enum StatusEnum : enum8 { + kSuccess = 0; + kExhausted = 1; + kNoLogs = 2; + kBusy = 3; + kDenied = 4; + } + + enum TransferProtocolEnum : enum8 { + kResponsePayload = 0; + kBDX = 1; + } + + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct RetrieveLogsRequestRequest { + IntentEnum intent = 0; + TransferProtocolEnum requestedProtocol = 1; + optional char_string<32> transferFileDesignator = 2; + } + + response struct RetrieveLogsResponse = 1 { + StatusEnum status = 0; + long_octet_string logContent = 1; + optional epoch_us UTCTimeStamp = 2; + optional systime_us timeSinceBoot = 3; + } + + /** Retrieving diagnostic logs from a Node */ + command RetrieveLogsRequest(RetrieveLogsRequestRequest): RetrieveLogsResponse = 0; +} + +/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */ +cluster GeneralDiagnostics = 51 { + revision 2; + + enum BootReasonEnum : enum8 { + kUnspecified = 0; + kPowerOnReboot = 1; + kBrownOutReset = 2; + kSoftwareWatchdogReset = 3; + kHardwareWatchdogReset = 4; + kSoftwareUpdateCompleted = 5; + kSoftwareReset = 6; + } + + enum HardwareFaultEnum : enum8 { + kUnspecified = 0; + kRadio = 1; + kSensor = 2; + kResettableOverTemp = 3; + kNonResettableOverTemp = 4; + kPowerSource = 5; + kVisualDisplayFault = 6; + kAudioOutputFault = 7; + kUserInterfaceFault = 8; + kNonVolatileMemoryError = 9; + kTamperDetected = 10; + } + + enum InterfaceTypeEnum : enum8 { + kUnspecified = 0; + kWiFi = 1; + kEthernet = 2; + kCellular = 3; + kThread = 4; + } + + enum NetworkFaultEnum : enum8 { + kUnspecified = 0; + kHardwareFailure = 1; + kNetworkJammed = 2; + kConnectionFailed = 3; + } + + enum RadioFaultEnum : enum8 { + kUnspecified = 0; + kWiFiFault = 1; + kCellularFault = 2; + kThreadFault = 3; + kNFCFault = 4; + kBLEFault = 5; + kEthernetFault = 6; + } + + bitmap Feature : bitmap32 { + kDataModelTest = 0x1; + } + + struct NetworkInterface { + char_string<32> name = 0; + boolean isOperational = 1; + nullable boolean offPremiseServicesReachableIPv4 = 2; + nullable boolean offPremiseServicesReachableIPv6 = 3; + octet_string<8> hardwareAddress = 4; + octet_string IPv4Addresses[] = 5; + octet_string IPv6Addresses[] = 6; + InterfaceTypeEnum type = 7; + } + + critical event HardwareFaultChange = 0 { + HardwareFaultEnum current[] = 0; + HardwareFaultEnum previous[] = 1; + } + + critical event RadioFaultChange = 1 { + RadioFaultEnum current[] = 0; + RadioFaultEnum previous[] = 1; + } + + critical event NetworkFaultChange = 2 { + NetworkFaultEnum current[] = 0; + NetworkFaultEnum previous[] = 1; + } + + critical event BootReason = 3 { + BootReasonEnum bootReason = 0; + } + + readonly attribute NetworkInterface networkInterfaces[] = 0; + readonly attribute int16u rebootCount = 1; + readonly attribute optional int64u upTime = 2; + readonly attribute optional int32u totalOperationalHours = 3; + readonly attribute optional BootReasonEnum bootReason = 4; + readonly attribute optional HardwareFaultEnum activeHardwareFaults[] = 5; + readonly attribute optional RadioFaultEnum activeRadioFaults[] = 6; + readonly attribute optional NetworkFaultEnum activeNetworkFaults[] = 7; + readonly attribute boolean testEventTriggersEnabled = 8; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct TestEventTriggerRequest { + octet_string<16> enableKey = 0; + int64u eventTrigger = 1; + } + + response struct TimeSnapshotResponse = 2 { + systime_ms systemTimeMs = 0; + nullable posix_ms posixTimeMs = 1; + } + + request struct PayloadTestRequestRequest { + octet_string<16> enableKey = 0; + int8u value = 1; + int16u count = 2; + } + + response struct PayloadTestResponse = 4 { + octet_string payload = 0; + } + + /** Provide a means for certification tests to trigger some test-plan-specific events */ + command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0; + /** Take a snapshot of system time and epoch time. */ + command TimeSnapshot(): TimeSnapshotResponse = 1; + /** Request a variable length payload response. */ + command PayloadTestRequest(PayloadTestRequestRequest): PayloadTestResponse = 3; +} + +/** The Software Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */ +cluster SoftwareDiagnostics = 52 { + revision 1; // NOTE: Default/not specifically set + + bitmap Feature : bitmap32 { + kWatermarks = 0x1; + } + + struct ThreadMetricsStruct { + int64u id = 0; + optional char_string<8> name = 1; + optional int32u stackFreeCurrent = 2; + optional int32u stackFreeMinimum = 3; + optional int32u stackSize = 4; + } + + info event SoftwareFault = 0 { + int64u id = 0; + optional char_string name = 1; + optional octet_string faultRecording = 2; + } + + readonly attribute optional ThreadMetricsStruct threadMetrics[] = 0; + readonly attribute optional int64u currentHeapFree = 1; + readonly attribute optional int64u currentHeapUsed = 2; + readonly attribute optional int64u currentHeapHighWatermark = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + /** Reception of this command SHALL reset the values: The StackFreeMinimum field of the ThreadMetrics attribute, CurrentHeapHighWaterMark attribute. */ + command access(invoke: manage) ResetWatermarks(): DefaultSuccess = 0; +} + +/** Commands to trigger a Node to allow a new Administrator to commission it. */ +cluster AdministratorCommissioning = 60 { + revision 1; // NOTE: Default/not specifically set + + enum CommissioningWindowStatusEnum : enum8 { + kWindowNotOpen = 0; + kEnhancedWindowOpen = 1; + kBasicWindowOpen = 2; + } + + enum StatusCode : enum8 { + kBusy = 2; + kPAKEParameterError = 3; + kWindowNotOpen = 4; + } + + bitmap Feature : bitmap32 { + kBasic = 0x1; + } + + readonly attribute CommissioningWindowStatusEnum windowStatus = 0; + readonly attribute nullable fabric_idx adminFabricIndex = 1; + readonly attribute nullable vendor_id adminVendorId = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct OpenCommissioningWindowRequest { + int16u commissioningTimeout = 0; + octet_string PAKEPasscodeVerifier = 1; + int16u discriminator = 2; + int32u iterations = 3; + octet_string<32> salt = 4; + } + + request struct OpenBasicCommissioningWindowRequest { + int16u commissioningTimeout = 0; + } + + /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using enhanced commissioning method. */ + timed command access(invoke: administer) OpenCommissioningWindow(OpenCommissioningWindowRequest): DefaultSuccess = 0; + /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using basic commissioning method, if the node supports it. */ + timed command access(invoke: administer) OpenBasicCommissioningWindow(OpenBasicCommissioningWindowRequest): DefaultSuccess = 1; + /** This command is used by a current Administrator to instruct a Node to revoke any active Open Commissioning Window or Open Basic Commissioning Window command. */ + timed command access(invoke: administer) RevokeCommissioning(): DefaultSuccess = 2; +} + +/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */ +cluster OperationalCredentials = 62 { + revision 1; // NOTE: Default/not specifically set + + enum CertificateChainTypeEnum : enum8 { + kDACCertificate = 1; + kPAICertificate = 2; + } + + enum NodeOperationalCertStatusEnum : enum8 { + kOK = 0; + kInvalidPublicKey = 1; + kInvalidNodeOpId = 2; + kInvalidNOC = 3; + kMissingCsr = 4; + kTableFull = 5; + kInvalidAdminSubject = 6; + kFabricConflict = 9; + kLabelConflict = 10; + kInvalidFabricIndex = 11; + } + + fabric_scoped struct FabricDescriptorStruct { + octet_string<65> rootPublicKey = 1; + vendor_id vendorID = 2; + fabric_id fabricID = 3; + node_id nodeID = 4; + char_string<32> label = 5; + fabric_idx fabricIndex = 254; + } + + fabric_scoped struct NOCStruct { + fabric_sensitive octet_string noc = 1; + nullable fabric_sensitive octet_string icac = 2; + fabric_idx fabricIndex = 254; + } + + readonly attribute access(read: administer) NOCStruct NOCs[] = 0; + readonly attribute FabricDescriptorStruct fabrics[] = 1; + readonly attribute int8u supportedFabrics = 2; + readonly attribute int8u commissionedFabrics = 3; + readonly attribute octet_string trustedRootCertificates[] = 4; + readonly attribute int8u currentFabricIndex = 5; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct AttestationRequestRequest { + octet_string<32> attestationNonce = 0; + } + + response struct AttestationResponse = 1 { + octet_string<900> attestationElements = 0; + octet_string<64> attestationSignature = 1; + } + + request struct CertificateChainRequestRequest { + CertificateChainTypeEnum certificateType = 0; + } + + response struct CertificateChainResponse = 3 { + octet_string<600> certificate = 0; + } + + request struct CSRRequestRequest { + octet_string<32> CSRNonce = 0; + optional boolean isForUpdateNOC = 1; + } + + response struct CSRResponse = 5 { + octet_string NOCSRElements = 0; + octet_string attestationSignature = 1; + } + + request struct AddNOCRequest { + octet_string<400> NOCValue = 0; + optional octet_string<400> ICACValue = 1; + octet_string<16> IPKValue = 2; + int64u caseAdminSubject = 3; + vendor_id adminVendorId = 4; + } + + request struct UpdateNOCRequest { + octet_string NOCValue = 0; + optional octet_string ICACValue = 1; + } + + response struct NOCResponse = 8 { + NodeOperationalCertStatusEnum statusCode = 0; + optional fabric_idx fabricIndex = 1; + optional char_string<128> debugText = 2; + } + + request struct UpdateFabricLabelRequest { + char_string<32> label = 0; + } + + request struct RemoveFabricRequest { + fabric_idx fabricIndex = 0; + } + + request struct AddTrustedRootCertificateRequest { + octet_string rootCACertificate = 0; + } + + /** Sender is requesting attestation information from the receiver. */ + command access(invoke: administer) AttestationRequest(AttestationRequestRequest): AttestationResponse = 0; + /** Sender is requesting a device attestation certificate from the receiver. */ + command access(invoke: administer) CertificateChainRequest(CertificateChainRequestRequest): CertificateChainResponse = 2; + /** Sender is requesting a certificate signing request (CSR) from the receiver. */ + command access(invoke: administer) CSRRequest(CSRRequestRequest): CSRResponse = 4; + /** Sender is requesting to add the new node operational certificates. */ + command access(invoke: administer) AddNOC(AddNOCRequest): NOCResponse = 6; + /** Sender is requesting to update the node operational certificates. */ + fabric command access(invoke: administer) UpdateNOC(UpdateNOCRequest): NOCResponse = 7; + /** This command SHALL be used by an Administrative Node to set the user-visible Label field for a given Fabric, as reflected by entries in the Fabrics attribute. */ + fabric command access(invoke: administer) UpdateFabricLabel(UpdateFabricLabelRequest): NOCResponse = 9; + /** This command is used by Administrative Nodes to remove a given fabric index and delete all associated fabric-scoped data. */ + command access(invoke: administer) RemoveFabric(RemoveFabricRequest): NOCResponse = 10; + /** This command SHALL add a Trusted Root CA Certificate, provided as its CHIP Certificate representation. */ + command access(invoke: administer) AddTrustedRootCertificate(AddTrustedRootCertificateRequest): DefaultSuccess = 11; +} + +/** The Group Key Management Cluster is the mechanism by which group keys are managed. */ +cluster GroupKeyManagement = 63 { + revision 1; // NOTE: Default/not specifically set + + enum GroupKeySecurityPolicyEnum : enum8 { + kTrustFirst = 0; + kCacheAndSync = 1; + } + + bitmap Feature : bitmap32 { + kCacheAndSync = 0x1; + } + + fabric_scoped struct GroupInfoMapStruct { + group_id groupId = 1; + endpoint_no endpoints[] = 2; + optional char_string<16> groupName = 3; + fabric_idx fabricIndex = 254; + } + + fabric_scoped struct GroupKeyMapStruct { + group_id groupId = 1; + int16u groupKeySetID = 2; + fabric_idx fabricIndex = 254; + } + + struct GroupKeySetStruct { + int16u groupKeySetID = 0; + GroupKeySecurityPolicyEnum groupKeySecurityPolicy = 1; + nullable octet_string<16> epochKey0 = 2; + nullable epoch_us epochStartTime0 = 3; + nullable octet_string<16> epochKey1 = 4; + nullable epoch_us epochStartTime1 = 5; + nullable octet_string<16> epochKey2 = 6; + nullable epoch_us epochStartTime2 = 7; + } + + attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0; + readonly attribute GroupInfoMapStruct groupTable[] = 1; + readonly attribute int16u maxGroupsPerFabric = 2; + readonly attribute int16u maxGroupKeysPerFabric = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct KeySetWriteRequest { + GroupKeySetStruct groupKeySet = 0; + } + + request struct KeySetReadRequest { + int16u groupKeySetID = 0; + } + + response struct KeySetReadResponse = 2 { + GroupKeySetStruct groupKeySet = 0; + } + + request struct KeySetRemoveRequest { + int16u groupKeySetID = 0; + } + + response struct KeySetReadAllIndicesResponse = 5 { + int16u groupKeySetIDs[] = 0; + } + + /** Write a new set of keys for the given key set id. */ + fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0; + /** Read the keys for a given key set id. */ + fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1; + /** Revoke a Root Key from a Group */ + fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3; + /** Return the list of Group Key Sets associated with the accessing fabric */ + fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4; +} + +/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only +labels. */ +cluster FixedLabel = 64 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + readonly attribute LabelStruct labelList[] = 0; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for scene configuration and manipulation. */ +provisional cluster ScenesManagement = 98 { + revision 1; + + bitmap CopyModeBitmap : bitmap8 { + kCopyAllScenes = 0x1; + } + + bitmap Feature : bitmap32 { + kSceneNames = 0x1; + } + + struct AttributeValuePair { + attrib_id attributeID = 0; + int32u attributeValue = 1; + } + + struct ExtensionFieldSet { + cluster_id clusterID = 0; + AttributeValuePair attributeValueList[] = 1; + } + + fabric_scoped struct SceneInfoStruct { + int8u sceneCount = 0; + fabric_sensitive int8u currentScene = 1; + fabric_sensitive group_id currentGroup = 2; + fabric_sensitive boolean sceneValid = 3; + int8u remainingCapacity = 4; + fabric_idx fabricIndex = 254; + } + + readonly attribute optional nullable node_id lastConfiguredBy = 0; + readonly attribute int16u sceneTableSize = 1; + readonly attribute SceneInfoStruct fabricSceneInfo[] = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct AddSceneRequest { + group_id groupID = 0; + int8u sceneID = 1; + int32u transitionTime = 2; + char_string sceneName = 3; + ExtensionFieldSet extensionFieldSets[] = 4; + } + + response struct AddSceneResponse = 0 { + status status = 0; + group_id groupID = 1; + int8u sceneID = 2; + } + + request struct ViewSceneRequest { + group_id groupID = 0; + int8u sceneID = 1; + } + + response struct ViewSceneResponse = 1 { + status status = 0; + group_id groupID = 1; + int8u sceneID = 2; + optional int32u transitionTime = 3; + optional char_string sceneName = 4; + optional ExtensionFieldSet extensionFieldSets[] = 5; + } + + request struct RemoveSceneRequest { + group_id groupID = 0; + int8u sceneID = 1; + } + + response struct RemoveSceneResponse = 2 { + status status = 0; + group_id groupID = 1; + int8u sceneID = 2; + } + + request struct RemoveAllScenesRequest { + group_id groupID = 0; + } + + response struct RemoveAllScenesResponse = 3 { + status status = 0; + group_id groupID = 1; + } + + request struct StoreSceneRequest { + group_id groupID = 0; + int8u sceneID = 1; + } + + response struct StoreSceneResponse = 4 { + status status = 0; + group_id groupID = 1; + int8u sceneID = 2; + } + + request struct RecallSceneRequest { + group_id groupID = 0; + int8u sceneID = 1; + optional nullable int32u transitionTime = 2; + } + + request struct GetSceneMembershipRequest { + group_id groupID = 0; + } + + response struct GetSceneMembershipResponse = 6 { + status status = 0; + nullable int8u capacity = 1; + group_id groupID = 2; + optional int8u sceneList[] = 3; + } + + request struct CopySceneRequest { + CopyModeBitmap mode = 0; + group_id groupIdentifierFrom = 1; + int8u sceneIdentifierFrom = 2; + group_id groupIdentifierTo = 3; + int8u sceneIdentifierTo = 4; + } + + response struct CopySceneResponse = 64 { + status status = 0; + group_id groupIdentifierFrom = 1; + int8u sceneIdentifierFrom = 2; + } + + /** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeId": VALUE, "AttributeValue": VALUE}]}' */ + fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0; + /** Retrieves the requested scene entry from its Scene table. */ + fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1; + /** Removes the requested scene entry, corresponding to the value of the GroupID field, from its Scene Table */ + fabric command access(invoke: manage) RemoveScene(RemoveSceneRequest): RemoveSceneResponse = 2; + /** Remove all scenes, corresponding to the value of the GroupID field, from its Scene Table */ + fabric command access(invoke: manage) RemoveAllScenes(RemoveAllScenesRequest): RemoveAllScenesResponse = 3; + /** Adds the scene entry into its Scene Table along with all extension field sets corresponding to the current state of other clusters on the same endpoint */ + fabric command access(invoke: manage) StoreScene(StoreSceneRequest): StoreSceneResponse = 4; + /** Set the attributes and corresponding state for each other cluster implemented on the endpoint accordingly to the resquested scene entry in the Scene Table */ + fabric command RecallScene(RecallSceneRequest): DefaultSuccess = 5; + /** Get an unused scene identifier when no commissioning tool is in the network, or for a commissioning tool to get the used scene identifiers within a certain group */ + fabric command GetSceneMembership(GetSceneMembershipRequest): GetSceneMembershipResponse = 6; + /** Allows a client to efficiently copy scenes from one group/scene identifier pair to another group/scene identifier pair. */ + fabric command CopyScene(CopySceneRequest): CopySceneResponse = 64; +} + +/** Attributes and commands for configuring occupancy sensing, and reporting occupancy status. */ +cluster OccupancySensing = 1030 { + revision 4; + + enum OccupancySensorTypeEnum : enum8 { + kPIR = 0; + kUltrasonic = 1; + kPIRAndUltrasonic = 2; + kPhysicalContact = 3; + } + + bitmap OccupancyBitmap : bitmap8 { + kOccupied = 0x1; + } + + bitmap OccupancySensorTypeBitmap : bitmap8 { + kPIR = 0x1; + kUltrasonic = 0x2; + kPhysicalContact = 0x4; + } + + readonly attribute OccupancyBitmap occupancy = 0; + readonly attribute OccupancySensorTypeEnum occupancySensorType = 1; + readonly attribute OccupancySensorTypeBitmap occupancySensorTypeBitmap = 2; + attribute access(write: manage) optional int16u PIROccupiedToUnoccupiedDelay = 16; + attribute access(write: manage) optional int16u PIRUnoccupiedToOccupiedDelay = 17; + attribute access(write: manage) optional int8u PIRUnoccupiedToOccupiedThreshold = 18; + attribute access(write: manage) optional int16u ultrasonicOccupiedToUnoccupiedDelay = 32; + attribute access(write: manage) optional int16u ultrasonicUnoccupiedToOccupiedDelay = 33; + attribute access(write: manage) optional int8u ultrasonicUnoccupiedToOccupiedThreshold = 34; + attribute access(write: manage) optional int16u physicalContactOccupiedToUnoccupiedDelay = 48; + attribute access(write: manage) optional int16u physicalContactUnoccupiedToOccupiedDelay = 49; + attribute access(write: manage) optional int8u physicalContactUnoccupiedToOccupiedThreshold = 50; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +endpoint 0 { + device type ma_rootdevice = 22, version 1; + + binding cluster OtaSoftwareUpdateProvider; + + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute featureMap; + callback attribute clusterRevision; + } + + server cluster AccessControl { + emits event AccessControlEntryChanged; + emits event AccessControlExtensionChanged; + callback attribute acl; + callback attribute extension; + callback attribute subjectsPerAccessControlEntry; + callback attribute targetsPerAccessControlEntry; + callback attribute accessControlEntriesPerFabric; + callback attribute attributeList; + ram attribute featureMap default = 0; + callback attribute clusterRevision; + } + + server cluster BasicInformation { + emits event StartUp; + emits event ShutDown; + emits event Leave; + callback attribute dataModelRevision; + callback attribute vendorName; + callback attribute vendorID; + callback attribute productName; + callback attribute productID; + persist attribute nodeLabel; + callback attribute location; + callback attribute hardwareVersion; + callback attribute hardwareVersionString; + callback attribute softwareVersion; + callback attribute softwareVersionString; + callback attribute manufacturingDate; + callback attribute partNumber; + callback attribute productURL; + callback attribute productLabel; + callback attribute serialNumber; + persist attribute localConfigDisabled default = 0; + callback attribute uniqueID; + callback attribute capabilityMinima; + callback attribute specificationVersion; + callback attribute maxPathsPerInvoke; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 3; + } + + server cluster OtaSoftwareUpdateRequestor { + emits event StateTransition; + emits event VersionApplied; + emits event DownloadError; + callback attribute defaultOTAProviders; + ram attribute updatePossible default = 1; + ram attribute updateState default = 0; + ram attribute updateStateProgress default = 0; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command AnnounceOTAProvider; + } + + server cluster LocalizationConfiguration { + ram attribute activeLocale; + callback attribute supportedLocales; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster TimeFormatLocalization { + persist attribute hourFormat default = 0; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster GeneralCommissioning { + ram attribute breadcrumb default = 0x0000000000000000; + callback attribute basicCommissioningInfo; + callback attribute regulatoryConfig; + callback attribute locationCapability; + callback attribute supportsConcurrentConnection; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 0x0001; + + handle command ArmFailSafe; + handle command ArmFailSafeResponse; + handle command SetRegulatoryConfig; + handle command SetRegulatoryConfigResponse; + handle command CommissioningComplete; + handle command CommissioningCompleteResponse; + } + + server cluster NetworkCommissioning { + ram attribute maxNetworks; + callback attribute networks; + ram attribute scanMaxTimeSeconds; + ram attribute connectMaxTimeSeconds; + ram attribute interfaceEnabled; + ram attribute lastNetworkingStatus; + ram attribute lastNetworkID; + ram attribute lastConnectErrorValue; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 0x0001; + + handle command ScanNetworks; + handle command ScanNetworksResponse; + handle command AddOrUpdateWiFiNetwork; + handle command AddOrUpdateThreadNetwork; + handle command RemoveNetwork; + handle command NetworkConfigResponse; + handle command ConnectNetwork; + handle command ConnectNetworkResponse; + handle command ReorderNetwork; + } + + server cluster DiagnosticLogs { + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command RetrieveLogsRequest; + handle command RetrieveLogsResponse; + } + + server cluster GeneralDiagnostics { + emits event BootReason; + callback attribute networkInterfaces; + callback attribute rebootCount; + callback attribute upTime; + callback attribute totalOperationalHours; + callback attribute bootReason; + callback attribute activeHardwareFaults; + callback attribute activeRadioFaults; + callback attribute activeNetworkFaults; + callback attribute testEventTriggersEnabled default = false; + callback attribute featureMap; + callback attribute clusterRevision; + + handle command TestEventTrigger; + handle command TimeSnapshot; + handle command TimeSnapshotResponse; + } + + server cluster SoftwareDiagnostics { + callback attribute threadMetrics; + callback attribute currentHeapFree; + callback attribute currentHeapUsed; + callback attribute currentHeapHighWatermark; + callback attribute featureMap; + ram attribute clusterRevision default = 0x0001; + + handle command ResetWatermarks; + } + + server cluster AdministratorCommissioning { + callback attribute windowStatus; + callback attribute adminFabricIndex; + callback attribute adminVendorId; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 0x0001; + + handle command OpenCommissioningWindow; + handle command RevokeCommissioning; + } + + server cluster OperationalCredentials { + callback attribute NOCs; + callback attribute fabrics; + callback attribute supportedFabrics; + callback attribute commissionedFabrics; + callback attribute trustedRootCertificates; + callback attribute currentFabricIndex; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 0x0001; + + handle command AttestationRequest; + handle command AttestationResponse; + handle command CertificateChainRequest; + handle command CertificateChainResponse; + handle command CSRRequest; + handle command CSRResponse; + handle command AddNOC; + handle command UpdateNOC; + handle command NOCResponse; + handle command UpdateFabricLabel; + handle command RemoveFabric; + handle command AddTrustedRootCertificate; + } + + server cluster GroupKeyManagement { + callback attribute groupKeyMap; + callback attribute groupTable; + callback attribute maxGroupsPerFabric; + callback attribute maxGroupKeysPerFabric; + callback attribute featureMap; + callback attribute clusterRevision; + + handle command KeySetWrite; + handle command KeySetRead; + handle command KeySetReadResponse; + handle command KeySetRemove; + handle command KeySetReadAllIndices; + handle command KeySetReadAllIndicesResponse; + } + + server cluster FixedLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } +} +endpoint 1 { + device type ma_dimmablepluginunit = 267, version 1; + + binding cluster Binding; + binding cluster OccupancySensing; + + server cluster Identify { + ram attribute identifyTime default = 0x0; + ram attribute identifyType default = 0x0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command Identify; + handle command TriggerEffect; + } + + server cluster Groups { + ram attribute nameSupport default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command AddGroup; + handle command AddGroupResponse; + handle command ViewGroup; + handle command ViewGroupResponse; + handle command GetGroupMembership; + handle command GetGroupMembershipResponse; + handle command RemoveGroup; + handle command RemoveGroupResponse; + handle command RemoveAllGroups; + handle command AddGroupIfIdentifying; + } + + server cluster OnOff { + ram attribute onOff default = 0; + ram attribute globalSceneControl default = 1; + ram attribute onTime default = 0; + ram attribute offWaitTime default = 0; + ram attribute startUpOnOff default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 6; + + handle command Off; + handle command On; + handle command Toggle; + handle command OffWithEffect; + handle command OnWithRecallGlobalScene; + handle command OnWithTimedOff; + } + + server cluster LevelControl { + ram attribute currentLevel default = 0x01; + ram attribute remainingTime default = 0x0000; + ram attribute minLevel default = 0x01; + ram attribute maxLevel default = 0xFE; + ram attribute options default = 0x00; + ram attribute onLevel default = 0xFE; + ram attribute startUpCurrentLevel default = 0x00; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 5; + + handle command MoveToLevel; + handle command Move; + handle command Step; + handle command Stop; + handle command MoveToLevelWithOnOff; + handle command MoveWithOnOff; + handle command StepWithOnOff; + handle command StopWithOnOff; + } + + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + callback attribute featureMap; + callback attribute clusterRevision; + } + + server cluster ScenesManagement { + ram attribute sceneTableSize default = 16; + callback attribute fabricSceneInfo; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command AddScene; + handle command AddSceneResponse; + handle command ViewScene; + handle command ViewSceneResponse; + handle command RemoveScene; + handle command RemoveSceneResponse; + handle command RemoveAllScenes; + handle command RemoveAllScenesResponse; + handle command StoreScene; + handle command StoreSceneResponse; + handle command RecallScene; + handle command GetSceneMembership; + handle command GetSceneMembershipResponse; + } +} + + diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap new file mode 100644 index 00000000000000..275f5f81144816 --- /dev/null +++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap @@ -0,0 +1,3864 @@ +{ + "fileFormat": 2, + "featureLevel": 103, + "creator": "zap", + "keyValuePairs": [ + { + "key": "commandDiscovery", + "value": "1" + }, + { + "key": "defaultResponsePolicy", + "value": "always" + }, + { + "key": "manufacturerCodes", + "value": "0x1002" + } + ], + "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../src/app/zap-templates/zcl/zcl.json", + "type": "zcl-properties", + "category": "matter", + "version": 1, + "description": "Matter SDK ZCL data" + }, + { + "pathRelativity": "relativeToZap", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" + } + ], + "endpointTypes": [ + { + "id": 1, + "name": "MA-rootdevice", + "deviceTypeRef": { + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + }, + "deviceTypes": [ + { + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice" + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], + "deviceTypeName": "MA-rootdevice", + "deviceTypeCode": 22, + "deviceTypeProfileId": 259, + "clusters": [ + { + "name": "Descriptor", + "code": 29, + "mfgCode": null, + "define": "DESCRIPTOR_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DeviceTypeList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ServerList", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientList", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartsList", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Access Control", + "code": 31, + "mfgCode": null, + "define": "ACCESS_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ACL", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Extension", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SubjectsPerAccessControlEntry", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TargetsPerAccessControlEntry", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AccessControlEntriesPerFabric", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "AccessControlEntryChanged", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "AccessControlExtensionChanged", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Basic Information", + "code": 40, + "mfgCode": null, + "define": "BASIC_INFORMATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DataModelRevision", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "VendorName", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "VendorID", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "vendor_id", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductName", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductID", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NodeLabel", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "NVM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Location", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "HardwareVersion", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "HardwareVersionString", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SoftwareVersion", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SoftwareVersionString", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ManufacturingDate", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "PartNumber", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductURL", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "long_char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductLabel", + "code": 14, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SerialNumber", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "LocalConfigDisabled", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UniqueID", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CapabilityMinima", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "CapabilityMinimaStruct", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SpecificationVersion", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxPathsPerInvoke", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "StartUp", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "ShutDown", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "Leave", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "OTA Software Update Provider", + "code": 41, + "mfgCode": null, + "define": "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ + { + "name": "QueryImage", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "QueryImageResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ApplyUpdateRequest", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ApplyUpdateResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "NotifyUpdateApplied", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "OTA Software Update Requestor", + "code": 42, + "mfgCode": null, + "define": "OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AnnounceOTAProvider", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "DefaultOTAProviders", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "UpdatePossible", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UpdateState", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "UpdateStateEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UpdateStateProgress", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "StateTransition", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "VersionApplied", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "DownloadError", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Localization Configuration", + "code": 43, + "mfgCode": null, + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ActiveLocale", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedLocales", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "HourFormat", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "HourFormatEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "General Commissioning", + "code": 48, + "mfgCode": null, + "define": "GENERAL_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "ArmFailSafe", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ArmFailSafeResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "SetRegulatoryConfig", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "SetRegulatoryConfigResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CommissioningComplete", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CommissioningCompleteResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "Breadcrumb", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BasicCommissioningInfo", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "BasicCommissioningInfo", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RegulatoryConfig", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "RegulatoryLocationTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LocationCapability", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "RegulatoryLocationTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportsConcurrentConnection", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Network Commissioning", + "code": 49, + "mfgCode": null, + "define": "NETWORK_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "ScanNetworks", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ScanNetworksResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "AddOrUpdateWiFiNetwork", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddOrUpdateThreadNetwork", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveNetwork", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "NetworkConfigResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ConnectNetwork", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ConnectNetworkResponse", + "code": 7, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ReorderNetwork", + "code": 8, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "MaxNetworks", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Networks", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ScanMaxTimeSeconds", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ConnectMaxTimeSeconds", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InterfaceEnabled", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastNetworkingStatus", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "NetworkCommissioningStatusEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastNetworkID", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastConnectErrorValue", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int32s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Diagnostic Logs", + "code": 50, + "mfgCode": null, + "define": "DIAGNOSTIC_LOGS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "RetrieveLogsRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RetrieveLogsResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "General Diagnostics", + "code": 51, + "mfgCode": null, + "define": "GENERAL_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshot", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshotResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NetworkInterfaces", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RebootCount", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UpTime", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TotalOperationalHours", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BootReason", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "BootReasonEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveHardwareFaults", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveRadioFaults", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveNetworkFaults", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TestEventTriggersEnabled", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "false", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "BootReason", + "code": 3, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Software Diagnostics", + "code": 52, + "mfgCode": null, + "define": "SOFTWARE_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "ResetWatermarks", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "ThreadMetrics", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentHeapFree", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentHeapUsed", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentHeapHighWatermark", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "OpenCommissioningWindow", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RevokeCommissioning", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "WindowStatus", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "CommissioningWindowStatusEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminFabricIndex", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "fabric_idx", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminVendorId", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "vendor_id", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AttestationRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AttestationResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CertificateChainRequest", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CertificateChainResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CSRRequest", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CSRResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "AddNOC", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "UpdateNOC", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "NOCResponse", + "code": 8, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "UpdateFabricLabel", + "code": 9, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveFabric", + "code": 10, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddTrustedRootCertificate", + "code": 11, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NOCs", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Fabrics", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SupportedFabrics", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CommissionedFabrics", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TrustedRootCertificates", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentFabricIndex", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0001", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Group Key Management", + "code": 63, + "mfgCode": null, + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "KeySetWrite", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetRead", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "KeySetRemove", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadAllIndices", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadAllIndicesResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "GroupKeyMap", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GroupTable", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupsPerFabric", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupKeysPerFabric", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + } + ] + }, + { + "id": 2, + "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "code": 267, + "profileId": 259, + "label": "MA-dimmablepluginunit", + "name": "MA-dimmablepluginunit" + }, + "deviceTypes": [ + { + "code": 267, + "profileId": 259, + "label": "MA-dimmablepluginunit", + "name": "MA-dimmablepluginunit" + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 267 + ], + "deviceTypeName": "MA-dimmablepluginunit", + "deviceTypeCode": 267, + "deviceTypeProfileId": 259, + "clusters": [ + { + "name": "Identify", + "code": 3, + "mfgCode": null, + "define": "IDENTIFY_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "Identify", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TriggerEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "IdentifyTime", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "IdentifyType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "IdentifyTypeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AddGroup", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ViewGroup", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ViewGroupResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetGroupMembership", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetGroupMembershipResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveGroup", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveGroupResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveAllGroups", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupIfIdentifying", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NameSupport", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "NameSupportBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "On/Off", + "code": 6, + "mfgCode": null, + "define": "ON_OFF_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "Off", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "On", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Toggle", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "OnOff", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 0, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GlobalSceneControl", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OffWaitTime", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpOnOff", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "StartUpOnOffEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "6", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Level Control", + "code": 8, + "mfgCode": null, + "define": "LEVEL_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToLevel", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Move", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Step", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Stop", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToLevelWithOnOff", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveWithOnOff", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepWithOnOff", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopWithOnOff", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentLevel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinLevel", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxLevel", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "OptionsBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnLevel", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Descriptor", + "code": 29, + "mfgCode": null, + "define": "DESCRIPTOR_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DeviceTypeList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ServerList", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientList", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartsList", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Binding", + "code": 30, + "mfgCode": null, + "define": "BINDING_CLUSTER", + "side": "client", + "enabled": 1, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Scenes Management", + "code": 98, + "mfgCode": null, + "define": "SCENES_CLUSTER", + "side": "server", + "enabled": 1, + "apiMaturity": "provisional", + "commands": [ + { + "name": "AddScene", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddSceneResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ViewScene", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ViewSceneResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveScene", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveSceneResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveAllScenes", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveAllScenesResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "StoreScene", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StoreSceneResponse", + "code": 4, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RecallScene", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetSceneMembership", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetSceneMembershipResponse", + "code": 6, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "SceneTableSize", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "16", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FabricSceneInfo", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Occupancy Sensing", + "code": 1030, + "mfgCode": null, + "define": "OCCUPANCY_SENSING_CLUSTER", + "side": "client", + "enabled": 1, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + } + ] + } + ], + "endpoints": [ + { + "endpointTypeName": "MA-rootdevice", + "endpointTypeIndex": 0, + "profileId": 259, + "endpointId": 0, + "networkId": 0, + "parentEndpointIdentifier": null + }, + { + "endpointTypeName": "Anonymous Endpoint Type", + "endpointTypeIndex": 1, + "profileId": 259, + "endpointId": 1, + "networkId": 0, + "parentEndpointIdentifier": null + } + ] +} \ No newline at end of file From c30f32fb0fe96db8178db5ddaeca033302a37d74 Mon Sep 17 00:00:00 2001 From: Pradip De Date: Tue, 18 Jun 2024 17:19:01 -0700 Subject: [PATCH 10/28] Pass largepayload flag into CommandSender in IM test app. (#33976) Use the session information from DeviceProxy to construct CommandSender for large payload if session supports it. Co-authored-by: Andrei Litvin --- .../suites/commands/interaction_model/InteractionModel.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/tests/suites/commands/interaction_model/InteractionModel.h b/src/app/tests/suites/commands/interaction_model/InteractionModel.h index 8070c6d001b47d..3acafb8de2acee 100644 --- a/src/app/tests/suites/commands/interaction_model/InteractionModel.h +++ b/src/app/tests/suites/commands/interaction_model/InteractionModel.h @@ -252,7 +252,9 @@ class InteractionModelCommands chip::app::CommandPathParams commandPath = { endpointId, clusterId, commandId, (chip::app::CommandPathFlags::kEndpointIdValid) }; auto commandSender = std::make_unique( - mCallback, device->GetExchangeManager(), mTimedInteractionTimeoutMs.HasValue(), mSuppressResponse.ValueOr(false)); + mCallback, device->GetExchangeManager(), mTimedInteractionTimeoutMs.HasValue(), mSuppressResponse.ValueOr(false), + device->GetSecureSession().Value()->AllowsLargePayload()); + VerifyOrReturnError(commandSender != nullptr, CHIP_ERROR_NO_MEMORY); chip::app::CommandSender::AddRequestDataParameters addRequestDataParams(mTimedInteractionTimeoutMs); From 10da30dd46e9933681d42545f6affef753f20c65 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Tue, 18 Jun 2024 21:34:44 -0400 Subject: [PATCH 11/28] Run zap_convert_all on the tree. (#34000) We have had XML changes that did not get reflected into .zap files, unfortunately, including marking things as no longer provisional. Fixing that by running zap_convert_all.py discovered a problem in the Thread Border Router Management cluster XML: it was using the wrong define value. And apparently the .zap files involved had been hand-edited to not match the XML to allow code to compile, but regenerating them obviously "broke" that. The fix is to use the right value in the XML. --- .../air-purifier-common/air-purifier-app.zap | 3 +- .../air-quality-sensor-app.zap | 3 +- .../all-clusters-common/all-clusters-app.zap | 16 +- .../all-clusters-minimal-app.zap | 3 +- .../bridge-app/bridge-common/bridge-app.zap | 3 +- ...noip_rootnode_dimmablelight_bCwGYSDpoe.zap | 3 +- .../rootnode_airpurifier_73a6fe2651.zap | 2 +- ...r_humiditysensor_thermostat_56de3d5f45.zap | 3 +- .../rootnode_airqualitysensor_e63187f6c9.zap | 2 +- .../rootnode_basicvideoplayer_0ff86e943b.zap | 3 +- ...tnode_colortemperaturelight_hbUnzYVeyn.zap | 3 +- .../rootnode_contactsensor_27f76aeaf5.zap | 3 +- .../rootnode_contactsensor_lFAGG1bfRO.zap | 3 +- .../rootnode_dimmablelight_bCwGYSDpoe.zap | 3 +- .../rootnode_dishwasher_cc105034fe.zap | 3 +- .../devices/rootnode_doorlock_aNKYAreMXE.zap | 5 +- ...rootnode_extendedcolorlight_8lcaaYJVAa.zap | 3 +- .../chef/devices/rootnode_fan_7N2TobIlOX.zap | 3 +- .../rootnode_flowsensor_1zVxHedlaV.zap | 3 +- .../rootnode_genericswitch_2dfff6e516.zap | 2 +- .../rootnode_genericswitch_9866e35d0b.zap | 2 +- ...rootnode_heatingcoolingunit_ncdGai1E5a.zap | 3 +- .../rootnode_humiditysensor_Xyj4gda6Hb.zap | 3 +- .../rootnode_laundrywasher_fb10d238c8.zap | 29 +-- .../rootnode_lightsensor_lZQycTFcJK.zap | 3 +- .../rootnode_occupancysensor_iHyVgifZuo.zap | 3 +- .../rootnode_onofflight_bbs1b7IaOV.zap | 3 +- .../devices/rootnode_onofflight_samplemei.zap | 3 +- .../rootnode_onofflightswitch_FsPlMr090Q.zap | 3 +- .../rootnode_onoffpluginunit_Wtf8ss5EBY.zap | 3 +- .../rootnode_pressuresensor_s0qC9wLH4k.zap | 3 +- .../chef/devices/rootnode_pump_5f904818cc.zap | 3 +- .../chef/devices/rootnode_pump_a811bb33a0.zap | 3 +- ...emperaturecontrolledcabinet_ffdb696680.zap | 3 +- ...otnode_roboticvacuumcleaner_1807ff0c49.zap | 8 +- ...rootnode_roomairconditioner_9cf3607804.zap | 15 +- .../rootnode_smokecoalarm_686fe0dcb8.zap | 3 +- .../devices/rootnode_speaker_RpzeXdimqA.zap | 3 +- .../rootnode_temperaturesensor_Qy1zkNW7c3.zap | 3 +- .../rootnode_thermostat_bm3fb8dhYi.zap | 3 +- .../rootnode_windowcovering_RLCxaGi9Yx.zap | 3 +- examples/chef/devices/template.zap | 3 +- .../contact-sensor-app.zap | 3 +- .../nxp/zap-lit/contact-sensor-app.zap | 3 +- .../nxp/zap-sit/contact-sensor-app.zap | 9 +- .../dishwasher-common/dishwasher-app.zap | 3 +- .../energy-management-app.zap | 10 +- .../fabric-bridge-app.zap | 2 +- .../nxp/zap/laundry-washer-app.zap | 17 +- .../light-switch-common/light-switch-app.zap | 3 +- examples/light-switch-app/qpg/zap/switch.zap | 17 +- .../data_model/lighting-app-ethernet.zap | 3 +- .../data_model/lighting-app-thread.zap | 3 +- .../data_model/lighting-app-wifi.zap | 3 +- .../lighting-common/lighting-app.zap | 3 +- .../lighting-app/nxp/zap/lighting-on-off.zap | 3 +- examples/lighting-app/qpg/zap/light.zap | 5 +- .../silabs/data_model/lighting-thread-app.zap | 75 +++---- .../silabs/data_model/lighting-wifi-app.zap | 3 +- .../lit-icd-common/lit-icd-server-app.zap | 2 +- examples/lock-app/lock-common/lock-app.zap | 3 +- examples/lock-app/nxp/zap/lock-app.zap | 5 +- examples/lock-app/qpg/zap/lock.zap | 5 +- .../log-source-common/log-source-app.zap | 3 +- .../microwave-oven-app.zap | 5 +- .../network-manager-app.zap | 2 +- .../ota-provider-common/ota-provider-app.zap | 3 +- .../ota-requestor-app.zap | 3 +- .../placeholder/linux/apps/app1/config.zap | 3 +- .../placeholder/linux/apps/app2/config.zap | 3 +- examples/pump-app/pump-common/pump-app.zap | 3 +- .../silabs/data_model/pump-thread-app.zap | 3 +- .../silabs/data_model/pump-wifi-app.zap | 3 +- .../pump-controller-app.zap | 3 +- .../refrigerator-common/refrigerator-app.zap | 3 +- examples/rvc-app/rvc-common/rvc-app.zap | 3 +- .../smoke-co-alarm-app.zap | 3 +- .../temperature-measurement.zap | 3 +- .../nxp/zap/thermostat_matter_thread.zap | 37 ++-- .../nxp/zap/thermostat_matter_wifi.zap | 25 ++- .../qpg/zap/thermostaticRadiatorValve.zap | 3 +- .../thermostat-common/thermostat.zap | 3 +- examples/tv-app/tv-common/tv-app.zap | 3 +- .../tv-casting-common/tv-casting-app.zap | 3 +- .../virtual-device-app.zap | 11 +- examples/window-app/common/window-app.zap | 3 +- .../zap/tests/inputs/all-clusters-app.zap | 18 +- .../tools/zap/tests/inputs/lighting-app.zap | 5 +- ...hread-border-router-management-cluster.xml | 2 +- .../data_model/controller-clusters.zap | 189 ++++++++---------- 90 files changed, 367 insertions(+), 341 deletions(-) diff --git a/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap b/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap index 516cb763153e1f..9d65016495b691 100644 --- a/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap +++ b/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap index a4d9ae077df2ee..023a19864173c0 100644 --- a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap +++ b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap index 8660f24af8b504..f0afbd78296bd2 100644 --- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap +++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -8226,7 +8227,6 @@ "define": "OPERATIONAL_STATE_OVEN_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "Pause", @@ -8487,7 +8487,6 @@ "define": "OVEN_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", @@ -8644,7 +8643,6 @@ "define": "LAUNDRY_DRYER_CONTROLS_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "SupportedDrynessLevels", @@ -10898,7 +10896,6 @@ "define": "MICROWAVE_OVEN_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "SupportedModes", @@ -12202,7 +12199,6 @@ "define": "BOOLEAN_STATE_CONFIGURATION_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "SuppressAlarm", @@ -12471,7 +12467,6 @@ "define": "VALVE_CONFIGURATION_AND_CONTROL_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "Open", @@ -12788,7 +12783,6 @@ "define": "ELECTRICAL_POWER_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "PowerMode", @@ -13208,7 +13202,6 @@ "define": "ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "Accuracy", @@ -13580,7 +13573,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "array", + "type": "PowerAdjustCapabilityStruct", "included": 1, "storageOption": "External", "singleton": 0, @@ -13758,7 +13751,6 @@ "define": "ENERGY_EVSE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "GetTargetsResponse", @@ -14434,7 +14426,6 @@ "define": "POWER_TOPOLOGY_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "AvailableEndpoints", @@ -14573,7 +14564,6 @@ "define": "ENERGY_EVSE_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap index f6d3c8da0bf480..9e4c4ac08b252b 100644 --- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap +++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/bridge-app/bridge-common/bridge-app.zap b/examples/bridge-app/bridge-common/bridge-app.zap index ee172e2f021daf..9e79b7848a4dda 100644 --- a/examples/bridge-app/bridge-common/bridge-app.zap +++ b/examples/bridge-app/bridge-common/bridge-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap index 84f87b51c18147..1fe8c97a3cda61 100644 --- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap +++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap index fc392ea914fffe..f76860576fe362 100644 --- a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap +++ b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap index 9ea1682de38cad..6b0977ea34be34 100644 --- a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap +++ b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap index 13eb05e1675f81..127d31dc60551f 100644 --- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap +++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap index e2719452ae9531..3935c80b5b62d8 100644 --- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap +++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap index 7a1853d36cf2cd..f3a2c9649d7356 100644 --- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap +++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap index 4a57e6a0b9e2fa..590dea9f9f3c8e 100644 --- a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap +++ b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap index a47dc3a0b5c53e..d050409f3625c6 100644 --- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap +++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap index 0d03015fbf4905..29e4889ffbe438 100644 --- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap +++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap b/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap index 7b211cba5c115f..770fe6edaf16d3 100644 --- a/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap +++ b/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap index 1e9094f9d7a96e..339fe71d2631a3 100644 --- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap +++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -3954,4 +3955,4 @@ "parentEndpointIdentifier": null } ] -} +} \ No newline at end of file diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap index f515547240b883..b72d455419f8a7 100644 --- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap +++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap b/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap index 3ce2411a08df9a..29c2139fd0a09f 100644 --- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap +++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap index 07580fb6faec1e..09593e5b109f30 100644 --- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap +++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap index 1f84a7aab45a71..b8f941b101de57 100644 --- a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap +++ b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap index 8e62878f7a4e40..ae37c5dbef1732 100644 --- a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap +++ b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap index f8e6f43a31e2d9..cc2e7ef77d2186 100644 --- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap +++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap index bfa0b7e5237cb8..9af0c6f4e97924 100644 --- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap +++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap index 6a142824041899..f023dad7d8e8a4 100644 --- a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap +++ b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -3199,7 +3200,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3215,7 +3216,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3231,7 +3232,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3247,7 +3248,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3263,7 +3264,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3279,7 +3280,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3295,7 +3296,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3337,7 +3338,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3385,7 +3386,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3401,7 +3402,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3417,7 +3418,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3433,7 +3434,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3449,7 +3450,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap index c2e9f3d4050066..e6c9ce20572a5e 100644 --- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap +++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap index 0c6c00a32352dd..5fa3595ec45ee5 100644 --- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap +++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap index df9faf6e9f9c6c..c9ecb1d30b494c 100644 --- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap +++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.zap b/examples/chef/devices/rootnode_onofflight_samplemei.zap index 7c9187724dc3c1..c7e4698ff78641 100644 --- a/examples/chef/devices/rootnode_onofflight_samplemei.zap +++ b/examples/chef/devices/rootnode_onofflight_samplemei.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap index b76fdf825e70f5..be0a44c92a9b74 100644 --- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap +++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap index 54cfd48e319e14..356230f6e6cd89 100644 --- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap +++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap index 5696c00064ec77..00a5272aa76766 100644 --- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap +++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_pump_5f904818cc.zap b/examples/chef/devices/rootnode_pump_5f904818cc.zap index a5a3976ed99d11..c93cf13214ca17 100644 --- a/examples/chef/devices/rootnode_pump_5f904818cc.zap +++ b/examples/chef/devices/rootnode_pump_5f904818cc.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_pump_a811bb33a0.zap b/examples/chef/devices/rootnode_pump_a811bb33a0.zap index 4a3d6f5ea9089b..6a68b8566319b4 100644 --- a/examples/chef/devices/rootnode_pump_a811bb33a0.zap +++ b/examples/chef/devices/rootnode_pump_a811bb33a0.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap index ca71e2306c494f..bf7540df089035 100644 --- a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap +++ b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap index 15c155dbb69d12..81144c4b3b437f 100644 --- a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap +++ b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -2351,7 +2351,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -2367,7 +2367,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -2383,7 +2383,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap index dfcd56655044ec..95defffb7a7975 100644 --- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap +++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -17,6 +17,13 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/zcl/zcl.json", @@ -24,12 +31,6 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" } ], "endpointTypes": [ diff --git a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap index 35e317864d7f9a..3439c0c6c04ab9 100644 --- a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap +++ b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap index e1340f237c2996..03f05dae9248db 100644 --- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap +++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap index 833445ad9138e7..4d3f63260f57e4 100644 --- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap +++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap index d92e123e8f6638..aa5d18f081aa94 100644 --- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap +++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap index 073cf584fe633f..cc78cf315cacc2 100644 --- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap +++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/chef/devices/template.zap b/examples/chef/devices/template.zap index 6e51733de6e1c2..c722acbb13e59e 100644 --- a/examples/chef/devices/template.zap +++ b/examples/chef/devices/template.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap index 6e810d2e9641ed..9d2dd1e830ff36 100644 --- a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap +++ b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap index c5e51959f5b242..90183a0e214f94 100644 --- a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap +++ b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap index ce8cc0c551ca67..c8607e299d782c 100644 --- a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap +++ b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 99, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -4150,14 +4151,16 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null }, { "endpointTypeName": "MA-dimmablelight", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null } ] } \ No newline at end of file diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap b/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap index e639aba9e7ccee..12cad848810d09 100644 --- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap +++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/energy-management-app/energy-management-common/energy-management-app.zap b/examples/energy-management-app/energy-management-common/energy-management-app.zap index 0cb0f0466e5500..57ae22f51c9aab 100644 --- a/examples/energy-management-app/energy-management-common/energy-management-app.zap +++ b/examples/energy-management-app/energy-management-common/energy-management-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -3058,7 +3059,6 @@ "define": "ELECTRICAL_POWER_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "PowerMode", @@ -3469,7 +3469,6 @@ "define": "ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "Accuracy", @@ -3841,7 +3840,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "array", + "type": "PowerAdjustCapabilityStruct", "included": 1, "storageOption": "External", "singleton": 0, @@ -4019,7 +4018,6 @@ "define": "ENERGY_EVSE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "GetTargetsResponse", @@ -4508,7 +4506,6 @@ "define": "POWER_TOPOLOGY_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "GeneratedCommandList", @@ -4615,7 +4612,6 @@ "define": "ENERGY_EVSE_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", diff --git a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap index 38bfd514882edd..cbf31a039b85ee 100644 --- a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap +++ b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap index 3a30427a3ee25d..b58e1cdea5b257 100644 --- a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap +++ b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 99, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -1328,7 +1329,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1344,7 +1345,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1360,7 +1361,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1376,7 +1377,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5275,14 +5276,16 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null }, { "endpointTypeName": "Anonymous Endpoint Type", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null } ] } \ No newline at end of file diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.zap b/examples/light-switch-app/light-switch-common/light-switch-app.zap index 3c55161e479404..c181f1ffae1120 100644 --- a/examples/light-switch-app/light-switch-common/light-switch-app.zap +++ b/examples/light-switch-app/light-switch-common/light-switch-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/light-switch-app/qpg/zap/switch.zap b/examples/light-switch-app/qpg/zap/switch.zap index b04ff644b1192c..0f65ac5eb64615 100644 --- a/examples/light-switch-app/qpg/zap/switch.zap +++ b/examples/light-switch-app/qpg/zap/switch.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -17,6 +17,13 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/zcl/zcl.json", @@ -24,12 +31,6 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" } ], "endpointTypes": [ @@ -1968,7 +1969,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap index 5ebafc82e5bcda..23465bb5f517aa 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap index 0346e197b8df03..a90a3218a93c5e 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap index 11f0f8146c0faf..dea7862fc7ce5c 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lighting-app/lighting-common/lighting-app.zap b/examples/lighting-app/lighting-common/lighting-app.zap index f4ca3d4705b405..69ee10fe7794f0 100644 --- a/examples/lighting-app/lighting-common/lighting-app.zap +++ b/examples/lighting-app/lighting-common/lighting-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.zap b/examples/lighting-app/nxp/zap/lighting-on-off.zap index 053389db7308ef..2e01bf3d298255 100644 --- a/examples/lighting-app/nxp/zap/lighting-on-off.zap +++ b/examples/lighting-app/nxp/zap/lighting-on-off.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lighting-app/qpg/zap/light.zap b/examples/lighting-app/qpg/zap/light.zap index 2c0a76acead00e..62d6453e7abf03 100644 --- a/examples/lighting-app/qpg/zap/light.zap +++ b/examples/lighting-app/qpg/zap/light.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -1856,7 +1857,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap index 437aac9d67bdac..e759d83b2f2276 100644 --- a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -17,12 +17,6 @@ } ], "package": [ - { - "pathRelativity": "relativeToZap", - "path": "../../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" - }, { "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/zcl/zcl.json", @@ -30,6 +24,13 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data" + }, + { + "pathRelativity": "relativeToZap", + "path": "../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" } ], "endpointTypes": [ @@ -3341,7 +3342,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3357,7 +3358,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0", - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -3561,7 +3562,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3749,7 +3750,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x01", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3765,7 +3766,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3781,7 +3782,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3797,7 +3798,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0xFF", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -3985,7 +3986,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x01", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -4001,7 +4002,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -4017,7 +4018,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x01", - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -4097,7 +4098,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x00", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -4129,7 +4130,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0xFF", - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -4193,7 +4194,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "255", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -4331,7 +4332,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -4347,7 +4348,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -4363,7 +4364,7 @@ "singleton": 0, "bounded": 0, "defaultValue": null, - "reportable": 0, + "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 @@ -4932,7 +4933,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -4996,7 +4997,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x01", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5012,7 +5013,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x00", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5028,7 +5029,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5060,7 +5061,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x01", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5156,7 +5157,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x1F", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5172,7 +5173,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0x0000", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5188,7 +5189,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "0xFEFF", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5204,7 +5205,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5220,7 +5221,7 @@ "singleton": 0, "bounded": 0, "defaultValue": "", - "reportable": 0, + "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 @@ -5235,7 +5236,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5251,7 +5252,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5267,7 +5268,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5283,7 +5284,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap index acd877496b7497..84dd93b4bc6533 100644 --- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap index 93d47fc3870900..cd8e9083ef2f4b 100644 --- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap +++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/lock-app/lock-common/lock-app.zap b/examples/lock-app/lock-common/lock-app.zap index 376e925d6545bb..182645823f1065 100644 --- a/examples/lock-app/lock-common/lock-app.zap +++ b/examples/lock-app/lock-common/lock-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/lock-app/nxp/zap/lock-app.zap b/examples/lock-app/nxp/zap/lock-app.zap index de2ffe615ee4e5..abf9d2e6bf2a6c 100644 --- a/examples/lock-app/nxp/zap/lock-app.zap +++ b/examples/lock-app/nxp/zap/lock-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -3460,4 +3461,4 @@ "parentEndpointIdentifier": null } ] -} +} \ No newline at end of file diff --git a/examples/lock-app/qpg/zap/lock.zap b/examples/lock-app/qpg/zap/lock.zap index d4116f8b9d7602..affc31d2d79610 100644 --- a/examples/lock-app/qpg/zap/lock.zap +++ b/examples/lock-app/qpg/zap/lock.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -1856,7 +1857,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/log-source-app/log-source-common/log-source-app.zap b/examples/log-source-app/log-source-common/log-source-app.zap index 22d2760d44885f..dff2d9fcc35ed8 100644 --- a/examples/log-source-app/log-source-common/log-source-app.zap +++ b/examples/log-source-app/log-source-common/log-source-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap index a6f1ff62c1d03b..03113285ad2567 100644 --- a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap +++ b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -3014,7 +3015,6 @@ "define": "MICROWAVE_OVEN_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "SupportedModes", @@ -3153,7 +3153,6 @@ "define": "MICROWAVE_OVEN_CONTROL_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "SetCookingParameters", diff --git a/examples/network-manager-app/network-manager-common/network-manager-app.zap b/examples/network-manager-app/network-manager-common/network-manager-app.zap index cb4e48c3c0480b..2e0180ebc27357 100644 --- a/examples/network-manager-app/network-manager-common/network-manager-app.zap +++ b/examples/network-manager-app/network-manager-common/network-manager-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { diff --git a/examples/ota-provider-app/ota-provider-common/ota-provider-app.zap b/examples/ota-provider-app/ota-provider-common/ota-provider-app.zap index 6a69efccb3ef87..c98b9e661328e5 100644 --- a/examples/ota-provider-app/ota-provider-common/ota-provider-app.zap +++ b/examples/ota-provider-app/ota-provider-common/ota-provider-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap index e4133c02918306..5291880efb89f0 100644 --- a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap +++ b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/placeholder/linux/apps/app1/config.zap b/examples/placeholder/linux/apps/app1/config.zap index 8e493ace9674be..0f7dff994bd646 100644 --- a/examples/placeholder/linux/apps/app1/config.zap +++ b/examples/placeholder/linux/apps/app1/config.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/placeholder/linux/apps/app2/config.zap b/examples/placeholder/linux/apps/app2/config.zap index 055309e6c07340..786ccbbea4ee8d 100644 --- a/examples/placeholder/linux/apps/app2/config.zap +++ b/examples/placeholder/linux/apps/app2/config.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/pump-app/pump-common/pump-app.zap b/examples/pump-app/pump-common/pump-app.zap index 56cad0df3333c0..cf2045a9d88ca9 100644 --- a/examples/pump-app/pump-common/pump-app.zap +++ b/examples/pump-app/pump-common/pump-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/pump-app/silabs/data_model/pump-thread-app.zap b/examples/pump-app/silabs/data_model/pump-thread-app.zap index 062d7005982a69..411699e5e59f33 100644 --- a/examples/pump-app/silabs/data_model/pump-thread-app.zap +++ b/examples/pump-app/silabs/data_model/pump-thread-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/pump-app/silabs/data_model/pump-wifi-app.zap b/examples/pump-app/silabs/data_model/pump-wifi-app.zap index 062d7005982a69..411699e5e59f33 100644 --- a/examples/pump-app/silabs/data_model/pump-wifi-app.zap +++ b/examples/pump-app/silabs/data_model/pump-wifi-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/pump-controller-app/pump-controller-common/pump-controller-app.zap b/examples/pump-controller-app/pump-controller-common/pump-controller-app.zap index 4b9458c73678a0..7b71c3e3116090 100644 --- a/examples/pump-controller-app/pump-controller-common/pump-controller-app.zap +++ b/examples/pump-controller-app/pump-controller-common/pump-controller-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/refrigerator-app/refrigerator-common/refrigerator-app.zap b/examples/refrigerator-app/refrigerator-common/refrigerator-app.zap index ebb8f70ea5aa9e..64bf5b3bca8577 100644 --- a/examples/refrigerator-app/refrigerator-common/refrigerator-app.zap +++ b/examples/refrigerator-app/refrigerator-common/refrigerator-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/rvc-app/rvc-common/rvc-app.zap b/examples/rvc-app/rvc-common/rvc-app.zap index fecc58d801f656..7afc8b7d3b819b 100644 --- a/examples/rvc-app/rvc-common/rvc-app.zap +++ b/examples/rvc-app/rvc-common/rvc-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap index e6b547c8912869..4ba684c480c6a5 100644 --- a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap +++ b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.zap b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.zap index 72a68b64e569f1..5a1f1389e3fc87 100644 --- a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.zap +++ b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/thermostat/nxp/zap/thermostat_matter_thread.zap b/examples/thermostat/nxp/zap/thermostat_matter_thread.zap index aa8b54c82574b9..489e9e00ab44bf 100644 --- a/examples/thermostat/nxp/zap/thermostat_matter_thread.zap +++ b/examples/thermostat/nxp/zap/thermostat_matter_thread.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 99, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -17,6 +17,13 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/zcl/zcl.json", @@ -24,12 +31,6 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" } ], "endpointTypes": [ @@ -128,7 +129,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -144,7 +145,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -160,7 +161,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -176,7 +177,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4012,7 +4013,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4028,7 +4029,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4044,7 +4045,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4060,7 +4061,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5396,14 +5397,16 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null }, { "endpointTypeName": "MA-thermostat", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null } ] } \ No newline at end of file diff --git a/examples/thermostat/nxp/zap/thermostat_matter_wifi.zap b/examples/thermostat/nxp/zap/thermostat_matter_wifi.zap index 14c9dc4ecf3f75..fbb71356ddaf07 100644 --- a/examples/thermostat/nxp/zap/thermostat_matter_wifi.zap +++ b/examples/thermostat/nxp/zap/thermostat_matter_wifi.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 99, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -128,7 +129,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -144,7 +145,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -160,7 +161,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -176,7 +177,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3106,7 +3107,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3122,7 +3123,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3138,7 +3139,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3154,7 +3155,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4490,14 +4491,16 @@ "endpointTypeIndex": 0, "profileId": 259, "endpointId": 0, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null }, { "endpointTypeName": "MA-thermostat", "endpointTypeIndex": 1, "profileId": 259, "endpointId": 1, - "networkId": 0 + "networkId": 0, + "parentEndpointIdentifier": null } ] } \ No newline at end of file diff --git a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.zap b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.zap index a7f0c9cded77f6..c30867b7da3149 100644 --- a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.zap +++ b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/thermostat/thermostat-common/thermostat.zap b/examples/thermostat/thermostat-common/thermostat.zap index 3a39fb6b0e2909..288a84a921636c 100644 --- a/examples/thermostat/thermostat-common/thermostat.zap +++ b/examples/thermostat/thermostat-common/thermostat.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/tv-app/tv-common/tv-app.zap b/examples/tv-app/tv-common/tv-app.zap index 3fce693642d18d..8e5028b4ed8d25 100644 --- a/examples/tv-app/tv-common/tv-app.zap +++ b/examples/tv-app/tv-common/tv-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap b/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap index 526143427a3cb7..c9cc4c8e9eb598 100644 --- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap +++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap index 4046660e64a9a1..93728b6f5fed7e 100644 --- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap +++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -6176,7 +6177,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -6192,7 +6193,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -6208,7 +6209,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -6224,7 +6225,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/window-app/common/window-app.zap b/examples/window-app/common/window-app.zap index 5aaefb796e33ab..5f689678cb9415 100644 --- a/examples/window-app/common/window-app.zap +++ b/examples/window-app/common/window-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], diff --git a/scripts/tools/zap/tests/inputs/all-clusters-app.zap b/scripts/tools/zap/tests/inputs/all-clusters-app.zap index 02ac0a740205c4..825cf1cd6242c0 100644 --- a/scripts/tools/zap/tests/inputs/all-clusters-app.zap +++ b/scripts/tools/zap/tests/inputs/all-clusters-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 102, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -8226,7 +8227,6 @@ "define": "OPERATIONAL_STATE_OVEN_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "Pause", @@ -8487,7 +8487,6 @@ "define": "OVEN_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", @@ -8644,7 +8643,6 @@ "define": "LAUNDRY_DRYER_CONTROLS_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "SupportedDrynessLevels", @@ -10898,7 +10896,6 @@ "define": "MICROWAVE_OVEN_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "SupportedModes", @@ -12202,7 +12199,6 @@ "define": "BOOLEAN_STATE_CONFIGURATION_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "SuppressAlarm", @@ -12471,7 +12467,6 @@ "define": "VALVE_CONFIGURATION_AND_CONTROL_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "Open", @@ -12788,7 +12783,6 @@ "define": "ELECTRICAL_POWER_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "PowerMode", @@ -13208,7 +13202,6 @@ "define": "ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "Accuracy", @@ -13580,7 +13573,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "array", + "type": "PowerAdjustCapabilityStruct", "included": 1, "storageOption": "External", "singleton": 0, @@ -13758,7 +13751,6 @@ "define": "ENERGY_EVSE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "GetTargetsResponse", @@ -14434,7 +14426,6 @@ "define": "POWER_TOPOLOGY_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "AvailableEndpoints", @@ -14573,7 +14564,6 @@ "define": "ENERGY_EVSE_MODE_CLUSTER", "side": "server", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", @@ -25317,4 +25307,4 @@ "parentEndpointIdentifier": null } ] -} +} \ No newline at end of file diff --git a/scripts/tools/zap/tests/inputs/lighting-app.zap b/scripts/tools/zap/tests/inputs/lighting-app.zap index fa8c99710903a6..53b5cb008a201b 100644 --- a/scripts/tools/zap/tests/inputs/lighting-app.zap +++ b/scripts/tools/zap/tests/inputs/lighting-app.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -5931,4 +5932,4 @@ "parentEndpointIdentifier": null } ] -} +} \ No newline at end of file diff --git a/src/app/zap-templates/zcl/data-model/chip/thread-border-router-management-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/thread-border-router-management-cluster.xml index 2f87416f815b80..2c1cd01d67c7b2 100644 --- a/src/app/zap-templates/zcl/data-model/chip/thread-border-router-management-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/thread-border-router-management-cluster.xml @@ -26,7 +26,7 @@ limitations under the License. HRAP Thread Border Router Management 0x0452 - THREAD_BORDER_ROUTER_MANAGEMENT + THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER true true Manage the Thread network of Thread Border Router diff --git a/src/controller/data_model/controller-clusters.zap b/src/controller/data_model/controller-clusters.zap index b47470d022b108..abba3d15cd18ca 100644 --- a/src/controller/data_model/controller-clusters.zap +++ b/src/controller/data_model/controller-clusters.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -1180,106 +1181,6 @@ } ] }, - { - "name": "Thread Border Router Management", - "code": 1106, - "mfgCode": null, - "define": "THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER", - "side": "client", - "enabled": 1, - "commands": [ - { - "name": "GetActiveDatasetRequest", - "code": 0, - "mfgCode": null, - "source": "client", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "GetPendingDatasetRequest", - "code": 1, - "mfgCode": null, - "source": "client", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "DatasetResponse", - "code": 2, - "mfgCode": null, - "source": "server", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "SetActiveDatasetRequest", - "code": 3, - "mfgCode": null, - "source": "client", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "SetPendingDatasetRequest", - "code": 4, - "mfgCode": null, - "source": "client", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "TopologyRequest", - "code": 5, - "mfgCode": null, - "source": "client", - "isIncoming": 0, - "isEnabled": 1 - }, - { - "name": "TopologyResponse", - "code": 6, - "mfgCode": null, - "source": "server", - "isIncoming": 0, - "isEnabled": 1 - } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "2", - "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 - } - ] - }, { "name": "Thread Network Diagnostics", "code": 53, @@ -2028,7 +1929,6 @@ "define": "OPERATIONAL_STATE_OVEN_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -2071,7 +1971,6 @@ "define": "OVEN_MODE_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", @@ -2132,7 +2031,6 @@ "define": "LAUNDRY_DRYER_CONTROLS_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -2793,7 +2691,6 @@ "define": "MICROWAVE_OVEN_MODE_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -2836,7 +2733,6 @@ "define": "MICROWAVE_OVEN_CONTROL_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "SetCookingParameters", @@ -3216,7 +3112,6 @@ "define": "ELECTRICAL_POWER_MEASUREMENT_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -3259,7 +3154,6 @@ "define": "ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -3345,7 +3239,6 @@ "define": "ENERGY_EVSE_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "Disable", @@ -3406,7 +3299,6 @@ "define": "POWER_TOPOLOGY_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "attributes": [ { "name": "FeatureMap", @@ -3449,7 +3341,6 @@ "define": "ENERGY_EVSE_MODE_CLUSTER", "side": "client", "enabled": 1, - "apiMaturity": "provisional", "commands": [ { "name": "ChangeToMode", @@ -4856,6 +4747,82 @@ } ] }, + { + "name": "Thread Border Router Management", + "code": 1106, + "mfgCode": null, + "define": "THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ + { + "name": "GetActiveDatasetRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetPendingDatasetRequest", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "SetActiveDatasetRequest", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "SetPendingDatasetRequest", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, { "name": "Wake on LAN", "code": 1283, From f6ac92660b416f810610a0fa2c13989d4c3c8801 Mon Sep 17 00:00:00 2001 From: Anush Nadathur Date: Tue, 18 Jun 2024 18:52:50 -0700 Subject: [PATCH 12/28] [Metrics] Added additional metrics for CASE and Subscription (#33934) * [Metrics] Added additional metrics for CASE and Subscription - CASE session tracking - Subscription Setup - MRP Retries * Fixed code review comment * Restyler fixes * Update src/darwin/Framework/CHIP/MTRDevice.mm Co-authored-by: Boris Zbarsky * Addressed code review comments * Update src/darwin/Framework/CHIP/MTRMetricKeys.h Co-authored-by: Boris Zbarsky * Fixed build failure when tracing is off * Resytle fixes --------- Co-authored-by: Boris Zbarsky --- src/app/ReadClient.cpp | 17 ++++- src/darwin/Framework/CHIP/MTRDevice.mm | 6 ++ src/darwin/Framework/CHIP/MTRMetricKeys.h | 4 ++ src/messaging/ReliableMessageMgr.cpp | 2 + src/protocols/secure_channel/CASESession.cpp | 75 ++++++++++++++++---- src/tracing/metric_keys.h | 24 +++++++ 6 files changed, 114 insertions(+), 14 deletions(-) diff --git a/src/app/ReadClient.cpp b/src/app/ReadClient.cpp index bb058e091858c7..78b0a56fdd7c26 100644 --- a/src/app/ReadClient.cpp +++ b/src/app/ReadClient.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -186,6 +187,11 @@ void ReadClient::Close(CHIP_ERROR aError, bool allowResubscription) } else { + if (IsAwaitingInitialReport() || IsAwaitingSubscribeResponse()) + { + MATTER_LOG_METRIC_END(Tracing::kMetricDeviceSubscriptionSetup, aError); + } + ClearActiveSubscriptionState(); if (aError != CHIP_NO_ERROR) { @@ -491,6 +497,7 @@ CHIP_ERROR ReadClient::OnMessageReceived(Messaging::ExchangeContext * apExchange ChipLogProgress(DataManagement, "SubscribeResponse is received"); VerifyOrExit(apExchangeContext == mExchange.Get(), err = CHIP_ERROR_INCORRECT_STATE); err = ProcessSubscribeResponse(std::move(aPayload)); + MATTER_LOG_METRIC_END(Tracing::kMetricDeviceSubscriptionSetup, err); } else if (aPayloadHeader.HasMessageType(Protocols::InteractionModel::MsgType::StatusResponse)) { @@ -684,6 +691,7 @@ void ReadClient::OnResponseTimeout(Messaging::ExchangeContext * apExchangeContex { ChipLogError(DataManagement, "Time out! failed to receive report data from Exchange: " ChipLogFormatExchange, ChipLogValueExchange(apExchangeContext)); + Close(CHIP_ERROR_TIMEOUT); } @@ -1096,11 +1104,18 @@ CHIP_ERROR ReadClient::SendSubscribeRequest(const ReadPrepareParams & aReadPrepa VerifyOrReturnError(aReadPrepareParams.mMinIntervalFloorSeconds <= aReadPrepareParams.mMaxIntervalCeilingSeconds, CHIP_ERROR_INVALID_ARGUMENT); - return SendSubscribeRequestImpl(aReadPrepareParams); + auto err = SendSubscribeRequestImpl(aReadPrepareParams); + if (CHIP_NO_ERROR != err) + { + MATTER_LOG_METRIC_END(Tracing::kMetricDeviceSubscriptionSetup, err); + } + return err; } CHIP_ERROR ReadClient::SendSubscribeRequestImpl(const ReadPrepareParams & aReadPrepareParams) { + MATTER_LOG_METRIC_BEGIN(Tracing::kMetricDeviceSubscriptionSetup); + VerifyOrReturnError(ClientState::Idle == mState, CHIP_ERROR_INCORRECT_STATE); if (&aReadPrepareParams != &mReadPrepareParams) diff --git a/src/darwin/Framework/CHIP/MTRDevice.mm b/src/darwin/Framework/CHIP/MTRDevice.mm index 9d1853c0e3d663..89db49f077cdca 100644 --- a/src/darwin/Framework/CHIP/MTRDevice.mm +++ b/src/darwin/Framework/CHIP/MTRDevice.mm @@ -160,6 +160,7 @@ - (void)_deviceInternalStateChanged:(MTRDevice *)device; using namespace chip; using namespace chip::app; using namespace chip::Protocols::InteractionModel; +using namespace chip::Tracing::DarwinFramework; typedef void (^FirstReportHandler)(void); @@ -1184,6 +1185,7 @@ - (void)_handleSubscriptionEstablished if (HadSubscriptionEstablishedOnce(_internalDeviceState)) { [self _changeInternalState:MTRInternalDeviceStateLaterSubscriptionEstablished]; } else { + MATTER_LOG_METRIC_END(kMetricMTRDeviceInitialSubscriptionSetup, CHIP_NO_ERROR); [self _changeInternalState:MTRInternalDeviceStateInitialSubscriptionEstablished]; } @@ -2340,6 +2342,10 @@ - (void)_setupSubscriptionWithReason:(NSString *)reason }); } + // This marks begin of initial subscription to the device (before CASE is established). The end is only marked after successfully setting + // up the subscription since it is always retried as long as the MTRDevice is kept running. + MATTER_LOG_METRIC_BEGIN(kMetricMTRDeviceInitialSubscriptionSetup); + // Call directlyGetSessionForNode because the subscription setup already goes through the subscription pool queue [_deviceController directlyGetSessionForNode:_nodeID.unsignedLongLongValue diff --git a/src/darwin/Framework/CHIP/MTRMetricKeys.h b/src/darwin/Framework/CHIP/MTRMetricKeys.h index 536da36b582053..d20ec3395656a4 100644 --- a/src/darwin/Framework/CHIP/MTRMetricKeys.h +++ b/src/darwin/Framework/CHIP/MTRMetricKeys.h @@ -16,6 +16,7 @@ #include #include +#include namespace chip { namespace Tracing { @@ -87,6 +88,9 @@ constexpr Tracing::MetricKey kMetricBLEDevicesRemoved = "dwnfw_ble_devices_remov // Unexpected C quality attribute update outside of priming constexpr Tracing::MetricKey kMetricUnexpectedCQualityUpdate = "dwnpm_bad_c_attr_update"; +// Setup from darwin MTRDevice for initial subscription to a device +constexpr Tracing::MetricKey kMetricMTRDeviceInitialSubscriptionSetup = "dwnpm_dev_initial_subscription_setup"; + } // namespace DarwinFramework } // namespace Tracing } // namespace chip diff --git a/src/messaging/ReliableMessageMgr.cpp b/src/messaging/ReliableMessageMgr.cpp index c9178a03d1822d..b7bd96f12e1e00 100644 --- a/src/messaging/ReliableMessageMgr.cpp +++ b/src/messaging/ReliableMessageMgr.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #if CHIP_CONFIG_ENABLE_ICD_SERVER #include // nogncheck @@ -170,6 +171,7 @@ void ReliableMessageMgr::ExecuteActions() "Retransmitting MessageCounter:" ChipLogFormatMessageCounter " on exchange " ChipLogFormatExchange " Send Cnt %d", messageCounter, ChipLogValueExchange(&entry->ec.Get()), entry->sendCount); + MATTER_LOG_METRIC(Tracing::kMetricDeviceRMPRetryCount, entry->sendCount); CalculateNextRetransTime(*entry); SendFromRetransTable(entry); diff --git a/src/protocols/secure_channel/CASESession.cpp b/src/protocols/secure_channel/CASESession.cpp index b0642a966890fd..b7aa87e9d5e278 100644 --- a/src/protocols/secure_channel/CASESession.cpp +++ b/src/protocols/secure_channel/CASESession.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include namespace { @@ -101,6 +102,7 @@ using namespace Credentials; using namespace Messaging; using namespace Encoding; using namespace Protocols::SecureChannel; +using namespace Tracing; constexpr uint8_t kKDFSR2Info[] = { 0x53, 0x69, 0x67, 0x6d, 0x61, 0x32 }; constexpr uint8_t kKDFSR3Info[] = { 0x53, 0x69, 0x67, 0x6d, 0x61, 0x33 }; @@ -521,14 +523,15 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric CHIP_ERROR err = CHIP_NO_ERROR; // Return early on error here, as we have not initialized any state yet - ReturnErrorCodeIf(exchangeCtxt == nullptr, CHIP_ERROR_INVALID_ARGUMENT); - ReturnErrorCodeIf(fabricTable == nullptr, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorCodeWithMetricIf(kMetricDeviceCASESession, exchangeCtxt == nullptr, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorCodeWithMetricIf(kMetricDeviceCASESession, fabricTable == nullptr, CHIP_ERROR_INVALID_ARGUMENT); // Use FabricTable directly to avoid situation of dangling index from stale FabricInfo // until we factor-out any FabricInfo direct usage. - ReturnErrorCodeIf(peerScopedNodeId.GetFabricIndex() == kUndefinedFabricIndex, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorCodeWithMetricIf(kMetricDeviceCASESession, peerScopedNodeId.GetFabricIndex() == kUndefinedFabricIndex, + CHIP_ERROR_INVALID_ARGUMENT); const auto * fabricInfo = fabricTable->FindFabricWithIndex(peerScopedNodeId.GetFabricIndex()); - ReturnErrorCodeIf(fabricInfo == nullptr, CHIP_ERROR_INVALID_ARGUMENT); + ReturnErrorCodeWithMetricIf(kMetricDeviceCASESession, fabricInfo == nullptr, CHIP_ERROR_INVALID_ARGUMENT); err = Init(sessionManager, policy, delegate, peerScopedNodeId); @@ -542,9 +545,11 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric // From here onwards, let's go to exit on error, as some state might have already // been initialized - SuccessOrExit(err); + SuccessOrExitWithMetric(kMetricDeviceCASESession, err); - SuccessOrExit(err = fabricTable->AddFabricDelegate(this)); + SuccessOrExitWithMetric(kMetricDeviceCASESession, err = fabricTable->AddFabricDelegate(this)); + + MATTER_LOG_METRIC_BEGIN(kMetricDeviceCASESession); // Set the PeerAddress in the secure session up front to indicate the // Transport Type of the session that is being set up. @@ -571,6 +576,7 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric } else { + MATTER_LOG_METRIC_BEGIN(kMetricDeviceCASESessionSigma1); err = SendSigma1(); SuccessOrExit(err); } @@ -578,6 +584,8 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric exit: if (err != CHIP_NO_ERROR) { + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma1, err); + MATTER_LOG_METRIC_END(kMetricDeviceCASESession, err); Clear(); } return err; @@ -601,6 +609,7 @@ void CASESession::OnResponseTimeout(ExchangeContext * ec) void CASESession::AbortPendingEstablish(CHIP_ERROR err) { + MATTER_LOG_METRIC_END(kMetricDeviceCASESession, err); MATTER_TRACE_SCOPE("AbortPendingEstablish", "CASESession"); // This needs to come before Clear() which will reset mState. SessionEstablishmentStage state = MapCASEStateToSessionEstablishmentStage(mState); @@ -851,7 +860,17 @@ CHIP_ERROR CASESession::SendSigma1() ReturnErrorOnFailure(mExchangeCtxt.Value()->SendMessage(Protocols::SecureChannel::MsgType::CASE_Sigma1, std::move(msg_R1), SendFlags(SendMessageFlags::kExpectResponse))); - mState = resuming ? State::kSentSigma1Resume : State::kSentSigma1; + if (resuming) + { + mState = State::kSentSigma1Resume; + + // Flags that Resume is being attempted + MATTER_LOG_METRIC(kMetricDeviceCASESessionSigma1Resume); + } + else + { + mState = State::kSentSigma1; + } ChipLogProgress(SecureChannel, "Sent Sigma1 msg"); @@ -984,7 +1003,13 @@ CHIP_ERROR CASESession::HandleSigma1(System::PacketBufferHandle && msg) std::copy(resumptionId.begin(), resumptionId.end(), mResumeResumptionId.begin()); // Send Sigma2Resume message to the initiator - SuccessOrExit(err = SendSigma2Resume()); + MATTER_LOG_METRIC_BEGIN(kMetricDeviceCASESessionSigma2Resume); + err = SendSigma2Resume(); + if (CHIP_NO_ERROR != err) + { + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma2Resume, err); + } + SuccessOrExit(err); mDelegate->OnSessionEstablishmentStarted(); @@ -1013,7 +1038,13 @@ CHIP_ERROR CASESession::HandleSigma1(System::PacketBufferHandle && msg) // mRemotePubKey.Length() == initiatorPubKey.size() == kP256_PublicKey_Length. memcpy(mRemotePubKey.Bytes(), initiatorPubKey.data(), mRemotePubKey.Length()); - SuccessOrExit(err = SendSigma2()); + MATTER_LOG_METRIC_BEGIN(kMetricDeviceCASESessionSigma2); + err = SendSigma2(); + if (CHIP_NO_ERROR != err) + { + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma2, err); + } + SuccessOrExit(err); mDelegate->OnSessionEstablishmentStarted(); @@ -1236,6 +1267,7 @@ CHIP_ERROR CASESession::HandleSigma2Resume(System::PacketBufferHandle && msg) ChipLogDetail(SecureChannel, "Received Sigma2Resume msg"); MATTER_TRACE_COUNTER("Sigma2Resume"); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma1, err); uint8_t sigma2ResumeMIC[CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES]; @@ -1278,6 +1310,7 @@ CHIP_ERROR CASESession::HandleSigma2Resume(System::PacketBufferHandle && msg) ChipLogError(SecureChannel, "Unable to save session resumption state: %" CHIP_ERROR_FORMAT, err2.Format()); } + MATTER_LOG_METRIC(kMetricDeviceCASESessionSigmaFinished); SendStatusReport(mExchangeCtxt, kProtocolCodeSuccess); mState = State::kFinishedViaResume; @@ -1294,10 +1327,17 @@ CHIP_ERROR CASESession::HandleSigma2Resume(System::PacketBufferHandle && msg) CHIP_ERROR CASESession::HandleSigma2_and_SendSigma3(System::PacketBufferHandle && msg) { MATTER_TRACE_SCOPE("HandleSigma2_and_SendSigma3", "CASESession"); - ReturnErrorOnFailure(HandleSigma2(std::move(msg))); - ReturnErrorOnFailure(SendSigma3a()); + CHIP_ERROR err = HandleSigma2(std::move(msg)); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma1, err); + ReturnErrorOnFailure(err); - return CHIP_NO_ERROR; + MATTER_LOG_METRIC_BEGIN(kMetricDeviceCASESessionSigma3); + err = SendSigma3a(); + if (CHIP_NO_ERROR != err) + { + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma3, err); + } + return err; } CHIP_ERROR CASESession::HandleSigma2(System::PacketBufferHandle && msg) @@ -1708,6 +1748,7 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg) ChipLogProgress(SecureChannel, "Received Sigma3 msg"); MATTER_TRACE_COUNTER("Sigma3"); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma2, err); auto helper = WorkHelper::Create(*this, &HandleSigma3b, &CASESession::HandleSigma3c); VerifyOrExit(helper, err = CHIP_ERROR_NO_MEMORY); @@ -1888,6 +1929,7 @@ CHIP_ERROR CASESession::HandleSigma3c(HandleSigma3Data & data, CHIP_ERROR status } } + MATTER_LOG_METRIC(kMetricDeviceCASESessionSigmaFinished); SendStatusReport(mExchangeCtxt, kProtocolCodeSuccess); mState = State::kFinished; @@ -2288,6 +2330,7 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea case MsgType::StatusReport: err = HandleStatusReport(std::move(msg), /* successExpected*/ false); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma1, err); break; default: @@ -2308,6 +2351,7 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea case MsgType::StatusReport: err = HandleStatusReport(std::move(msg), /* successExpected*/ false); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma1, err); break; default: @@ -2324,6 +2368,7 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea case MsgType::StatusReport: err = HandleStatusReport(std::move(msg), /* successExpected*/ false); + MATTER_LOG_METRIC_END(kMetricDeviceCASESessionSigma2, err); break; default: @@ -2335,7 +2380,11 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea case State::kSentSigma2Resume: if (msgType == Protocols::SecureChannel::MsgType::StatusReport) { - err = HandleStatusReport(std::move(msg), /* successExpected*/ true); + // Need to capture before invoking status report since 'this' might be deallocated on successful completion of sigma3 + MetricKey key = (mState == State::kSentSigma3) ? kMetricDeviceCASESessionSigma3 : kMetricDeviceCASESessionSigma2Resume; + err = HandleStatusReport(std::move(msg), /* successExpected*/ true); + MATTER_LOG_METRIC_END(key, err); + IgnoreUnusedVariable(key); } break; default: diff --git a/src/tracing/metric_keys.h b/src/tracing/metric_keys.h index 001e9c8036bd27..447d6c03dddc9c 100644 --- a/src/tracing/metric_keys.h +++ b/src/tracing/metric_keys.h @@ -54,5 +54,29 @@ constexpr MetricKey kMetricDeviceOperationalDiscoveryAttemptCount = "core_dev_op // CASE Session constexpr MetricKey kMetricDeviceCASESession = "core_dev_case_session"; +// CASE Session Sigma1 +constexpr MetricKey kMetricDeviceCASESessionSigma1 = "core_dev_case_session_sigma1"; + +// CASE Session Sigma1Resume +constexpr MetricKey kMetricDeviceCASESessionSigma1Resume = "core_dev_case_session_sigma1_resume"; + +// CASE Session Sigma2 +constexpr MetricKey kMetricDeviceCASESessionSigma2 = "core_dev_case_session_sigma2"; + +// CASE Session Sigma3 +constexpr MetricKey kMetricDeviceCASESessionSigma3 = "core_dev_case_session_sigma3"; + +// CASE Session Sigma2 Resume +constexpr MetricKey kMetricDeviceCASESessionSigma2Resume = "core_dev_case_session_sigma2_resume"; + +// CASE Session SigmaFinished +constexpr MetricKey kMetricDeviceCASESessionSigmaFinished = "core_dev_case_session_sigma_finished"; + +// MRP Retry Counter +constexpr MetricKey kMetricDeviceRMPRetryCount = "core_dev_rmp_retry_count"; + +// Subscription setup +constexpr MetricKey kMetricDeviceSubscriptionSetup = "core_dev_subscription_setup"; + } // namespace Tracing } // namespace chip From c07bbd107bd45c394c102f0c5e305606434de59c Mon Sep 17 00:00:00 2001 From: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> Date: Wed, 19 Jun 2024 06:19:17 -0400 Subject: [PATCH 13/28] Update silabs Docker image for new SDKs release (#34002) --- .../docker/images/base/chip-build/version | 2 +- .../stage-2/chip-build-efr32/Dockerfile | 25 ++++++++++--------- .../vscode/chip-build-vscode/Dockerfile | 8 +++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/integrations/docker/images/base/chip-build/version b/integrations/docker/images/base/chip-build/version index adf6c4a4df5243..d77f756e1b8c70 100644 --- a/integrations/docker/images/base/chip-build/version +++ b/integrations/docker/images/base/chip-build/version @@ -1 +1 @@ -55 : Update to Ubuntu 24.04 as the base build image +56 : Update Silabs docker SiSDK 2024.06.0 WiseConnect 3.3.0 diff --git a/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile b/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile index c121c582bd3cf9..7927c5ef1ed4fc 100644 --- a/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile +++ b/integrations/docker/images/stage-2/chip-build-efr32/Dockerfile @@ -13,15 +13,14 @@ RUN set -x \ && : # last line -# Clone Gecko SDK 4.4.2 (e359ba4) -RUN wget https://github.com/SiliconLabs/gecko_sdk/releases/download/v4.4.2/gecko-sdk.zip -O /tmp/gecko_sdk.zip \ - && unzip /tmp/gecko_sdk.zip -d /tmp/gecko_sdk \ - && rm -rf /tmp/gecko_sdk.zip \ +# Download Simplicity SDK v2024.6.0 (a1a37fa) +RUN wget https://github.com/SiliconLabs/simplicity_sdk/releases/download/v2024.6.0/sisdk-sdk.zip -O /tmp/simplicity_sdk.zip \ + && unzip /tmp/simplicity_sdk.zip -d /tmp/simplicity_sdk \ + && rm -rf /tmp/simplicity_sdk.zip \ # Deleting files that are not needed to save space - && rm -rf /tmp/gecko_sdk/protocol/flex /tmp/gecko_sdk/protocol/z-wave /tmp/gecko_sdk/protocol/zigbee /tmp/gecko_sdk/protocol/wisun \ - && find /tmp/gecko_sdk/protocol/bluetooth /tmp/gecko_sdk/platform -name "*.a" -type f -delete \ - && find /tmp/gecko_sdk/protocol/openthread -name "*efr32mg21*" -delete \ - && find /tmp/gecko_sdk/protocol/openthread -name "*efr32mg13*" -delete \ + && rm -rf /tmp/simplicity_sdk/protocol/flex /tmp/simplicity_sdk/protocol/z-wave /tmp/simplicity_sdk/protocol/zigbee /tmp/simplicity_sdk/protocol/wisun \ + && find /tmp/simplicity_sdk/protocol/bluetooth /tmp/simplicity_sdk/platform -name "*.a" -type f -delete \ + && find /tmp/simplicity_sdk/protocol/openthread -name "*efr32mg21*" -delete \ && : # last line # Clone WiSeConnect Wi-Fi and Bluetooth Software 2.8.2 (4fa5c5f) @@ -30,8 +29,8 @@ RUN git clone --depth=1 --single-branch --branch=2.8.2 https://github.com/Silico rm -rf .git \ && : # last line -# Clone WiSeConnect SDK 3.1.3-matter-hotfix.4 (aa514d4) -RUN git clone --depth=1 --single-branch --branch=v3.1.3-matter-hotfix.4 https://github.com/SiliconLabs/wiseconnect.git /tmp/wifi_sdk && \ +# Clone WiSeConnect SDK v3.3.0 (e97a0ed) +RUN git clone --depth=1 --single-branch --branch=v3.3.0 https://github.com/SiliconLabs/wiseconnect.git /tmp/wifi_sdk && \ cd /tmp/wifi_sdk && \ rm -rf .git \ && : # last line @@ -63,12 +62,14 @@ RUN set -x \ && rm /tmp/requirements.txt \ && : # last line -ENV GSDK_ROOT=/opt/silabs/gecko_sdk/ +# Keep GSDK_ROOT name until rename transition to SISDK is completed +ENV GSDK_ROOT=/opt/silabs/simplicity_sdk/ +ENV SISDK_ROOT=/opt/silabs/simplicity_sdk/ ENV WISECONNECT_SDK_ROOT=/opt/silabs/wiseconnect-wifi-bt-sdk/ ENV WIFI_SDK_ROOT=/opt/silabs/wifi_sdk/ ENV PATH="${PATH}:/opt/silabs/slc_cli/" -COPY --from=build /tmp/gecko_sdk /opt/silabs/gecko_sdk +COPY --from=build /tmp/simplicity_sdk /opt/silabs/simplicity_sdk COPY --from=build /tmp/wiseconnect-wifi-bt-sdk/ /opt/silabs/wiseconnect-wifi-bt-sdk/ COPY --from=build /tmp/wifi_sdk /opt/silabs/wifi_sdk COPY --from=build /tmp/slc_cli /opt/silabs/slc_cli diff --git a/integrations/docker/images/vscode/chip-build-vscode/Dockerfile b/integrations/docker/images/vscode/chip-build-vscode/Dockerfile index c3a9f37baa264a..8661bab84f6273 100644 --- a/integrations/docker/images/vscode/chip-build-vscode/Dockerfile +++ b/integrations/docker/images/vscode/chip-build-vscode/Dockerfile @@ -60,7 +60,7 @@ COPY --from=bouffalolab /opt/bouffalolab_sdk /opt/bouffalolab_sdk COPY --from=asr /opt/asr /opt/asr -COPY --from=efr32 /opt/silabs/gecko_sdk /opt/silabs/gecko_sdk +COPY --from=efr32 /opt/silabs/simplicity_sdk /opt/silabs/simplicity_sdk COPY --from=efr32 /opt/silabs/wiseconnect-wifi-bt-sdk /opt/silabs/wiseconnect-wifi-bt-sdk COPY --from=efr32 /opt/silabs/wifi_sdk /opt/silabs/wifi_sdk @@ -113,8 +113,10 @@ ENV AMEBA_PATH=/opt/ameba/ambd_sdk_with_chip_non_NDA ENV ANDROID_HOME=/opt/android/sdk ENV ANDROID_NDK_HOME=/opt/android/android-ndk-r23c ENV CY_TOOLS_PATHS="/opt/ModusToolbox/tools_2.4" -ENV SILABS_BOARD=BRD4161A -ENV GSDK_ROOT=/opt/silabs/gecko_sdk/ +ENV SILABS_BOARD=BRD4186C +# Keep GSDK_ROOT name until rename transition to SISDK is completed +ENV GSDK_ROOT=/opt/silabs/simplicity_sdk/ +ENV SISDK_ROOT=/opt/silabs/simplicity_sdk/ ENV WISECONNECT_SDK_ROOT=/opt/silabs/wiseconnect-wifi-bt-sdk/ ENV WIFI_SDK_ROOT=/opt/silabs/wifi_sdk ENV IDF_PATH=/opt/espressif/esp-idf/ From f624057c009c795fc72fa7802236013716a4d489 Mon Sep 17 00:00:00 2001 From: Arkadiusz Bokowy Date: Wed, 19 Jun 2024 13:53:52 +0200 Subject: [PATCH 14/28] [Linux] Trim down auto-generated BlueZ D-Bus API stub (#33920) --- src/platform/Linux/dbus/bluez/DbusBluez.xml | 115 ++------------------ 1 file changed, 10 insertions(+), 105 deletions(-) diff --git a/src/platform/Linux/dbus/bluez/DbusBluez.xml b/src/platform/Linux/dbus/bluez/DbusBluez.xml index febeb757fa2110..1e193ceafb8586 100644 --- a/src/platform/Linux/dbus/bluez/DbusBluez.xml +++ b/src/platform/Linux/dbus/bluez/DbusBluez.xml @@ -14,88 +14,43 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This file is constructed using the below method. -# 1. running bluetoothd -# 2. running two Bluetooth adapter with LE capability and create ble connection with Gatt servie and Gatt Char. -# For the purposes of XML generation we use btvirt emulator with the LE only capability. -# Assume the LE chip is on hci 0 -# we get the bluez XML via: -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez -x -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez/hci0 -x -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez/hci0/dev_00_AA_01_01_00_24 -x -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez/hci0/dev_00_AA_01_01_00_24/service0006 -x -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez/hci0/dev_00_AA_01_01_00_24/service0006/char0007 -x -# sudo gdbus introspect -s -d org.bluez -r -o /org/bluez/hci0/dev_00_AA_01_01_00_24/service0006/char0007/desc0009 -x -# sudo gdbus introspect -s -d org.bluez -r -o / -x +# This file is constructed based on the BlueZ D-Bus API documentation +# available at: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc +# +# It does not contain all exported interfaces, but only those that are +# relevant for the Matter GATT service and advertisement management. Also, +# some properties and methods not used by Matter are omitted in order to +# decrease the size of Matter SDK library. +# --> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -240,56 +195,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From eb7a0ad5b64696b979336b981491cc62446437b2 Mon Sep 17 00:00:00 2001 From: Jakub Latusek Date: Wed, 19 Jun 2024 16:09:58 +0200 Subject: [PATCH 15/28] Remove bugprone-casting-through-void check from .clang-tidy (#34009) * Remove bugprone-casting-through-void check from .clang-tidy * Add issue number --- .clang-tidy | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-tidy b/.clang-tidy index fcb62d5d505d32..4073b9ae387392 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -12,6 +12,7 @@ Checks: > readability-redundant-string-init, -bugprone-assignment-in-if-condition, -bugprone-branch-clone, + -bugprone-casting-through-void, #TODO remove this after fixing issues in source code, issue 34008 -bugprone-copy-constructor-init, -bugprone-easily-swappable-parameters, -bugprone-forward-declaration-namespace, From c79b068931c7bdead22ec81785d39809553f6418 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Wed, 19 Jun 2024 16:24:16 +0200 Subject: [PATCH 16/28] [Python] Fix DeviceProxyWrapper __del__ (#34011) During tests the following unrelated Exception was raised: ``` Exception ignored in: Traceback (most recent call last): File "/__w/connectedhomeip/connectedhomeip/out/venv/lib/python3.9/site-packages/chip/ChipDeviceCtrl.py", line 306, in __del__ if (self._proxyType == self.DeviceProxyType.OPERATIONAL and self.self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): AttributeError: 'DeviceProxyWrapper' object has no attribute 'self' Exception ignored in: Traceback (most recent call last): File "/__w/connectedhomeip/connectedhomeip/out/venv/lib/python3.9/site-packages/chip/ChipDeviceCtrl.py", line 306, in __del__ if (self._proxyType == self.DeviceProxyType.OPERATIONAL and self.self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): AttributeError: 'DeviceProxyWrapper' object has no attribute 'self' ``` This fixes the issue by removing the extra `self` in the condition. --- src/controller/python/chip/ChipDeviceCtrl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 6e03e7a77f2d19..890e7618882e49 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -268,7 +268,7 @@ def __init__(self, deviceProxy: ctypes.c_void_p, proxyType, dmLib=None): def __del__(self): # Commissionee device proxies are owned by the DeviceCommissioner. See #33031 - if (self._proxyType == self.DeviceProxyType.OPERATIONAL and self.self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): + if (self._proxyType == self.DeviceProxyType.OPERATIONAL and self._dmLib is not None and hasattr(builtins, 'chipStack') and builtins.chipStack is not None): # This destructor is called from any threading context, including on the Matter threading context. # So, we cannot call chipStack.Call or chipStack.CallAsyncWithCompleteCallback which waits for the posted work to # actually be executed. Instead, we just post/schedule the work and move on. From c269f6236c7233b963380d20f792112aa22ceb4d Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Wed, 19 Jun 2024 10:25:18 -0400 Subject: [PATCH 17/28] Fix typo in MTRDevice comment. (#34006) --- src/darwin/Framework/CHIP/MTRDevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice.h b/src/darwin/Framework/CHIP/MTRDevice.h index c605a8b70753a1..a8098a7174572e 100644 --- a/src/darwin/Framework/CHIP/MTRDevice.h +++ b/src/darwin/Framework/CHIP/MTRDevice.h @@ -130,7 +130,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * * interestedPathsForAttributes may contain either MTRClusterPath or MTRAttributePath to specify interested clusters and attributes, or NSNumber for endpoints. * - * interestedPathsForAttributes may contain either MTRClusterPath or MTREventPath to specify interested clusters and events, or NSNumber for endpoints. + * interestedPathsForEvents may contain either MTRClusterPath or MTREventPath to specify interested clusters and events, or NSNumber for endpoints. * * For both interested paths arguments, if nil is specified, then no filter will be applied. * From 16a79eb844938e131bce8b4746adafc33a09e2a5 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Wed, 19 Jun 2024 16:26:32 +0200 Subject: [PATCH 18/28] [Python] Reset chip error in test commissioner (#34001) * [Python] Reset chip error in test commissioner Make sure to reset the chip error in test commissioner on reset. This avoid spurious errors. The Python side reads the error as soon as mTestCommissionerUsed is set, which happens unconditionally. Hence clearing the error is necessary. * [Python] Remove unexpected exception in TC_CGEN_2_4.py With the test commissioner properly resetting the error code the spurious exception is no longer thrown. Remove the exception handling from the test. --- src/controller/python/OpCredsBinding.cpp | 1 + src/python_testing/TC_CGEN_2_4.py | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/controller/python/OpCredsBinding.cpp b/src/controller/python/OpCredsBinding.cpp index 427ee9be46ba3c..f5815922cc14eb 100644 --- a/src/controller/python/OpCredsBinding.cpp +++ b/src/controller/python/OpCredsBinding.cpp @@ -259,6 +259,7 @@ class TestCommissioner : public chip::Controller::AutoCommissioner mPrematureCompleteAfter = chip::Controller::CommissioningStage::kError; mReadCommissioningInfo = chip::Controller::ReadCommissioningInfo(); mNeedsDST = false; + mCompletionError = CHIP_NO_ERROR; } bool GetTestCommissionerUsed() { return mTestCommissionerUsed; } void OnCommissioningSuccess(chip::PeerId peerId) { mReceivedCommissioningSuccess = true; } diff --git a/src/python_testing/TC_CGEN_2_4.py b/src/python_testing/TC_CGEN_2_4.py index fcfe2aaf044d3d..e9ab9d85c28e73 100644 --- a/src/python_testing/TC_CGEN_2_4.py +++ b/src/python_testing/TC_CGEN_2_4.py @@ -104,12 +104,9 @@ async def test_TC_CGEN_2_4(self): logging.info('Step 16 - TH2 fully commissions the DUT') self.th2.ResetTestCommissioner() - ctx = asserts.assert_raises(ChipStackError) - with ctx: - self.th2.CommissionOnNetwork( - nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, - filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) - asserts.assert_true(ctx.exception.chip_error.sdk_code == 0x02, 'Unexpected error code returned from CommissioningComplete') + self.th2.CommissionOnNetwork( + nodeId=self.dut_node_id, setupPinCode=params.setupPinCode, + filterType=ChipDeviceCtrl.DiscoveryFilterType.LONG_DISCRIMINATOR, filter=self.discriminator) logging.info('Commissioning complete done.') logging.info('Step 17 - TH1 sends an arm failsafe') From 306f22e6d5f11389f7b1202ddef42086975cd2b4 Mon Sep 17 00:00:00 2001 From: joonhaengHeo <85541460+joonhaengHeo@users.noreply.github.com> Date: Wed, 19 Jun 2024 23:42:18 +0900 Subject: [PATCH 19/28] [Android] Support ICD LIT Device using commissionDevice (#33975) * Support ICD LIT Device using commissionDevice * Restyled by google-java-format * Restyled by clang-format * Update commission method using Builder * Restyled by whitespace * Restyled by google-java-format * Restyled by gn * Remove warning message in java_controller --------- Co-authored-by: Restyled.io --- .../commands/pairing/PairCodeCommand.kt | 6 +- .../commands/pairing/PairCodeThreadCommand.kt | 6 +- .../commands/pairing/PairCodeWifiCommand.kt | 6 +- src/controller/java/BUILD.gn | 1 + .../java/CHIPDeviceController-JNI.cpp | 7 +- .../ChipDeviceController.java | 147 +++++++++++++++++- .../CommissionParameters.java | 71 +++++++++ 7 files changed, 229 insertions(+), 15 deletions(-) create mode 100644 src/controller/java/src/chip/devicecontroller/CommissionParameters.java diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt index 8d9929991e86e7..6e3d73bd79b260 100644 --- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt +++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt @@ -18,19 +18,21 @@ package com.matter.controller.commands.pairing import chip.devicecontroller.ChipDeviceController +import chip.devicecontroller.CommissionParameters import com.matter.controller.commands.common.CredentialsIssuer class PairCodeCommand(val controller: ChipDeviceController, credsIssue: CredentialsIssuer?) : PairingCommand(controller, "code", credsIssue, PairingModeType.CODE, PairingNetworkType.NONE) { override fun runCommand() { + val commissionParams = + CommissionParameters.Builder().setNetworkCredentials(getWifiNetworkCredentials()).build() currentCommissioner() .pairDeviceWithCode( getNodeId(), getOnboardingPayload(), getDiscoverOnce(), getUseOnlyOnNetworkDiscovery(), - null, - getWifiNetworkCredentials(), + commissionParams ) currentCommissioner().setCompletionListener(this) waitCompleteMs(getTimeoutMillis()) diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt index ff8d3e76dcb980..e722b930e4f251 100644 --- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt +++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt @@ -18,6 +18,7 @@ package com.matter.controller.commands.pairing import chip.devicecontroller.ChipDeviceController +import chip.devicecontroller.CommissionParameters import com.matter.controller.commands.common.CredentialsIssuer class PairCodeThreadCommand(controller: ChipDeviceController, credsIssue: CredentialsIssuer?) : @@ -29,14 +30,15 @@ class PairCodeThreadCommand(controller: ChipDeviceController, credsIssue: Creden PairingNetworkType.THREAD ) { override fun runCommand() { + val commissionParams = + CommissionParameters.Builder().setNetworkCredentials(getThreadNetworkCredentials()).build() currentCommissioner() .pairDeviceWithCode( getNodeId(), getOnboardingPayload(), getDiscoverOnce(), getUseOnlyOnNetworkDiscovery(), - null, - getThreadNetworkCredentials(), + commissionParams ) currentCommissioner().setCompletionListener(this) waitCompleteMs(getTimeoutMillis()) diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt index 17a1d418f5ce28..8154355bd6d075 100644 --- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt +++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt @@ -18,6 +18,7 @@ package com.matter.controller.commands.pairing import chip.devicecontroller.ChipDeviceController +import chip.devicecontroller.CommissionParameters import com.matter.controller.commands.common.CredentialsIssuer class PairCodeWifiCommand(controller: ChipDeviceController, credsIssue: CredentialsIssuer?) : @@ -29,14 +30,15 @@ class PairCodeWifiCommand(controller: ChipDeviceController, credsIssue: Credenti PairingNetworkType.WIFI ) { override fun runCommand() { + val commissionParams = + CommissionParameters.Builder().setNetworkCredentials(getWifiNetworkCredentials()).build() currentCommissioner() .pairDeviceWithCode( getNodeId(), getOnboardingPayload(), getDiscoverOnce(), getUseOnlyOnNetworkDiscovery(), - null, - getWifiNetworkCredentials(), + commissionParams ) currentCommissioner().setCompletionListener(this) waitCompleteMs(getTimeoutMillis()) diff --git a/src/controller/java/BUILD.gn b/src/controller/java/BUILD.gn index ec522e367c60f4..eda7ea7497cef5 100644 --- a/src/controller/java/BUILD.gn +++ b/src/controller/java/BUILD.gn @@ -616,6 +616,7 @@ android_library("java") { "src/chip/devicecontroller/CSRInfo.java", "src/chip/devicecontroller/ChipCommandType.java", "src/chip/devicecontroller/ChipDeviceController.java", + "src/chip/devicecontroller/CommissionParameters.java", "src/chip/devicecontroller/CommissioningWindowStatus.java", "src/chip/devicecontroller/ConnectionFailureException.java", "src/chip/devicecontroller/ControllerParams.java", diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index a6c93c55885070..93ab5ccd0a1012 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -610,7 +610,8 @@ JNI_METHOD(void, setICDCheckInDelegate)(JNIEnv * env, jobject self, jlong handle } JNI_METHOD(void, commissionDevice) -(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jbyteArray csrNonce, jobject networkCredentials) +(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jbyteArray csrNonce, jobject networkCredentials, + jobject icdRegistrationInfo) { chip::DeviceLayer::StackLock lock; CHIP_ERROR err = CHIP_NO_ERROR; @@ -624,6 +625,10 @@ JNI_METHOD(void, commissionDevice) err = wrapper->ApplyNetworkCredentials(commissioningParams, networkCredentials); VerifyOrExit(err == CHIP_NO_ERROR, err = CHIP_ERROR_INVALID_ARGUMENT); } + + commissioningParams.SetICDRegistrationStrategy(ICDRegistrationStrategy::kBeforeComplete); + wrapper->ApplyICDRegistrationInfo(commissioningParams, icdRegistrationInfo); + if (wrapper->GetDeviceAttestationDelegateBridge() != nullptr) { commissioningParams.SetDeviceAttestationDelegate(wrapper->GetDeviceAttestationDelegateBridge()); diff --git a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java index 4cf4c9ee0f83cc..37e9e7093a1afc 100644 --- a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java +++ b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Optional; import java.util.TimeZone; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** Controller to interact with the CHIP device. */ @@ -156,6 +157,8 @@ public void setICDCheckInDelegate(ICDCheckInDelegate delegate) { setICDCheckInDelegate(deviceControllerPtr, new ICDCheckInDelegateWrapper(delegate)); } + /* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */ + @Deprecated public void pairDevice( BluetoothGatt bleServer, int connId, @@ -165,6 +168,8 @@ public void pairDevice( pairDevice(bleServer, connId, deviceId, setupPincode, null, networkCredentials, null); } + /* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */ + @Deprecated public void pairDevice( BluetoothGatt bleServer, int connId, @@ -176,6 +181,8 @@ public void pairDevice( bleServer, connId, deviceId, setupPincode, null, networkCredentials, registrationInfo); } + /* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */ + @Deprecated public void pairDevice( BluetoothGatt bleServer, int connId, @@ -199,8 +206,10 @@ public void pairDevice( * @param icdRegistrationInfo the informations for ICD registration. For detailed information * {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link * CompletionListener.onICDRegistrationInfoRequired} is called to request the - * ICDRegistrationInfo value. + * ICDRegistrationInfo value. This method was deprecated. Please use {@link + * ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */ + @Deprecated public void pairDevice( BluetoothGatt bleServer, int connId, @@ -209,6 +218,31 @@ public void pairDevice( @Nullable byte[] csrNonce, NetworkCredentials networkCredentials, @Nullable ICDRegistrationInfo icdRegistrationInfo) { + CommissionParameters params = + new CommissionParameters.Builder() + .setCsrNonce(csrNonce) + .setNetworkCredentials(networkCredentials) + .setICDRegistrationInfo(icdRegistrationInfo) + .build(); + pairDevice(bleServer, connId, deviceId, setupPincode, params); + } + + /** + * Pair a device connected through BLE. + * + * @param bleServer the BluetoothGatt representing the BLE connection to the device + * @param connId the BluetoothGatt Id representing the BLE connection to the device + * @param deviceId the node ID to assign to the device + * @param setupPincode the pincode for the device + * @param params Parameters representing commissioning arguments. see detailed in {@link + * CommissionParameters} + */ + public void pairDevice( + BluetoothGatt bleServer, + int connId, + long deviceId, + long setupPincode, + @Nonnull CommissionParameters params) { if (connectionId == 0) { connectionId = connId; @@ -225,15 +259,16 @@ public void pairDevice( deviceId, connectionId, setupPincode, - csrNonce, - networkCredentials, - icdRegistrationInfo); + params.getCsrNonce(), + params.getNetworkCredentials(), + params.getICDRegistrationInfo()); } else { Log.e(TAG, "Bluetooth connection already in use."); completionListener.onError(new Exception("Bluetooth connection already in use.")); } } + /* This method was deprecated. Please use {@link ChipDeviceController.pairDeviceWithAddress(long, String, int, int, long, CommissionParameters)}. */ public void pairDeviceWithAddress( long deviceId, String address, @@ -258,8 +293,11 @@ public void pairDeviceWithAddress( * @param icdRegistrationInfo the informations for ICD registration. For detailed information * {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link * CompletionListener.onICDRegistrationInfoRequired} is called to request the - * ICDRegistrationInfo value. + * ICDRegistrationInfo value. This method was deprecated. Please use {@link + * ChipDeviceController.pairDeviceWithAddress(long, String, int, int, long, + * CommissionParameters)}. */ + @Deprecated public void pairDeviceWithAddress( long deviceId, String address, @@ -279,6 +317,42 @@ public void pairDeviceWithAddress( icdRegistrationInfo); } + /** + * Pair a device connected using IP Address. + * + * @param deviceId the node ID to assign to the device + * @param address IP Address of the connecting device + * @param port the port of the connecting device + * @param discriminator the discriminator for connecting device + * @param pinCode the pincode for connecting device + * @param params Parameters representing commissioning arguments. see detailed in {@link + * CommissionParameters} + */ + public void pairDeviceWithAddress( + long deviceId, + String address, + int port, + int discriminator, + long pinCode, + @Nonnull CommissionParameters params) { + if (params.getNetworkCredentials() != null) { + Log.e(TAG, "Invalid parameter : NetworkCredentials"); + completionListener.onError(new Exception("Invalid parameter : NetworkCredentials")); + return; + } + pairDeviceWithAddress( + deviceControllerPtr, + deviceId, + address, + port, + discriminator, + pinCode, + params.getCsrNonce(), + params.getICDRegistrationInfo()); + } + + /* This method was deprecated. Please use {@link ChipDeviceController.pairDeviceWithCode(long, String, boolean, boolean, CommissionParameters)}. */ + @Deprecated public void pairDeviceWithCode( long deviceId, String setupCode, @@ -312,7 +386,11 @@ public void pairDeviceWithCode( * {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link * CompletionListener.onICDRegistrationInfoRequired} is called to request the * ICDRegistrationInfo value. + *

This method was deprecated. Please use {@link + * ChipDeviceController.pairDeviceWithCode(long, String, boolean, boolean, + * CommissionParameters)}. */ + @Deprecated public void pairDeviceWithCode( long deviceId, String setupCode, @@ -332,6 +410,34 @@ public void pairDeviceWithCode( icdRegistrationInfo); } + /** + * Pair a device connected using the scanned QR code or manual entry code. + * + * @param deviceId the node ID to assign to the device + * @param setupCode the scanned QR code or manual entry code + * @param discoverOnce the flag to enable/disable PASE auto retry mechanism + * @param useOnlyOnNetworkDiscovery the flag to indicate the commissionable device is available on + * the network + * @param params Parameters representing commissioning arguments. see detailed in {@link + * CommissionParameters} + */ + public void pairDeviceWithCode( + long deviceId, + String setupCode, + boolean discoverOnce, + boolean useOnlyOnNetworkDiscovery, + @Nonnull CommissionParameters params) { + pairDeviceWithCode( + deviceControllerPtr, + deviceId, + setupCode, + discoverOnce, + useOnlyOnNetworkDiscovery, + params.getCsrNonce(), + params.getNetworkCredentials(), + params.getICDRegistrationInfo()); + } + public void establishPaseConnection(long deviceId, int connId, long setupPincode) { if (connectionId == 0) { connectionId = connId; @@ -371,9 +477,12 @@ public void establishPaseConnection(long deviceId, String address, int port, lon * * @param deviceId the ID of the node to be commissioned * @param networkCredentials the credentials (Wi-Fi or Thread) to be provisioned + *

This method was deprecated. Please use {@link + * ChipDeviceController.commissionDevice(long, CommissionParameters)}. */ + @Deprecated public void commissionDevice(long deviceId, @Nullable NetworkCredentials networkCredentials) { - commissionDevice(deviceControllerPtr, deviceId, /* csrNonce= */ null, networkCredentials); + commissionDevice(deviceControllerPtr, deviceId, /* csrNonce= */ null, networkCredentials, null); } /** @@ -384,10 +493,31 @@ public void commissionDevice(long deviceId, @Nullable NetworkCredentials network * @param deviceId the ID of the node to be commissioned * @param csrNonce a nonce to be used for the CSR request * @param networkCredentials the credentials (Wi-Fi or Thread) to be provisioned + *

This method was deprecated. Please use {@link + * ChipDeviceController.commissionDevice(long, CommissionParameters)}. */ + @Deprecated public void commissionDevice( long deviceId, @Nullable byte[] csrNonce, @Nullable NetworkCredentials networkCredentials) { - commissionDevice(deviceControllerPtr, deviceId, csrNonce, networkCredentials); + commissionDevice(deviceControllerPtr, deviceId, csrNonce, networkCredentials, null); + } + + /** + * Initiates the automatic commissioning flow using the specified network credentials. It is + * expected that a secure session has already been established via {@link + * #establishPaseConnection(long, int, long)}. + * + * @param deviceId the ID of the node to be commissioned + * @param params Parameters representing commissioning arguments. see detailed in {@link + * CommissionParameters} + */ + public void commissionDevice(long deviceId, @Nonnull CommissionParameters params) { + commissionDevice( + deviceControllerPtr, + deviceId, + params.getCsrNonce(), + params.getNetworkCredentials(), + params.getICDRegistrationInfo()); } /** @@ -1498,7 +1628,8 @@ private native void commissionDevice( long deviceControllerPtr, long deviceId, @Nullable byte[] csrNonce, - @Nullable NetworkCredentials networkCredentials); + @Nullable NetworkCredentials networkCredentials, + @Nullable ICDRegistrationInfo icdRegistrationInfo); private native void continueCommissioning( long deviceControllerPtr, long devicePtr, boolean ignoreAttestationFailure); diff --git a/src/controller/java/src/chip/devicecontroller/CommissionParameters.java b/src/controller/java/src/chip/devicecontroller/CommissionParameters.java new file mode 100644 index 00000000000000..15fd6ed16aaabf --- /dev/null +++ b/src/controller/java/src/chip/devicecontroller/CommissionParameters.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package chip.devicecontroller; + +import javax.annotation.Nullable; + +/** Parameters representing commissioning arguments for {@link ChipDeviceController}. */ +public final class CommissionParameters { + @Nullable private final byte[] csrNonce; + @Nullable private final NetworkCredentials networkCredentials; + @Nullable private final ICDRegistrationInfo icdRegistrationInfo; + + private CommissionParameters(Builder builder) { + csrNonce = builder.csrNonce; + networkCredentials = builder.networkCredentials; + icdRegistrationInfo = builder.icdRegistrationInfo; + } + /* a nonce to be used for the CSR request */ + public byte[] getCsrNonce() { + return csrNonce; + } + + /* the credentials (Wi-Fi or Thread) to be provisioned */ + public NetworkCredentials getNetworkCredentials() { + return networkCredentials; + } + /* the informations for ICD registration. For detailed information {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link CompletionListener.onICDRegistrationInfoRequired} is called to request the ICDRegistrationInfo value. */ + public ICDRegistrationInfo getICDRegistrationInfo() { + return icdRegistrationInfo; + } + + public static class Builder { + @Nullable private byte[] csrNonce = null; + @Nullable private NetworkCredentials networkCredentials = null; + @Nullable private ICDRegistrationInfo icdRegistrationInfo = null; + + public Builder setCsrNonce(byte[] csrNonce) { + this.csrNonce = csrNonce; + return this; + } + + public Builder setNetworkCredentials(NetworkCredentials networkCredentials) { + this.networkCredentials = networkCredentials; + return this; + } + + public Builder setICDRegistrationInfo(ICDRegistrationInfo icdRegistrationInfo) { + this.icdRegistrationInfo = icdRegistrationInfo; + return this; + } + + public CommissionParameters build() { + return new CommissionParameters(this); + } + } +} From 38f664fa983d99ddfb65b31c2cd9947514de3594 Mon Sep 17 00:00:00 2001 From: Alex Tsitsiura Date: Wed, 19 Jun 2024 18:02:38 +0300 Subject: [PATCH 20/28] [Telink] Update Docker image (Zephyr update) (#34014) --- integrations/docker/images/base/chip-build/version | 2 +- integrations/docker/images/stage-2/chip-build-telink/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/integrations/docker/images/base/chip-build/version b/integrations/docker/images/base/chip-build/version index d77f756e1b8c70..8dba8b6189e6a3 100644 --- a/integrations/docker/images/base/chip-build/version +++ b/integrations/docker/images/base/chip-build/version @@ -1 +1 @@ -56 : Update Silabs docker SiSDK 2024.06.0 WiseConnect 3.3.0 +57 : [Telink] Update Docker image (Zephyr update) diff --git a/integrations/docker/images/stage-2/chip-build-telink/Dockerfile b/integrations/docker/images/stage-2/chip-build-telink/Dockerfile index a9e53dca6824b8..66d5eccdc0d3a1 100644 --- a/integrations/docker/images/stage-2/chip-build-telink/Dockerfile +++ b/integrations/docker/images/stage-2/chip-build-telink/Dockerfile @@ -18,7 +18,7 @@ RUN set -x \ && : # last line # Setup Zephyr -ARG ZEPHYR_REVISION=0e8032dfef7e02498f34ba0b5d5d2df71a62adb1 +ARG ZEPHYR_REVISION=ab81a585fca6a83b30e1f4e58a021113d6a3acb8 WORKDIR /opt/telink/zephyrproject RUN set -x \ && python3 -m pip install --break-system-packages -U --no-cache-dir west \ From ec8ee38a3b9960ed36e6c47812e82e3bc5c7dda8 Mon Sep 17 00:00:00 2001 From: C Freeman Date: Wed, 19 Jun 2024 11:49:06 -0400 Subject: [PATCH 21/28] YAML documentation: Add commissioning example (#34013) --- docs/testing/yaml.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/testing/yaml.md b/docs/testing/yaml.md index 0cf53814d5fe5c..9f65b1fed426b5 100644 --- a/docs/testing/yaml.md +++ b/docs/testing/yaml.md @@ -349,7 +349,16 @@ NOTE: use the target appropriate to your system [chiptool.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/tests/chipyaml/chiptool.py) can be used to run tests against a commissioned DUT (commissioned by chip-tool). -This will start an interactive instance of chip-tool automatically. +To commission a DUT using chip-tool use the pairing command. For example: + +``` +./out/linux-x64-chip-tool/chip-tool pairing code 0x12344321 MT:-24J0AFN00KA0648G00 +``` + +In this example, 0x12344321 is the node ID (0x12344321 is the test default) and +MT:-24J0AFN00KA0648G00 is the QR code. + +The chiptool.py tool can then be used to run the tests. For example: ``` ./scripts/tests/chipyaml/chiptool.py tests Test_TC_OO_2_1 --server_path ./out/linux-x64-chip-tool/chip-tool From 2d8923f20194c5e575877765d93ce54762fbf200 Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Wed, 19 Jun 2024 11:49:42 -0400 Subject: [PATCH 22/28] Bump specification revision to 1.4 (#33999) * Bump specification revision to 1.4 - Set SpecificationVersion attribute of basic info to 0x01_04_00_00 - Update tests as needed * Fix more tests * Fix more tests * Fix TC-BINFO-2.1 test --- src/app/SpecificationDefinedRevisions.h | 4 +- .../tests/suites/TestBasicInformation.yaml | 4 +- src/app/tests/suites/TestCASERecovery.yaml | 8 +++- .../certification/Test_TC_BINFO_2_1.yaml | 45 +++---------------- 4 files changed, 16 insertions(+), 45 deletions(-) diff --git a/src/app/SpecificationDefinedRevisions.h b/src/app/SpecificationDefinedRevisions.h index cad67aced413b0..a883aa36d74892 100644 --- a/src/app/SpecificationDefinedRevisions.h +++ b/src/app/SpecificationDefinedRevisions.h @@ -41,7 +41,7 @@ inline constexpr uint8_t kInteractionModelRevisionTag = 0xFF; * See section 7.1.1. "Revision History" in the "Data Model Specification" * chapter of the core Matter specification. */ -inline constexpr uint16_t kDataModelRevision = 17; +inline constexpr uint16_t kDataModelRevision = 18; /* * A number identifying the specification version against which the @@ -50,7 +50,7 @@ inline constexpr uint16_t kDataModelRevision = 17; * See section 11.1.5.22. "SpecificationVersion Attribute" in "Service and * Device Management" chapter of the core Matter specification. */ -inline constexpr uint32_t kSpecificationVersion = 0x01030000; +inline constexpr uint32_t kSpecificationVersion = 0x01040000; } // namespace Revision } // namespace chip diff --git a/src/app/tests/suites/TestBasicInformation.yaml b/src/app/tests/suites/TestBasicInformation.yaml index ca62f39aafea85..e53b0dcee2581b 100644 --- a/src/app/tests/suites/TestBasicInformation.yaml +++ b/src/app/tests/suites/TestBasicInformation.yaml @@ -206,8 +206,8 @@ tests: command: "readAttribute" attribute: "SpecificationVersion" response: - # For now all-clusters-app has a version 1.3. - value: 0x01030000 + # For now all-clusters-app has a version 1.4. + value: 0x01040000 - label: "Read the Max Paths Per Invoke value" command: "readAttribute" diff --git a/src/app/tests/suites/TestCASERecovery.yaml b/src/app/tests/suites/TestCASERecovery.yaml index ef72e4dff7e512..babcc93ec89074 100644 --- a/src/app/tests/suites/TestCASERecovery.yaml +++ b/src/app/tests/suites/TestCASERecovery.yaml @@ -33,7 +33,9 @@ tests: command: "readAttribute" attribute: "DataModelRevision" response: - value: 17 + constraints: + type: int16u + minValue: 17 - label: "Reboot the server" cluster: "SystemCommands" @@ -72,4 +74,6 @@ tests: command: "readAttribute" attribute: "DataModelRevision" response: - value: 17 + constraints: + type: int16u + minValue: 17 diff --git a/src/app/tests/suites/certification/Test_TC_BINFO_2_1.yaml b/src/app/tests/suites/certification/Test_TC_BINFO_2_1.yaml index 7f445619a90cc8..55f3666c86a517 100644 --- a/src/app/tests/suites/certification/Test_TC_BINFO_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_BINFO_2_1.yaml @@ -86,19 +86,15 @@ tests: value: "y" - label: "Step 2: TH reads DataModelRevision from the DUT." - PICS: BINFO.S.A0000 command: "readAttribute" attribute: "DataModelRevision" response: - value: 17 + value: 18 saveAs: DataModelRevisionValue constraints: type: int16u - minValue: 0 - maxValue: 65534 - label: "Step 3: TH writes DataModelRevision as '0x1124' " - PICS: BINFO.S.A0000 command: "writeAttribute" attribute: "DataModelRevision" arguments: @@ -107,7 +103,6 @@ tests: error: UNSUPPORTED_WRITE - label: "Step 4: TH reads DataModelRevision from the DUT." - PICS: BINFO.S.A0000 command: "readAttribute" attribute: "DataModelRevision" response: @@ -720,48 +715,21 @@ tests: response: value: ProductAppearancevalue - - label: "Step 62: TH reads SpecificationVersion from the DUT." - PICS: BINFO.S.A0015 - command: "readAttribute" - attribute: "SpecificationVersion" - response: - saveAs: SpecificationVersionValue - - - label: - "Step 62: If the SpecificationVersion value is absent or zero this - step cannot be verified, move on to the next step" - PICS: BINFO.S.A0015 - cluster: "EqualityCommands" - command: "UnsignedNumberEquals" - arguments: - values: - - name: "Value1" - value: SpecificationVersionValue - - name: "Value2" - value: null - response: - - values: - - name: "Equals" - saveAs: IsExpectedValue - - label: "Step 62: SpecificationVersion value should in the inclusive range of - (0 to 4294967295) and the initial 7 bits are set to zero." - runIf: "!IsExpectedValue" - PICS: BINFO.S.A0015 + (0x01040000 to 0x0104FF00) and the lower 8 bits are set to zero." command: "readAttribute" attribute: "SpecificationVersion" response: - value: SpecificationVersionValue + saveAs: SpecificationVersionValue constraints: - minValue: 0 - maxValue: 4294967295 - hasMasksClear: [0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40] + minValue: 0x01040000 + maxValue: 0x0104FF00 + hasMasksClear: [0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80] - label: "Step 63: TH sends Write request message to DUT to change the value of SpecificationVersion to '0x0103AAF1'." - PICS: BINFO.S.A0015 command: "writeAttribute" attribute: "SpecificationVersion" arguments: @@ -770,7 +738,6 @@ tests: error: UNSUPPORTED_WRITE - label: "Step 64: TH reads SpecificationVersion attribute from DUT" - PICS: BINFO.S.A0015 command: "readAttribute" attribute: "SpecificationVersion" response: From d7b5527f693a992670763b70e143721d269efe3a Mon Sep 17 00:00:00 2001 From: Shubham Patil Date: Wed, 19 Jun 2024 21:23:26 +0530 Subject: [PATCH 23/28] ESP32: Fix building with pw_rpc config for m5 stack (#34007) - Enable few config option optimizations for IRAM to fix the IRAM/DRAM overflow - Update m5stack-tft submomdule to d99f5ef8df180ab34b3d9fff6888d5bede7665c5 to fix the compilation warnings - Fix a casting for uart port number --- examples/common/m5stack-tft/repo | 2 +- examples/lighting-app/esp32/sdkconfig_rpc.defaults | 4 ++++ examples/platform/esp32/pw_sys_io/sys_io_esp32.cc | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/common/m5stack-tft/repo b/examples/common/m5stack-tft/repo index a6299b6c7c0b2e..d99f5ef8df180a 160000 --- a/examples/common/m5stack-tft/repo +++ b/examples/common/m5stack-tft/repo @@ -1 +1 @@ -Subproject commit a6299b6c7c0b2e3eb62fa08ee4bf7155c39bad1f +Subproject commit d99f5ef8df180ab34b3d9fff6888d5bede7665c5 diff --git a/examples/lighting-app/esp32/sdkconfig_rpc.defaults b/examples/lighting-app/esp32/sdkconfig_rpc.defaults index 57ac2d6b027c56..71c4cebfc89242 100644 --- a/examples/lighting-app/esp32/sdkconfig_rpc.defaults +++ b/examples/lighting-app/esp32/sdkconfig_rpc.defaults @@ -55,3 +55,7 @@ CONFIG_ENABLE_PW_RPC=y CONFIG_MBEDTLS_HKDF_C=y CONFIG_DIAG_USE_EXTERNAL_LOG_WRAP=y + +CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y +CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH=y +CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH=y diff --git a/examples/platform/esp32/pw_sys_io/sys_io_esp32.cc b/examples/platform/esp32/pw_sys_io/sys_io_esp32.cc index 5991b9c6e27674..8d3b1c230a29d0 100644 --- a/examples/platform/esp32/pw_sys_io/sys_io_esp32.cc +++ b/examples/platform/esp32/pw_sys_io/sys_io_esp32.cc @@ -36,7 +36,7 @@ #define ECHO_TEST_RTS (UART_PIN_NO_CHANGE) #define ECHO_TEST_CTS (UART_PIN_NO_CHANGE) -#define ECHO_UART_PORT_NUM (CONFIG_EXAMPLE_UART_PORT_NUM) +#define ECHO_UART_PORT_NUM (static_cast(CONFIG_EXAMPLE_UART_PORT_NUM)) #define ECHO_UART_BAUD_RATE (CONFIG_EXAMPLE_UART_BAUD_RATE) int console_getchar(uint8_t * chr) From 1bf70b6f085040923b946df797f1a3ff2541cba5 Mon Sep 17 00:00:00 2001 From: joonhaengHeo <85541460+joonhaengHeo@users.noreply.github.com> Date: Thu, 20 Jun 2024 00:54:35 +0900 Subject: [PATCH 24/28] Fix typo in bootstrap (#34005) --- scripts/setup/bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup/bootstrap.sh b/scripts/setup/bootstrap.sh index 16e1f6064c5b90..af71eb9b1cfefe 100644 --- a/scripts/setup/bootstrap.sh +++ b/scripts/setup/bootstrap.sh @@ -207,7 +207,7 @@ if _submodules_need_updating; then echo "For a clean checkout, consider running:" echo " ./scripts/checkout_submodules.py --shallow --platform " echo "OR for a full checkout:" - echo " git submodules update -f --init --recursive" + echo " git submodule update -f --init --recursive" # reset output if which tput >/dev/null; then tput sgr0; fi From 1ae130fc97fddc86674100d2b8ac9ec46f746b9d Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Wed, 19 Jun 2024 13:21:44 -0400 Subject: [PATCH 25/28] Prepare changes for build_python.sh for ubuntu 24.04 usage (#34016) Changes: - use `-m venv` to create the virtualenv - ensure `libgirepository1.0-dev` is installed, so that we are able to build/install pygobject --- integrations/docker/images/base/chip-build/Dockerfile | 1 + integrations/docker/images/base/chip-build/version | 2 +- scripts/build_python.sh | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/integrations/docker/images/base/chip-build/Dockerfile b/integrations/docker/images/base/chip-build/Dockerfile index 52009834302249..ebe222b8a7e468 100644 --- a/integrations/docker/images/base/chip-build/Dockerfile +++ b/integrations/docker/images/base/chip-build/Dockerfile @@ -59,6 +59,7 @@ RUN set -x \ libdmalloc-dev \ libgif-dev \ libgirepository-1.0-1 \ + libgirepository1.0-dev \ libglib2.0-dev \ libical-dev \ libjpeg-dev \ diff --git a/integrations/docker/images/base/chip-build/version b/integrations/docker/images/base/chip-build/version index 8dba8b6189e6a3..94561c77a986e4 100644 --- a/integrations/docker/images/base/chip-build/version +++ b/integrations/docker/images/base/chip-build/version @@ -1 +1 @@ -57 : [Telink] Update Docker image (Zephyr update) +58 : Add libgirepository1.0-dev to the base image, to make build_python.sh work (assume we want this everywhere) diff --git a/scripts/build_python.sh b/scripts/build_python.sh index ce0e40f5dd1475..a946bb1b8f518b 100755 --- a/scripts/build_python.sh +++ b/scripts/build_python.sh @@ -222,10 +222,10 @@ if [ -n "$install_virtual_env" ]; then if [ "$clean_virtual_env" = "yes" ]; then # Create a virtual environment that has access to the built python tools echo_blue "Creating a clear VirtualEnv in '$ENVIRONMENT_ROOT' ..." - virtualenv --clear "$ENVIRONMENT_ROOT" + python -m venv --clear "$ENVIRONMENT_ROOT" elif [ ! -f "$ENVIRONMENT_ROOT"/bin/activate ]; then echo_blue "Creating a new VirtualEnv in '$ENVIRONMENT_ROOT' ..." - virtualenv "$ENVIRONMENT_ROOT" + python -m venv "$ENVIRONMENT_ROOT" fi source "$ENVIRONMENT_ROOT"/bin/activate From 3b4371ea79a6f847808f01649053817a16d9906f Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Wed, 19 Jun 2024 13:41:58 -0400 Subject: [PATCH 26/28] Fix compile crash on glib compilation with glib dev install (#34018) * Fix compile crash on glib compilation with glib dev install * Restyle --------- Co-authored-by: Andrei Litvin --- integrations/docker/images/base/chip-build/Dockerfile | 11 ++++++++++- integrations/docker/images/base/chip-build/version | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/integrations/docker/images/base/chip-build/Dockerfile b/integrations/docker/images/base/chip-build/Dockerfile index ebe222b8a7e468..db209a82f20b87 100644 --- a/integrations/docker/images/base/chip-build/Dockerfile +++ b/integrations/docker/images/base/chip-build/Dockerfile @@ -59,7 +59,6 @@ RUN set -x \ libdmalloc-dev \ libgif-dev \ libgirepository-1.0-1 \ - libgirepository1.0-dev \ libglib2.0-dev \ libical-dev \ libjpeg-dev \ @@ -164,6 +163,16 @@ RUN case ${TARGETPLATFORM} in \ ;; \ esac +# Sanitizer compilation fails if this is installed before +# glib recompile. +RUN set -x \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -fy --fix-missing --no-install-recommends \ + libgirepository1.0-dev \ + && rm -rf /var/lib/apt/lists/ \ + && : # last line + + # Some things that save space # Protoc goes from 108M to 4.6M RUN strip /usr/local/bin/protoc* diff --git a/integrations/docker/images/base/chip-build/version b/integrations/docker/images/base/chip-build/version index 94561c77a986e4..375ee709695659 100644 --- a/integrations/docker/images/base/chip-build/version +++ b/integrations/docker/images/base/chip-build/version @@ -1 +1 @@ -58 : Add libgirepository1.0-dev to the base image, to make build_python.sh work (assume we want this everywhere) +59 : Install order fix for glib with enabled thread sanitizer. From b194ca5c40bb9fc98bd98812b4c29f592109d3b9 Mon Sep 17 00:00:00 2001 From: C Freeman Date: Wed, 19 Jun 2024 14:41:14 -0400 Subject: [PATCH 27/28] update DA-1.4/1.8 helpter script (#33935) I added the PID to the test_vector, so we should pull it from there. There's a new fallback that uses a different PID. --- .../development/gen_commissioner_dut_test_plan_table.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/credentials/development/gen_commissioner_dut_test_plan_table.py b/credentials/development/gen_commissioner_dut_test_plan_table.py index fb3ca49087e0b7..450f1c7d7c0da3 100755 --- a/credentials/development/gen_commissioner_dut_test_plan_table.py +++ b/credentials/development/gen_commissioner_dut_test_plan_table.py @@ -86,8 +86,7 @@ def main(): with open(path, 'r') as f: j = json.loads(f.read()) success_expected = j['is_success_case'].lower() == 'true' - pid = 177 if 'fallback_encoding' in p else 32768 - desc = TestInfo(desc=j['description'], dir=p, pid=pid) + desc = TestInfo(desc=j['description'], dir=p, pid=int(j['basic_info_pid'])) if success_expected: success_cases.append(desc) else: From ab42d4375a10346da62a95947871737f151f4313 Mon Sep 17 00:00:00 2001 From: Amine Alami <43780877+Alami-Amine@users.noreply.github.com> Date: Wed, 19 Jun 2024 21:51:25 +0200 Subject: [PATCH 28/28] Making TestInetLayer an executable tool (#33985) * making TestInetLayer an executable tool * allowing chip_with_nlfaultinjection for chip_build_tools * Restyled by clang-format * adding nlfaultinjection to CMake includes --------- Co-authored-by: Restyled.io --- BUILD.gn | 1 + build/chip/tests.gni | 5 +- config/common/cmake/chip_gn.cmake | 1 + src/inet/tests/BUILD.gn | 75 ++--- src/inet/tests/TestInetCommonOptions.cpp | 63 ++--- src/inet/tests/TestInetLayerCommon.hpp | 4 +- src/inet/tests/TestLwIPDNS.cpp | 260 ------------------ ...InetLayer.cpp => inet-layer-test-tool.cpp} | 2 +- 8 files changed, 77 insertions(+), 334 deletions(-) mode change 100644 => 100755 build/chip/tests.gni mode change 100644 => 100755 src/inet/tests/BUILD.gn delete mode 100644 src/inet/tests/TestLwIPDNS.cpp rename src/inet/tests/{TestInetLayer.cpp => inet-layer-test-tool.cpp} (99%) diff --git a/BUILD.gn b/BUILD.gn index aa443d94e35f52..ddd893a4ca49d8 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -161,6 +161,7 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") { "${chip_root}/examples/shell/standalone:chip-shell", "${chip_root}/src/app/tests/integration:chip-im-initiator", "${chip_root}/src/app/tests/integration:chip-im-responder", + "${chip_root}/src/inet/tests:inet-layer-test-tool", "${chip_root}/src/lib/address_resolve:address-resolve-tool", "${chip_root}/src/messaging/tests/echo:chip-echo-requester", "${chip_root}/src/messaging/tests/echo:chip-echo-responder", diff --git a/build/chip/tests.gni b/build/chip/tests.gni old mode 100644 new mode 100755 index 61a2ad3e685682..8fb77932662634 --- a/build/chip/tests.gni +++ b/build/chip/tests.gni @@ -15,6 +15,7 @@ import("//build_overrides/build.gni") import("//build_overrides/chip.gni") +import("${chip_root}/build/chip/tools.gni") import("${chip_root}/src/platform/device.gni") declare_args() { @@ -40,6 +41,6 @@ declare_args() { } declare_args() { - # Enable use of nlfaultinjection. - chip_with_nlfaultinjection = chip_build_tests + # Enable use of nlfaultinjection when building tests or when building tools. + chip_with_nlfaultinjection = chip_build_tests || chip_build_tools } diff --git a/config/common/cmake/chip_gn.cmake b/config/common/cmake/chip_gn.cmake index 618fbfccec3632..8370ec5902582e 100644 --- a/config/common/cmake/chip_gn.cmake +++ b/config/common/cmake/chip_gn.cmake @@ -158,6 +158,7 @@ macro(matter_build target) ${CHIP_ROOT}/src/include ${CHIP_ROOT}/third_party/nlassert/repo/include ${CHIP_ROOT}/third_party/nlio/repo/include + ${CHIP_ROOT}/third_party/nlfaultinjection/include ${CHIP_ROOT}/zzz_generated/app-common ${CMAKE_CURRENT_BINARY_DIR}/gen/include ) diff --git a/src/inet/tests/BUILD.gn b/src/inet/tests/BUILD.gn old mode 100644 new mode 100755 index 3111c4e70a4805..39b707c86c8452 --- a/src/inet/tests/BUILD.gn +++ b/src/inet/tests/BUILD.gn @@ -14,13 +14,18 @@ import("//build_overrides/build.gni") import("//build_overrides/chip.gni") +import("//build_overrides/nlfaultinjection.gni") import("//build_overrides/pigweed.gni") -import("${chip_root}/build/chip/chip_test_suite.gni") import("${chip_root}/build/chip/tests.gni") +import("${chip_root}/build/chip/tools.gni") import("${chip_root}/src/platform/device.gni") import("${chip_root}/src/system/system.gni") +if (chip_build_tests) { + import("${chip_root}/build/chip/chip_test_suite.gni") +} + config("tests_config") { include_dirs = [ "." ] } @@ -40,9 +45,13 @@ static_library("helpers") { "TestSetupSignallingPosix.cpp", ] - if (current_os != "mbed") { - sources += [ "TestInetLayer.cpp" ] - } + cflags = [ "-Wconversion" ] + + public_deps = [ + "${chip_root}/src/inet", + "${chip_root}/src/lib/core", + "${chip_root}/src/platform", + ] if (chip_with_nlfaultinjection) { sources += [ @@ -50,45 +59,45 @@ static_library("helpers") { "TestSetupFaultInjectionPosix.cpp", ] } +} - cflags = [ "-Wconversion" ] +if (chip_build_tests) { + chip_test_suite("tests") { + output_name = "libInetLayerTests" - public_deps = [ - "${chip_root}/src/inet", - "${chip_root}/src/lib/core", - "${chip_root}/src/platform", - ] + public_configs = [ ":tests_config" ] + + public_deps = [ + ":helpers", + "${chip_root}/src/inet", + "${chip_root}/src/lib/core", + ] + test_sources = [ + "TestBasicPacketFilters.cpp", + "TestInetAddress.cpp", + "TestInetErrorStr.cpp", + ] + sources = [] + + if (chip_system_config_use_sockets && current_os != "zephyr") { + test_sources += [ "TestInetEndPoint.cpp" ] + } + + cflags = [ "-Wconversion" ] + } } -chip_test_suite("tests") { - output_name = "libInetLayerTests" +executable("inet-layer-test-tool") { + sources = [ "inet-layer-test-tool.cpp" ] - public_configs = [ ":tests_config" ] + cflags = [ "-Wconversion" ] public_deps = [ ":helpers", "${chip_root}/src/inet", "${chip_root}/src/lib/core", + "${chip_root}/src/platform", ] - test_sources = [ - "TestBasicPacketFilters.cpp", - "TestInetAddress.cpp", - "TestInetErrorStr.cpp", - ] - sources = [] - - if (chip_system_config_use_sockets && current_os != "zephyr") { - test_sources += [ "TestInetEndPoint.cpp" ] - } - # This fails on Raspberry Pi (Linux arm64), so only enable on Linux - # x64. - if (current_os != "mac" && current_os != "zephyr" && - chip_device_platform != "esp32" && current_cpu == "x64" && - chip_device_platform != "ameba") { - # TODO: This test does not seem executed - sources += [ "TestLwIPDNS.cpp" ] - } - - cflags = [ "-Wconversion" ] + output_dir = root_out_dir } diff --git a/src/inet/tests/TestInetCommonOptions.cpp b/src/inet/tests/TestInetCommonOptions.cpp index 7e4648d7466b1b..ac51573e095e6e 100644 --- a/src/inet/tests/TestInetCommonOptions.cpp +++ b/src/inet/tests/TestInetCommonOptions.cpp @@ -198,43 +198,36 @@ bool NetworkOptions::HandleOption(const char * progName, OptionSet * optSet, int FaultInjectionOptions::FaultInjectionOptions() { - static OptionDef optionDefs[] = { -#if CHIP_CONFIG_TEST || CHIP_SYSTEM_CONFIG_TEST || INET_CONFIG_TEST - { "faults", kArgumentRequired, kToolCommonOpt_FaultInjection }, - { "iterations", kArgumentRequired, kToolCommonOpt_FaultTestIterations }, - { "debug-resource-usage", kNoArgument, kToolCommonOpt_DebugResourceUsage }, - { "print-fault-counters", kNoArgument, kToolCommonOpt_PrintFaultCounters }, - { "extra-cleanup-time", kArgumentRequired, kToolCommonOpt_ExtraCleanupTime }, -#endif - {} - }; - OptionDefs = optionDefs; + static OptionDef optionDefs[] = { { "faults", kArgumentRequired, kToolCommonOpt_FaultInjection }, + { "iterations", kArgumentRequired, kToolCommonOpt_FaultTestIterations }, + { "debug-resource-usage", kNoArgument, kToolCommonOpt_DebugResourceUsage }, + { "print-fault-counters", kNoArgument, kToolCommonOpt_PrintFaultCounters }, + { "extra-cleanup-time", kArgumentRequired, kToolCommonOpt_ExtraCleanupTime }, + {} }; + OptionDefs = optionDefs; HelpGroupName = "FAULT INJECTION OPTIONS"; - OptionHelp = -#if CHIP_CONFIG_TEST || CHIP_SYSTEM_CONFIG_TEST || INET_CONFIG_TEST - " --faults \n" - " Inject specified fault(s) into the operation of the tool at runtime.\n" - "\n" - " --iterations \n" - " Execute the program operation the given number of times\n" - "\n" - " --debug-resource-usage\n" - " Print all stats counters before exiting.\n" - "\n" - " --print-fault-counters\n" - " Print the fault-injection counters before exiting.\n" - "\n" - " --extra-cleanup-time\n" - " Allow extra time before asserting resource leaks; this is useful when\n" - " running fault-injection tests to let the system free stale ExchangeContext\n" - " instances after RMP has exhausted all retransmission; a failed RMP transmission\n" - " should fail a normal happy-sequence test, but not necessarily a fault-injection test.\n" - " The value is in milliseconds; a common value is 10000.\n" - "\n" -#endif - ""; + OptionHelp = " --faults \n" + " Inject specified fault(s) into the operation of the tool at runtime.\n" + "\n" + " --iterations \n" + " Execute the program operation the given number of times\n" + "\n" + " --debug-resource-usage\n" + " Print all stats counters before exiting.\n" + "\n" + " --print-fault-counters\n" + " Print the fault-injection counters before exiting.\n" + "\n" + " --extra-cleanup-time\n" + " Allow extra time before asserting resource leaks; this is useful when\n" + " running fault-injection tests to let the system free stale ExchangeContext\n" + " instances after RMP has exhausted all retransmission; a failed RMP transmission\n" + " should fail a normal happy-sequence test, but not necessarily a fault-injection test.\n" + " The value is in milliseconds; a common value is 10000.\n" + "\n" + ""; // Defaults TestIterations = 1; @@ -253,7 +246,6 @@ bool FaultInjectionOptions::HandleOption(const char * progName, OptionSet * optS switch (id) { -#if CHIP_CONFIG_TEST || CHIP_SYSTEM_CONFIG_TEST || INET_CONFIG_TEST case kToolCommonOpt_FaultInjection: { chip::Platform::ScopedMemoryString mutableArg(arg, strlen(arg)); assert(mutableArg); @@ -285,7 +277,6 @@ bool FaultInjectionOptions::HandleOption(const char * progName, OptionSet * optS return false; } break; -#endif // CHIP_CONFIG_TEST || CHIP_SYSTEM_CONFIG_TEST || INET_CONFIG_TEST default: PrintArgError("%s: INTERNAL ERROR: Unhandled option: %s\n", progName, name); return false; diff --git a/src/inet/tests/TestInetLayerCommon.hpp b/src/inet/tests/TestInetLayerCommon.hpp index d34a7628ea3a3c..4474d56314429e 100644 --- a/src/inet/tests/TestInetLayerCommon.hpp +++ b/src/inet/tests/TestInetLayerCommon.hpp @@ -126,8 +126,8 @@ extern bool IsSender(); extern bool IsTesting(const TestStatus & aTestStatus); extern bool WasSuccessful(const TestStatus & aTestStatus); -extern chip::System::PacketBufferHandle MakeDataBuffer(uint16_t aDesiredLength, uint8_t aFirstValue); -extern chip::System::PacketBufferHandle MakeDataBuffer(uint16_t aDesiredLength); +extern chip::System::PacketBufferHandle MakeDataBuffer(size_t aDesiredLength, uint8_t aFirstValue); +extern chip::System::PacketBufferHandle MakeDataBuffer(size_t aDesiredLength); extern chip::System::PacketBufferHandle MakeICMPv4DataBuffer(uint16_t aDesiredUserLength); extern chip::System::PacketBufferHandle MakeICMPv6DataBuffer(uint16_t aDesiredUserLength); diff --git a/src/inet/tests/TestLwIPDNS.cpp b/src/inet/tests/TestLwIPDNS.cpp deleted file mode 100644 index 8681f7b2e54328..00000000000000 --- a/src/inet/tests/TestLwIPDNS.cpp +++ /dev/null @@ -1,260 +0,0 @@ -/* - * - * Copyright (c) 2020 Project CHIP Authors - * Copyright (c) 2013-2017 Nest Labs, Inc. - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file - * This file implements a process to effect a functional test for - * LwIP's Domain Name Service (DNS) interface. - * - */ - -#include -#include - -#include -#include - -#include - -#if CHIP_SYSTEM_CONFIG_USE_LWIP -#include -#include -#endif // CHIP_SYSTEM_CONFIG_USE_LWIP - -#include - -#include - -#include "TestInetCommon.h" -#include "TestInetCommonOptions.h" -#include "TestSetupFaultInjection.h" -#include "TestSetupSignalling.h" - -using namespace chip; -using namespace chip::Inet; - -#define TOOL_NAME "TestLwIPDNS" - -static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]); - -// Globals - -#if CHIP_SYSTEM_CONFIG_USE_LWIP -static uint8_t sNumIpAddrs = DNS_MAX_ADDRS_PER_NAME; -static ip_addr_t sIpAddrs[DNS_MAX_ADDRS_PER_NAME]; -#endif // CHIP_SYSTEM_CONFIG_USE_LWIP - -static const char * sHostname = nullptr; -static const char * sDNSServerAddr = nullptr; - -// clang-format off -static ArgParser::HelpOptions gHelpOptions(TOOL_NAME, - "Usage: " TOOL_NAME " [] \n", - CHIP_VERSION_STRING "\n" CHIP_TOOL_COPYRIGHT); - -static ArgParser::OptionSet * gToolOptionSets[] = -{ - &gNetworkOptions, - &gFaultInjectionOptions, - &gHelpOptions, - nullptr -}; -// clang-format on - -#if CHIP_SYSTEM_CONFIG_USE_LWIP -static void found_multi(const char * aName, ip_addr_t * aIpAddrs, uint8_t aNumIpAddrs, void * callback_arg) -{ - printf("\tfound_multi response\n"); - printf("\tName: %s\n", aName); - printf("\tnumipaddrs: %d (DNS_MAX_ADDRS_PER_NAME: %d)\n", aNumIpAddrs, DNS_MAX_ADDRS_PER_NAME); - - for (uint8_t i = 0; i < aNumIpAddrs; ++i) - { - char addrStr[INET6_ADDRSTRLEN]; - - IPAddress(aIpAddrs[i]).ToString(addrStr, sizeof(addrStr)); - - printf("\t(%d) IPv4: %s\n", i, addrStr); - } - - Done = true; -} - -static void TestLwIPDNS(void) -{ - uint8_t numdns = 1; - ip_addr_t dnsserver[1]; - IPAddress DNSServerIPv4Addr; - - IPAddress::FromString(sDNSServerAddr, DNSServerIPv4Addr); - - dnsserver[0] = DNSServerIPv4Addr.ToIPv4(); - - dns_setserver(numdns, dnsserver); - - printf("\nStarted dns_gethostbyname_multi test...\n\n"); - - // Expected request / response - printf("Expected request / response #1\n"); - printf("hn: %s, ips: %p, nips: %d, fm: %p, arg: %p\n", hostname, sIpAddrs, sNumIpAddrs, found_multi, NULL); - printf("ip[0]: %d, ip[1]: %d\n", sIpAddrs[0], sIpAddrs[1]); - err_t res = dns_gethostbyname_multi(hostname, sIpAddrs, &sNumIpAddrs, found_multi, NULL); - if (res == ERR_INPROGRESS) - { - printf("\tdns_gethostbyname_multi: %d (ERR_INPROGRESS)\n", res); - } - else - { - printf("\tdns_gethostbyname_multi: %d (expected -5: ERR_INPROGRESS)\n", res); - } - - while (!Done) - { - constexpr uint32_t kSleepTimeMilliseconds = 10; - ServiceNetwork(kSleepTimeMilliseconds); - } - - // Expected cached response - printf("Expected cached response #1\n"); - sNumIpAddrs = DNS_MAX_ADDRS_PER_NAME; - printf("hn: %s, ips: %p, nips: %d, fm: %p, arg: %p\n", hostname, ipaddrs, sNumIpAddrs, found_multi, NULL); - printf("ip[0]: %d, ip[1]: %d\n", sIpAddrs[0], sIpAddrs[1]); - res = dns_gethostbyname_multi(hostname, ipaddrs, &sNumIpAddrs, found_multi, NULL); - if (res == ERR_OK) - { - printf("\tdns_gethostbyname_multi: %d (ERR_OK)\n", res); - printf("\tlocal DNS cache response\n"); - printf("\tName: %s\n", hostname); - printf("\tnumipaddrs: %d\n", sNumIpAddrs); - for (uint8_t i = 0; i < sNumIpAddrs; ++i) - { - char addrStr[64]; - IPAddress(sIpAddrs[i]).ToString(addrStr, sizeof(addrStr)); - printf("\t(%d) IPv4: %s\n", i, addrStr); - } - } - else - { - printf("\tdns_gethostbyname_multi: %d (expected : ERR_OK)\n", res); - } - - // Expected cached response - printf("Expected cached response #2\n"); - sNumIpAddrs = DNS_MAX_ADDRS_PER_NAME - 1; - printf("hn: %s, ips: %p, nips: %d, fm: %p, arg: %p\n", hostname, ipaddrs, sNumIpAddrs, found_multi, NULL); - printf("ip[0]: %d, ip[1]: %d\n", sIpAddrs[0], sIpAddrs[1]); - - res = dns_gethostbyname_multi(hostname, sIpAddrs, &sNumIpAddrs, found_multi, NULL); - - if (res == ERR_OK) - { - printf("\tdns_gethostbyname_multi: %d (ERR_OK)\n", res); - printf("\tlocal DNS cache response\n"); - printf("\tName: %s\n", hostname); - printf("\tnumipaddrs: %d\n", sNumIpAddrs); - for (i = 0; i < sNumIpAddrs; ++i) - { - char addrStr[64]; - IPAddress(sIpAddrs[i]).ToString(addrStr, sizeof(addrStr)); - printf("\t(%d) IPv4: %s\n", i, addrStr); - } - } - else - { - printf("\tdns_gethostbyname_multi: %d (expected : ERR_OK)\n", res); - } - - // Expected cached response - printf("Expected cached response #3\n"); - sNumIpAddrs = 0; - printf("hn: %s, ips: %p, nips: %d, fm: %p, arg: %p\n", hostname, ipaddrs, sNumIpAddrs, found_multi, NULL); - printf("ip[0]: %d, ip[1]: %d\n", sIpAddrs[0], sIpAddrs[1]); - - res = dns_gethostbyname_multi(hostname, ipaddrs, &sNumIpAddrs, found_multi, NULL); - - if (res == ERR_OK) - { - printf("\tdns_gethostbyname_multi: %d (ERR_OK)\n", res); - printf("\tlocal DNS cache response\n"); - printf("\tName: %s\n", hostname); - printf("\tnumipaddrs: %d\n", sNumIpAddrs); - for (i = 0; i < sNumIpAddrs; ++i) - { - char addrStr[64]; - IPAddress(sIpAddrs[i]).ToString(addrStr, sizeof(addrStr)); - printf("\t(%d) IPv4: %s\n", i, addrStr); - } - } - else - { - printf("\tdns_gethostbyname_multi: %d (expected : ERR_OK)\n", res); - } -} -#endif // CHIP_SYSTEM_CONFIG_USE_LWIP - -int main(int argc, char * argv[]) -{ - SetSIGUSR1Handler(); - - if (argc == 1) - { - gHelpOptions.PrintBriefUsage(stderr); - exit(EXIT_FAILURE); - } - - if (!ParseArgs(TOOL_NAME, argc, argv, gToolOptionSets, HandleNonOptionArgs)) - { - exit(EXIT_FAILURE); - } - - InitSystemLayer(); - - InitNetwork(); - -#if CHIP_SYSTEM_CONFIG_USE_LWIP - TestLwIPDNS(); -#else - fprintf(stderr, "Please assert CHIP_SYSTEM_CONFIG_USE_LWIP to use this test.\n"); -#endif // CHIP_SYSTEM_CONFIG_USE_LWIP - - ShutdownNetwork(); - - ShutdownSystemLayer(); - - return (EXIT_SUCCESS); -} - -static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]) -{ - if (argc < 2) - { - printf("TestDNS: Missing %s argument\n", argc == 0 ? "" : ""); - return false; - } - - if (argc > 2) - { - printf("Unexpected argument: %s\n", argv[1]); - } - - sHostname = argv[0]; - sDNSServerAddr = argv[1]; - - return true; -} diff --git a/src/inet/tests/TestInetLayer.cpp b/src/inet/tests/inet-layer-test-tool.cpp similarity index 99% rename from src/inet/tests/TestInetLayer.cpp rename to src/inet/tests/inet-layer-test-tool.cpp index 0001e527af0464..e276600fa10108 100644 --- a/src/inet/tests/TestInetLayer.cpp +++ b/src/inet/tests/inet-layer-test-tool.cpp @@ -49,7 +49,7 @@ using namespace chip::System; /* Preprocessor Macros */ -#define kToolName "TestInetLayer" +#define kToolName "inet-layer-test-tool" #define kToolOptTCPIP 't'