# `FactoryDataProvider` for EFR32 Matter device

## Introduction

The python `FactoryDataProvider.py` script allows a user to store a set of
commissionable data in the matter nvm3 section of an EFR32 device. This script
can handle writing to any MCU EFR32MG24 family.

# Prerequisites

The users need to have in their hands a valid and matching set of spake2p+
credentials:

-   Setup Discriminator
-   Setup Passcode
-   Spake2p Iteration count
-   Spake2p Salt

and one of the following:

-   Spake2p Verifier

or

-   path to spake2p generator binary

You can use this same spake2p generator to randomly generate a set of
credentials or generate your a verifier based on the given Passcode, Iteration
count and Salt.

More info on the Spake2p generator and how to build it can be found here
[Spake2p](https://github.com/project-chip/connectedhomeip/blob/master/src/tools/spake2p/README.md)

# How to use `FactoryDataProvider.py`

Using Python 3 call the `FactoryDataProvider` script and provide the needed
arguments. The script will validate the received data and if the device is
connected to the host, write the data in the right nvm3 location.

If the device is not connected, The script will generate an image that can be
flashed to your device at a later time but you must provide the MCU family name.
(EFR32MG24).

If you have more than one device connected to the host. Provide the J-tag serial
number to ensure you are writing to the right device.

| Arguments            | Conformance          | Type               | Description                                                                      |
| -------------------- | -------------------- | ------------------ | -------------------------------------------------------------------------------- |
| --discriminator      | Required             | dec/hex            | Provide BLE pairing discriminator. e.g: 3840 or 0xF00.                           |
| --passcode           | Required             | dec/hex            | Provide the default PASE session passcode used to generate the spake2p verifier. |
| --spake2_iteration   | Required             | dec/hex            | Provide Spake2+ iteration count used to generate the spake2p verifier.           |
| --spake2_salt        | Required             | string<sup>1</sup> | Provide Spake2+ salt used to generate the spake2p verifier.                      |
| --spake2_verifier    | optional<sup>2</sup> | string<sup>1</sup> | Provide The pre-generated Spake2+ verifier.                                      |
| --gen_spake2p_path   | optional<sup>2</sup> | string             | Provide the absolute path to spake2p generator.                                  |
| --mcu_family         | optional             | string             | MCU Family target. Only needed if your board isn't plugged in (EFR32MG24).       |
| --jtag_serial        | optional             | string             | Provide the serial number of the jtag if you have more than one board connected. |
| --product_id         | optional             | dec/hex            | Provide the product ID. e.g: 32773 or 0x8005 (Max 2 bytes).                      |
| --vendor_id          | optional             | dec/hex            | Provide the vendor ID. e.g: 65521 or 0xFFF1 (Max 2 bytes).                       |
| --product_name       | optional             | string             | Provide the product name (Max 32 char).                                          |
| --vendor_name        | optional             | string             | Provide the vendor name (Max 32 char).                                           |
| --hw_version         | optional             | dec/hex            | Provide the hardware version value (Max 2 bytes).                                |
| --hw_version_str     | optional             | string             | Provide the hardware version string (Max 64 char).                               |
| --unique_id          | optional             | Hex string         | A 128 bits hex string unique id (without 0x).                                    |
| --serial_number      | optional             | string             | Provide serial number of the device (Max 32 char).                               |
| --commissioning_flow | optional             | dec/hex            | Provide Commissioning Flow 0=Standard, 1=User Action, 2=Custom.                  |
| --rendezvous_flag    | optional             | dec/hex            | Provide Rendez-vous flag: 1=SoftAP, 2=BLE 4=OnNetwork (Can be combined).         |

<sup>1</sup> Salt and verifier must be provided as base64 string

<sup>2</sup> You need to provide either a pre-generated spake2_verifier or path
to the spake2p generator to generate the verifier

For the hex type, provide the value with the `0x` prefix. For hex string type,
do not add the `0x` prefix.

e.g:

```
 # With spake2_verifier
 python3 FactoryDataProvider.py --passcode 20202021 --discriminator 0xf00 --spake2_iteration 1000 --spake2_salt U1BBS0UyUCBLZXkgU2FsdA== --spake2_verifier uWFwqugDNGiEck/po7KHwwMwwqZgN10XuyBajPGuyzUEV/iree4lOrao5GuwnlQ65CJzbeUB49s31EH+NEkg0JVI5MGCQGMMT/SRPFNRODm3wH/MBiehuFc6FJ/NH6Rmzw==
 # With gen_spake2p_path
 python3 FactoryDataProvider.py --passcode 62034001 --discriminator 0xf01 --spake2_iteration 15000 --spake2_salt 95834coRGvFhCB69IdmJyr5qYIzFgSirw6Ja7g5ySYA= --gen_spake2p_path /Users/GitHub/connectedhomeip/src/tools/spake2p/out/spake2p
```
