#`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 EFR32MG12 or 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.
(EFR32MG12 or 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 (EFR32MG12 or 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
```
