## Using ESP32 Factory Data Provider By default applications uses test-mode or default commissionable data provider, device attestation credentials provider, and device instance info provider. To use different values for them you can use the ESP32 Factory Data Provider. ### Configuration Options Enable config option `CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER` to use ESP32 specific implementation of CommissionableDataProvider and DeviceAttestationCredentialsProvider. [Component config → CHIP Device Layer → Commissioning options → Use ESP32 Factory Data Provider] Enable config option `CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER` to use ESP32 specific implementation of DeviceInstanceInfoProvider. [Component config → CHIP Device Layer → Commissioning options → Use ESP32 Device Instance Info Provider] ESP32 implementation reads factory data from nvs partition, chip-factory data must be flashed into the configured nvs partition. Factory partition can be configured using `CONFIG_CHIP_FACTORY_NAMESPACE_PARTITION_LABEL` option, default is "nvs". ### Generate NVS Binary Image `scripts/tools/generate_esp32_chip_factory_bin.py` script generates the chip-factory NVS binary image `partition.bin`. #### Supported data Script supports adding following data to the NVS binary image: - Commissionable data - Discriminator - Spake2p verifier, salt, and iteration count - Device attestation data - Device attestation key and certificate - Product attestation intermediate certificate - Certificate declaration - Device instance information - Vendor id and name - Product id and name - Hardware version and version string - Serial Number - Unique identifier Please check help for available options, `scripts/tools/generate_esp32_chip_factory_bin.py` #### Dependency Script has dependency on [spake2p](https://github.com/project-chip/connectedhomeip/tree/master/src/tools/spake2p) for generating spake2p parameters. Build spake2p: ``` cd path/to/connectedhomeip gn gen out/host ninja -C out/host cd - ``` Add spake2p to \$PATH environment variable ``` export PATH=$PATH:path/to/connectedhomeip/out/host ``` #### Usage Below mentioned command generates the nvs image with test DAC with VID:0xFFF2 and PID:8000 and some examples values for other fields. ``` ./generate_esp32_chip_factory_bin.py -d 3434 -p 99663300 \ --product-name ESP-lighting-app --product-id 0x8000 \ --vendor-name Test-vendor --vendor-id 0xFFF2 \ --hw-ver 1 --hw-ver-str DevKit \ --dac-cert path/to/connectedhomeip/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Cert.der \ --dac-key path/to/connectedhomeip/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Key.der \ --pai-cert path/to/connectedhomeip/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.der \ --cd path/to/connectedhomeip/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der \ ``` #### Flashing the generated NVS image Use the following command to flash the NVS image. `0x9000` is default address for `nvs` partition. ``` esptool.py -p write_flash 0x9000 factory_partition.bin ``` NOTE: Above command uses the default NVS address, please flash the NVS image at appropriate address. ### Securing NVS binary image with NVS Encryption Please check [Flash and NVS encryption guide](flash_nvs_encryption.md)