diff --git a/doc/Auth-Specs.md b/doc/Auth-Specs.md
index 4786484..35e27da 100644
--- a/doc/Auth-Specs.md
+++ b/doc/Auth-Specs.md
@@ -77,7 +77,7 @@ Les notification ne sont pas dépendantes des usages mais des types PCD/PRD (pou

-**Note**: Comme la liste des process, c’est une liste en cache fusioné avec les nouvelles liste reçues dans les enveloppes puis repartagé fusionné dans les enveloppes envoyées
+**Note**: Comme la liste des `Process`, c’est une liste en cache fusioné avec les nouvelles liste reçues dans les enveloppes puis repartagé fusionné dans les enveloppes envoyées
### 6.2. Onboarding
@@ -119,9 +119,9 @@ Les `User` doivent pouvoir s'authentifier en utilisant un mot de passe et les do
Le système utilisera les clés cryptographiques de Bitcoin pour une authentification sécurisée via un HD Wallet transparent, intégrant le concept de Silent Payments pour éviter la réutilisation d'adresses. Les annuaires présents par rôles dans les contrats sont des listes d'adresses Silent Payments avec leurs `third parties` (autres device de confirmation des actions en `2FA`).
-Les `User` sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des `User`. Par process, les `User` appelées techniquement `Member`.
+Les `User` sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des `User`. Par `Process`, les `User` appelées techniquement `Member`.
-Chaque relais permet d'accéder à la liste des process, de créer, recomposer (`recover`) et révoquer (`revoke`) un `User`, et de la compléter par `Process` dans lequel l'`User` a un rôle (`onboarding`).
+Chaque relais permet d'accéder à la liste des `Process`, de créer, recomposer (`recover`) et révoquer (`revoke`) un `User`, et de la compléter par `Process` dans lequel l'`User` a un rôle (`onboarding`).
## 8. Connexion via des tiers
@@ -145,6 +145,11 @@ A la création d'un `User`, le SDK génère une clé privée Bitcoin pour les tr
En fonction du `Process` choisi, l'`User` devra remplir un formulaire pour compléter son `Member` avec les champs requis par le `Process`. Ces champs sont définis dans le champs "render_template_list" de l'attribut `metadata_contract_public` du `Item` du `Role` `Member` du `Process`.
+Des types de messages spécifiques sont utilisés au préalable :
+
+* Création d'un `User` : `PRDUserCreate`
+* Récupération de la clé d'un `User` : `PRDUserRecover`
+
Puis l'`User` envoi un `PCD` contenant la liste mise à jour des `Member` complété de son propre `Member`, des autres clés cryptographiques et des shards de sa clé de `spend` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Member` pour leur demander de valider cette nouvelle version de la liste des `Member` (`PCD`).
Optionnellement, l'`User` envoi un `PCD` contenant la liste mise à jour des `Process` complété de son propre `address Silent Payments` dans un ou plusieurs `Role` du `Process` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Process` pour leur demander de valider cette nouvelle version de la liste des `Process` (`PCD`).
@@ -208,7 +213,7 @@ A chaque nouveau message le relai génère de nouvelles addresses pour la clé f
### 13.1. Génération des clés privées
-#### 13.1.1. Gestion de la clé servant à l'ID `spend_recover`
+#### 13.1.1. Gestion de la clé `spend_recover`
La clé privée `spend_recover` est la clé principale qui définit un `User` sur le réseau 4nk.
@@ -230,7 +235,7 @@ Cette clé sera scindée en 2 parties de 128 bits (16B) dont une va être distri
* le mot de passe "hashé"
* `part2_plaintext` est chiffré exactement selon la même procédure que `part1_plaintext` pour produire `part2_ciphertext`
-* une seed de générée aléatoirement répartie par un Shamir Secret Sharing, chiffrée pour chaque partie par le mot de passe et distribuées en 1 pour 1 aux Members actuels du rôle de gestionnaire des Members.
+* une seed de générée aléatoirement répartie par un Shamir Secret Sharing, chiffrée pour chaque partie par le mot de passe et distribuées en 1 pour 1 aux Members actuels du rôle de gestionnaire des `Members`.
Génération d'une `pre-id` qui identifie le `User`, générée par le hash (SHA 256) du mot de passe de l'utilisateur concaténé avec `part1_ciphertext`.
@@ -239,6 +244,7 @@ Génération d'une `pre-id` qui identifie le `User`, générée par le hash (SHA
Une `pre-id` qui identifie l'`User` est générée par le hash (SHA 256) d'un scrypt de la `Part1` et du mot de passe de l'`User`.
Encryption speudo code :
+
```pseudo-code
part1_spend_recover_enc=aes(sha(scrypt((MDP+random_seed1), part1)
part2_spend_recover_enc_shards=sss(aes(SHA256'srcypt(MDP+random_seed2), part2), nMembers, 0.8)
@@ -246,17 +252,19 @@ imageLogin.addExif(part1_spend_recover_enc, random_seed1, random_seed2)
pre_id=sha256(part1_spend_recover_enc, MDP, random_seed)
```
-2. Création d'un `PrdList` par Member (1 shard par Member) par `Prd` cf [PRD-PCD](PRD-PCD-Specs.md PRD-PCD) :
+2. Création d'un `PrdList` par `Member` (1 shard par Member) par `Prd` cf [PRD-PCD](PRD-PCD-Specs.md PRD-PCD) :
#### 13.1.2. Backup de `Part2Enc`
Les relais initialisent le SDK (Wasm) par défaut avec une liste `ProcessList` contenant `Process` choisi.
-Chacun de des managers des Members sera responsable de d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `PrdResponse` en réponse au `PrdList` envoyé.
+Les managers des `Member` du `Process` seront responsables d'associer un `shard` de `Part2Enc` à une `pre-id` lorsqu'ils en recoivent la demande via un `PrdUserCreate`.
+
+Les managers des `Member` du `Process` seront responsables d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `PrdResponse` en réponse au `PrdUserRecover` envoyé.
#### 13.1.3. Onboarding
-### 13.2. Member complété des champs du process sélectionné et mise à jour de la liste des Members du process
+### 13.2. Member complété des champs du process
Le role `Member` de `Process` sélectionné contient un `Item` avec des `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` contenant chacun une `render_template_list` dont le premier élément du tableau est le formulaire de création du `User` pour champs concernés (publiques ou confidentiels ou privés).
@@ -270,9 +278,9 @@ Pour le ou les roles sélectionnés, l'attribut `request_prd_sp_address_list` de
Une fois `Process` complété, il est ajouté à la liste des Members pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Process` du `Process` sélectionné via un `PrdUpdate`.
-### 13.4. Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)
+### 13.4. Réception des Pcd et PrdResponse en tenant compte des mises à jours
-Envoi d'un `PrdList` pour chaque Member de chaque rôle du process sélectionné.
+Envoi d'un `PrdList` pour chaque `Member` de chaque rôle du process sélectionné.
## 14. Clés de révocation (`revoke`)
@@ -288,30 +296,25 @@ L'image `ImageRevoke` contient :
Au moment de l'update de `Member` il est possible de charger des addresses SP de third parties pour lesquelles l'`User` a un rôle dans un `Process`. Ces adresses sont ajoutées avec les labels et éventuellement les empreintes des dispositifs correspondants dans l'objet `Member`.
-Les clés privées associées sont générées lors de l'update d'un Member, à la validation de l'update il est possible de télécharger des images correspondantes (clés + hash du process) dans une interface 2FA.
+Les clés privées associées sont générées lors de l'update d'un `Member`, à la validation de l'update il est possible de télécharger des images correspondantes (clés + hash du process) dans une interface 2FA.
Lorsqu'une transaction est reçue sur l'application de 2FA, celle-ci demande de confirmer ou non. Si il y a une confirmation dans l'interface alors une transaction SP est envoyée au dispositif initial, en dépensant l'UTXO reçue et avec les mêmes Hash dans les outputs que la transaction reçue afin que le dispositif initial puisse collecter les `Prd` concernés.
## 16. Connexions avec un `User` (`recover`)
-Pour recrééer sa clé privée et envoyer un `PrdList` à chaque Member du rôle `Member` du process, il faut réaliser les opérations suivantes :
+Pour recrééer sa clé privée et envoyer un `PrdUserRecover` à chaque `Member` du rôle `Member` du `Process`, il faut réaliser les opérations suivantes :
1. Récupération de Part1Enc en cache
2. Création de la `pre_id` avec le mot de passe
-
-Puis depuis la liste des Members du process, pour chacun des Members :
-
-1. Création de `PrdList` à destination du Member 1.
-2. Création d'une `Envelope` du `PrdList` à destination du Member.
-3. Envoi de la transaction SP de l'`Envelope` du `PrdList` à destination du Member avec la `pre_id`.
-4. Envoi de l'`Envelope` du `PrdList` à destination du Member.
-5. Attente de la validation (`PrdResponse`) du `PrdUpdate`.
-6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PrdResponse`.
- 6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
- 6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_confidential` des `PrdResponse` de chaque Member du `Role` `Member`du `Process`.
- 6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
- 6.4. Concaténation de `Part1` et `Part2`
-7. Réception des flux PCD et PRDResponse des gestionnaires des Members
+3. Création de `PrdUserRecover` à destination des `Member`.
+4. Réception des `PrdResponse` des gestionnaires des `Member` avec les shards.
+5. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PrdResponse`.
+ 5.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
+ 5.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_confidential` des `PrdResponse` de chaque `Member` du `Role` `Member`du `Process`.
+ 5.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
+ 5.4. Concaténation de `Part1` et `Part2`
+6. Création de `PrdList` à destination de tous les `Member` du `Process`.
+7. Réception des flux PCD et PRDResponse des gestionnaires de chaque `Role`
## 17. Exemples de Code
diff --git a/doc/Item-Specs.md b/doc/Item-Specs.md
index 83e7c72..dc6ddd2 100644
--- a/doc/Item-Specs.md
+++ b/doc/Item-Specs.md
@@ -54,7 +54,7 @@ Dans le système 4NK, les items représentent les entités ou les objets appelé
* **uuid**: Identifiant unique de l'item, assurant sa traçabilité et son unicité au sein du système.
* **version**: Numéro de version de l'item, facilitant le suivi des mises à jour et des modifications.
* **hash**: Optionnel, fournit un hash de l'item pour vérifier son intégrité et son authenticité.
-* **item_type**: Catégorie ou type de l'item, tel que Process, Member, Payments, qui détermine son rôle et son utilisation dans le réseau.
+* **item_type**: Catégorie ou type de l'item, tel que `Process`, `Member`, Payments, qui détermine son rôle et son utilisation dans le réseau.
* **name**: Nom ou description de l'item, offrant un moyen de le référencer ou de l'identifier de manière lisible.
* **pagination_number_per_request_pcd**: Détermine comment l'item est paginé ou divisé dans le contexte des Pcd, affectant la manière dont il est présenté ou accessible.
* **metadata**: Comprend MetadataContractPublic, MetadataRoleConfidential, et MetadataPrivate, encapsulant les attributs de l'item selon différents niveaux de confidentialité.
@@ -80,7 +80,7 @@ La richesse et la diversité des métadonnées permettent une personnalisation e
## 6. Process
-* **item**: Base de l'Process, liant les processus aux items spécifiques au sein du système.
+* **item**: Base de l'`Process`, liant les processus aux items spécifiques au sein du système.
* **item_process_public_attribute_group**: Groupe d'attributs publics associés à un processus, définissant les règles, les rôles et les conditions d'exécution du processus.
## 7. Exemples de Code
diff --git a/doc/PRD-PCD-Specs.md b/doc/PRD-PCD-Specs.md
index 3f8ab11..80b5332 100644
--- a/doc/PRD-PCD-Specs.md
+++ b/doc/PRD-PCD-Specs.md
@@ -63,7 +63,10 @@ Voir [_Doc_references.md](_Doc_references.md).
* `PrdMessage`: Envoi de messages publics, confidentiels ou privés. Les `PrdMessage` peuvent répondre les uns aux autres.
* `PrdUpdate`: Demande de mise à jour d'une liste d'`Item` (publiée via un `PCD`), qui sera déchiffrée et validée ou non par des `PrdResponse` en retour.
* `PrdConfirm`: Confirmation de la réception des `Prd` (à l'exception de `PrdConfirm` eux-même).
- * `PrdResponse`: Réponse aux autres types de `Prd` (à l'exception de `PrdConfirm`, et `PrdMessage`).
+ * `PrdResponse`: Réponse aux autres types de `Prd` (à l'exception de `PrdConfirm`, et `PrdMessage`) pour valider ou non l'action demandée via l'attribut `sig_value` et fournir les éléments nécessaires (notamment dans le cas des demandes et réponses des moyens de paiements).
+ * `PrdUserCreate`: Message dédié à la réation d'un `User`.
+ * `PrdUserRecover`: Message dédié à à la récupération d'un `User`.
+
* **Envelope**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
@@ -79,7 +82,7 @@ Voir [_Doc_references.md](_Doc_references.md).
Les `Pcd` sont envoyés à tous les participants connectés sans attente de retour spécifique et ne sont pas associés à une `transaction SP`.
-Les `Prd` sont toujours accompagnés d'une `transaction SP`, transmise dans l'attribut `raw_transaction_list` d'une `Envelope`.
+Les `Prd` sont toujours accompagnés d'une `transaction SP`. Cette `transaction SP` est transmise au relais et aux autres utilisateurs via l'attribut `raw_transaction_list` des `Envelope`.
Les `Prd` sont des demandes d'actions ou des réponses à ces demandes, interagissant de la manière suivante :
@@ -88,6 +91,8 @@ Les `Prd` sont des demandes d'actions ou des réponses à ces demandes, interagi
* `PrdUpdate` : Souvent la première requête d'un workflow, un `PrdUpdate` ne répond pas à un autre `Prd`.
* `PrdConfirm` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm` eux-mêmes).
* `PrdResponse` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm`, `PrdResponse` eux-mêmes). Dans le cas d'une réponse à un `PrdList` ou d'un `PrdUpdate`, le `PrdResponse` doit obligatoirement être accompagné d'un `Pcd`.
+* `PrdUserCreate`: Envoi d'un message à des gestionnaires de membres pour demander la sauvegarde des shards d'un `User` en fonction de sa `preId` , le PrdResponse y répond avec une acception ou non dans l'attribut `sig_value`.
+* `PrdUserRecover`: Envoi d'un message à des gestionnaires de membres pour demander la récupération des shards d'un `User` en fonction de sa `preId`, le PrdResponse y répond avec les shards dans l'attribut `shard_enc_by_sp_shared_secret`
Selon le type de `Prd`, les demandes peuvent s'adresser à tous les Members de `Process`, aux gestionnaires du type d'`Item` concerné ou simplement à l'émetteur, selon :
@@ -95,9 +100,12 @@ Selon le type de `Prd`, les demandes peuvent s'adresser à tous les Members de `
* `PrdMessage` Envoi d'un message à son destinataire .
* `PrdUpdate` : Envoyé aux gestionnaires du type d'`Item` concerné.
* `PrdConfirm` : Envoyé à l'émetteur du `Prd` associé.
-* `PrdResponse`, avec 2 cas de figure :
+* `PrdResponse`, cas de figure :
* Réponse à un `PrdList` : envoyée à l'émetteur du `PrdList`.
* Réponse à un `PrdUpdate` : envoyée à tous les Members et à l'émetteur du `PrdUpdate`.
+ * Réponse à un `PrdResponse` : dans le cas des demandes et réponses des moyens de paiements, de dépôt ou de commit, envoyés par un précédent `PrdResponse`.
+* `PrdUserCreate`: envoyée à tous les `Member` du role `Member` d'un `Process`
+* `PrdUserRecover`: envoyée à tous les `Member` du role `Member` d'un `Process`
Les traitements pour l'envoi des `Prd` varient selon leur type, principalement autour des aspects suivants :
@@ -105,7 +113,7 @@ Les traitements pour l'envoi des `Prd` varient selon leur type, principalement a
* **Notification user** : Nécessité de notifier l'`User` courant, ou non de l'envoi du `Prd`.
* **`transaction SP`: Envoi d'une `transaction SP`, ou non.
* **`Pcd` to send** : Envoi d'un `Pcd` en complément du `Prd`.
-* **`request_type` send to** : Members qui recevront les `transaction SP` et les `PrdMessage` correspondants, avec les clés de déchiffrement pour les champs confidentiels.
+* **`request_type` send to** : les `Member` qui recevront les `transaction SP` et les `PrdMessage` correspondants, avec les clés de déchiffrement pour les champs confidentiels.
* **`Pcd` reply waiting** : Attente d'un `Pcd` en retour, ou non.
* **`PrdResponse` reply waiting** : Attente d'un ou de plusieurs `PrdResponse` en retour, ou non.
* **`PrdConfirm` reply waiting** : Attente d'un `PrdConfirm` en retour, ou non.
@@ -116,9 +124,11 @@ Ce qui est résumé pour l'envoi :
|----------------------|-----------------------------------------------------------------------------------|----------------------------------------|----------------------|-----------------------------------------------------------------|----------------------------|------------------------------------|-----------------------------------|
| `PrdList` | No | Yes | No | all the Members of the `item_name` `Role` into to `Process` | Yes | Yes | Yes |
| `PrdUpdate` | waiting `sig_value` | Yes | Yes | all the Members of all `Role` into to `Process` | No | Yes | Yes |
-| `PrdMessage` | waiting `sig_value` + `message_public`, `message_confidential`, `message_private` | | No | a Member of the `Process` | No | No | |
+| `PrdMessage` | waiting `sig_value` + `message_public`, `message_confidential`, `message_private` | | No | a `Member` of the `Process` | No | No | |
| `PrdResponse` | waiting `sig_value` | Yes | No | See Received | No | No | Yes |
| `PrdConfirm` | (option) Waiting `code_confirm_confidential` | Yes | No | See Received | No | No | No |
+| `PrdUserCreate`|No | Yes | No | No |No |Yes |Yes |
+| `PrdUserRecover`|No | No | No | No |No |Yes |No |
Les traitements pour la réception des `Prd` varient selon leur type, principalement autour des aspects suivants :
@@ -136,7 +146,25 @@ Ce qui est résumé Pour la réception :
| `PrdUpdate` | Prd | Yes | No | all the Members of all `Role` into to `Process` | Yes (other Members) | Yes |
| `PrdMessage` | Waiting `PrdMessage` reply | | No | No | No | No |
| `PrdResponse` | Prd | Yes | No | No | No | No |
-| `PrdConfirm` | Prd | No | No | No | No | No |
+| `PrdConfirm` | Prd | No | No | No | No | No |
+| `PrdUserCreate`|Yes | Yes | No | Yes |No |Yes |
+| `PrdUserRecover`|No | No | No | Yes |No |Yes |
+
+### Envoyer les clés de déchiffrement des PCD dans les PRD
+
+2 cas :
+
+* **Envoi d'un PCD déjà validé**: dans ce cas les `PRDResponse` déjà collectés sont renvoyés, ils contiennent ces clés dans l'attribut `shared_secret_key_enc_by_sp_shared_secret` de son objet `PRD`.
+* **Proposition d'une mise à jour**: dans ce cas le `PRDUpdate` qui accompagne la mise à jour contient ces clés dans l'attribut `shared_secret_key_enc_by_sp_shared_secret` de son objet `PRD`.
+
+De même pour les champs confidentiels des `PRD` dont les clés sont envoyés dans l'attribut `shared_secret_key_enc_by_sp_shared_secret` de leur objet `PRD`.
+
+### Valider un PCD
+
+2 cas :
+
+* **Si la signature est automatique**: alors la validité correspond strictement juste la conformité au `Process` qui ne dépend pas des données
+* **Si la signature n’est pas automatique**: alors la validité sera celle renvoyer par l’utilisateur après contrôle évenutel des données et la conformité au `Process` qui ne dépend pas des données.
## 8. Encryption
@@ -166,6 +194,17 @@ Principaux champs des `Request` contenus dans les `Pcd` et `Prd` chiffrés :
* **`request_prd_origin_hash`** : Hash du `Prd` à l'origine du `Prd`.
* **`item_reference_hash`** : Hash de `Item` auquel le `Pcd` fait référence.
+### Utilisation des hash des PCD et PRD "d'origine"
+
+Il y a 2 cas d’utilisation des hash des PCD et PRD "d'origine" :
+
+* Pour les mises à jour dont on mentionne l'origine c'est à dire la version précendente depuis laquelle la mise à jour a été faite.
+* Pour un message répond un autre, l’autre est dans mentionné avec son hash dans l'attribut.
+
+### Utilisation des hash des PCD, PRD et items "de référence"
+
+Quant l’utilisateur aura besoin des références pour vérifier la data on utilisera les référérences ce qui dépend des cas d’usages.
+
## 9. Fonction des Pcd
Les Portable Contract Documents (`Pcd`) sont des documents au format `JSON` encapsulant des listes versionnées d'`Item`, dont les attributs sont chiffsrés selon trois niveaux de confidentialité : public, par rôles spécifiques, ou privé. (cf. [Specs-Security.md](Specs-Security.md)).
@@ -215,7 +254,7 @@ Principaux champs de la structure `PcdItemEncAttributePrivate` :
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les `Envelope`. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les `Envelope`. Données en clair.
-### 9.1. Schéma des flux
+Schéma des flux :

@@ -324,7 +363,7 @@ Un `PRDList` concerne un seul type d'`Item` parmi `Member`, `Peer`, `Process`, `
Par exemple, à la connexion, on envoie des `PRDList` à chaque `adresse SP` de chaque `Role`, et l'on reçoit chaque liste (`PCD`) à jour pour tous les objets dont les `Member` et les `Process`. Lorsqu'il y a une mise à jour de la liste des `Member` et des `Process` et que l'on est connecté, alors on reçoit à jour ces listes en temps réel; donc, il y a peu de risques d'écarts entre, par exemple, la liste des `Member` et les `adresse sp` dans les `Process`. Une mise à jour est une nouvelle version d'un `PCD` et les `PRDResponse` qui ont répondu au `PRDUpdate` ayant demandé la mise à jour. Les `PRDResponse` permettront de vérifier la conformité de la nouvelle version du `PCD` avec les conditions du `Process`.
-Note : dans les `Process` on ne connait que les `adresse SP` des gestionnaires; pour interagir avec les autres users, il faut utiliser la liste (`PCD`) des `Member` fournie par les `PRDList` envoyés par les gestionnaires de la liste des `Member`. Dans les process, nous n'avons besoin que des `adresse SP` des membres pour vérifier les `PCD` et les `PRDResponse` des `PRDList` et des `PRDUpdate` ou pour envoyer des `PRD` vers spécifiquement des `Member` d'un `Role`. Si dans les interfaces et services on a besoin du détail d'un membre comme son image d'avatar ou son nom, il faudra récupérer ces informations dans la dernière version du `PCD` des `Member`.
+Note : dans les `Process` on ne connait que les `adresse SP` des gestionnaires; pour interagir avec les autres users, il faut utiliser la liste (`PCD`) des `Member` fournie par les `PRDList` envoyés par les gestionnaires de la liste des `Member`. Dans les `Process`, nous n'avons besoin que des `adresse SP` des membres pour vérifier les `PCD` et les `PRDResponse` des `PRDList` et des `PRDUpdate` ou pour envoyer des `PRD` vers spécifiquement des `Member` d'un `Role`. Si dans les interfaces et services on a besoin du détail d'un membre comme son image d'avatar ou son nom, il faudra récupérer ces informations dans la dernière version du `PCD` des `Member`.
Workflow:
@@ -338,12 +377,6 @@ Principaux champs des `PrdList` :
* **`sub_pagination_start`** : Première "page" de résultats dans les items qui contiennent une liste.
* **`sub_pagination_stop`** : Dernière "page" de résultats dans les items qui contiennent une liste.
-Dans le cas d'une création de compte :
-
-* **`item_Member_enc_by_sp_shared_secret`** : Nouvel `Member` temporaire,chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
-
-`Member` temporaire contient les métadonnées de type `Metadata` suivantes :
-
* **`MetadataProcessPublic` de type `MemberPublicAttributeGroup`** :
* **`sp_address_public`** : Adresse publique de l'`User`, chiffré par la `ProcessKey` de `Process`.
@@ -356,16 +389,13 @@ Dans le cas d'une création de compte :
* **`MetadataRoleConfidential` de type `MemberRoleConfidentialAttributeGroup`** :
-* **`shard_confidential`** : Shard de l'`User`, chiffré par la clé `KeyConfidential` d'une `transaction SP`.
-* **`pre_id_confidential`** : Pré empreinte du `User`, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
-
* **`MetadataPrivate` de type `MemberRolePrivateAttributeGroup`** :
* **`priv_key_mainnet_spend`** : Clé de dépense de l'`User`, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_mainnet_scan`** : Clé de scan de l'`User`, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_signet_scan`** : Clé de scan du signet de `recover`de l'`User`, chiffrée `KeyRecover`.
-### 11.1. Schéma des flux
+Schéma des flux :
Pour simplifier, les `PrdConfirm` n'ont pas été inclus dans le schéma.
@@ -377,6 +407,8 @@ Le `PrdMessage` facilite l'envoi d'un message sécurisé entre `User`.
Les `PrdMessage` peuvent répondre aux autres `PrdMessage`.
+**Note**: Ce sont des objects génériques qui servent aux cas d’usages, le plus souvent cette messagerie est utilisée pour négocier les termes des process et des valiation.
+
Workflow :

@@ -384,7 +416,7 @@ Principaux champs des `PrdMessage` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
-### 12.1. Schéma des flux
+Schéma des flux :
Pour simplifier, les `PrdConfirm` n'ont pas été inclus dans le schéma.
@@ -410,7 +442,7 @@ Principaux champs des `PrdUpdate` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
-### 13.1. Schéma des flux
+Schéma des flux :
Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.
@@ -429,7 +461,7 @@ Principaux champs des `PrdConfirm` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
* **`code_confirm_confidential`** : Code de confirmation chiffré par la clé `KeyConfidential` d'une `transaction SP` dans le cas d'un 2FA.
-### 14.1. Schéma des flux
+Schéma des flux :

@@ -451,12 +483,49 @@ Principaux champs des `PrdResponse` :
* **`shared_secret_key_enc_by_sp_shared_secret`** : Clé de chiffrement partagée chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
* **`shard_enc_by_sp_shared_secret`** : Shard chiffré par la clé `KeyConfidential` d'une `transaction SP`.
-### 15.1. Schéma des flux
+Schéma des flux :
Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.

+## PrdUserCreate - Demande de sauvegarde des shards d'un User
+
+Le `PrdUserCreate` est utilisé pour demander la sauvegarde des shards d'un `User` dans le réseau.
+
+Workflow:
+
+
+
+Principaux champs des `PrdUserCreate` :
+
+* **`shard_confidential`** : Shard de l'`User`, chiffré par la clé `KeyConfidential` d'une `transaction SP`.
+* **`pre_id_confidential`** : Pré empreinte du `User`, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
+
+Schéma des flux :
+
+Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.
+
+
+
+## PrdUserRecover - Demande de récupération des shards d'un User
+
+Le `PrdUserRecover` est utilisé pour demander la récupération des shards d'un `User` dans le réseau.
+
+Workflow:
+
+
+
+Principaux champs des `PrdUserRecover` :
+
+* **`pre_id_confidential`** : Pré empreinte du `User`, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
+
+Schéma des flux :
+
+Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.
+
+
+
## 16. Exemples de Code
## 17. Todo
diff --git a/doc/Silent-Payments-Specs.md b/doc/Silent-Payments-Specs.md
index 5b32bf0..2fabd7b 100644
--- a/doc/Silent-Payments-Specs.md
+++ b/doc/Silent-Payments-Specs.md
@@ -80,7 +80,7 @@ Puis il ajoute le tweak data de la transaction Silent Payments, puis il envoie l
Puis le relais relaient les transactions dans le format suivant :
* **raw_tx**: La transaction en hexadécimal
-* **pubkey**: La clé publique du Member qui a envoyé la transaction
+* **pubkey**: La clé publique du `Member` qui a envoyé la transaction
Le même procédé existe pour les blocs :
diff --git a/doc/Specs-Code.md b/doc/Specs-Code.md
index 8bb8b9f..43f8db4 100644
--- a/doc/Specs-Code.md
+++ b/doc/Specs-Code.md
@@ -257,7 +257,7 @@ Les arrêts de la blockchain dans son ensemble n'entraînent pas d'interruption
Les arrêts des Members dans les `Process` dans leur ensemble n'entraînent pas d'interruption de service, les confirmations restent en attente, toujours relayées jusqu'au rétablissement des services. L'arrêt de Members des rôles critiques des `Process` pourrait empêcher le démarrage des services et pour les gestionnaires des Members, l'accès au réseau pour les `User` n'ayant qu'un processus connu avec un rôle dedans. Cela n'entraîne pas une perte des données. Cette incapacité pourrait venir corrompre des signatures attendues dans un délai. Dans ce cas, le rôle "resolve" des `Process` est en charge de l'arbitrage pour la bonne restitution des actions.
-Les parties prenantes ont tous les moyens organisationnels dans les process, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des Members des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
+Les parties prenantes ont tous les moyens organisationnels dans les `Process`, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des Members des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
## 7. Journalisation et monitoring
diff --git a/doc/Specs-Datamodel.md b/doc/Specs-Datamodel.md
index 1a2d899..26c1fa4 100644
--- a/doc/Specs-Datamodel.md
+++ b/doc/Specs-Datamodel.md
@@ -466,9 +466,9 @@ Pseudo-code:
### 5.6. ItemEnum
-* **```Process(Process)```**: Contains an item of type Process, representing a process.
+* **```Process(Process)```**: Contains an item of type `Process`, representing a process.
* **```Peer(Peer)```**: Contains an item of type Peer, representing a peer.
-* **```Member(Member)```**: Contains an item of type Member, representing a Member.
+* **```Member(Member)```**: Contains an item of type `Member`, representing a `Member`.
* **```Payments(Payments)```**: Contains an item of type Payments, representing a Payments.
* **```Deposit(Deposit)```**: Contains an item of type Deposit, representing a deposit.
* **```Artefact(Artefact)```**: Contains an item of type Artefact, representing an artefact.
@@ -1232,6 +1232,7 @@ Pseudo-code:
| Attribute Name | Type | Option |
| -------------------------------------------------------------------------- | ----------------- | ------ |
| `request` | ```Request``` | |
+| `shared_secret_key_enc_by_sp_shared_secret` | ```String``` | Yes |
| `sig_value` | ```String``` | |
| `request_pcd_reference_keys_role_confidential_list_confidential` | ```Vec``` | |
| `request_pcd_origin_hash_keys_role_confidential_list_confidential` | ```Vec``` | |
@@ -1294,7 +1295,6 @@ Pseudo-code:
| Attribute Name | Type | Option |
| ------------------------------------- | ---------------- | ------ |
| `request_prd` | ```Prd``` | |
-| `item_Member_enc_by_sp_shared_secret` | ```String``` | Yes |
| `pagination_start` | ```Number``` | Yes |
| `pagination_stop` | ```Number``` | Yes |
| `sub_pagination_start` | ```Number``` | Yes |
@@ -1305,7 +1305,6 @@ Pseudo-code:
```json
{
"request_prd": Prd,
- "item_Member_enc_by_sp_shared_secret": "",
"pagination_start": 0,
"pagination_stop": 0,
"sub_pagination_start": 0,
@@ -1332,7 +1331,6 @@ Pseudo-code:
| Attribute Name | Type | Option |
| ------------------------------------------- | ---------------- | ------ |
| `request_prd` | ```Prd``` | |
-| `shared_secret_key_enc_by_sp_shared_secret` | ```String``` | Yes |
| `shard_enc_by_sp_shared_secret` | ```String``` | Yes |
Pseudo-code:
@@ -1340,8 +1338,6 @@ Pseudo-code:
```json
{
"request_prd": Prd,
- "sig_value": "",
- "shared_secret_key_enc_by_sp_shared_secret": "",
"shard_enc_by_sp_shared_secret": ""
}
```
@@ -1376,19 +1372,40 @@ Pseudo-code:
}
```
-### 13.6. PrdResponse
+### 13.6. PrdUserCreate
+
| Attribute Name | Type | Option |
| -------------- | ---------------- | ------ |
| `request_prd` | ```Prd``` | |
-| `sig_value` | ```String``` | |
+| `shard_confidential` | ```String``` | |
+| `pre_id_confidential` | ```String``` | |
Pseudo-code:
```json
{
"request_prd": Prd,
- "sig_value": ""
+ "shard_confidential": "",
+ "pre_id_confidential": ""
+}
+```
+
+
+### 13.6. PrdUserRecover
+
+| Attribute Name | Type | Option |
+| -------------- | ---------------- | ------ |
+| `request_prd` | ```Prd``` | |
+| `pre_id_confidential` | ```String``` | |
+
+
+Pseudo-code:
+
+```json
+{
+ "request_prd": Prd,
+ "pre_id_confidential": ""
}
```
@@ -1666,8 +1683,8 @@ Pseudo-code:
```json
{
"role_peer": RolePeer,
- "role_Member": RoleMember,
- "role_process": RoleProcess,
+ "role_Member": Role`Member`,
+ "role_process": Role`Process`,
"role_artefact_list": []
}
```
diff --git a/doc/Specs-Definition.md b/doc/Specs-Definition.md
index 4132d01..bcbd11d 100644
--- a/doc/Specs-Definition.md
+++ b/doc/Specs-Definition.md
@@ -43,6 +43,8 @@ Voir [_Doc_references.md](_Doc_references.md).
* `PrdUpdate`: Demande de mise à jour d'une liste d'`Item` (publiée via un `PCD`), qui sera déchiffrée et validée ou non par des `PrdResponse` en retour.
* `PrdConfirm`: Confirmation de la réception des `Prd` (à l'exception de `PrdConfirm` eux-même).
* `PrdResponse`: Réponse aux autres types de `Prd` (à l'exception de `PrdConfirm` et `PrdResponse`).
+ * `PrdUserCreate`: Message dédié à la réation d'un `User`.
+ * `PrdUserRecover`: Message dédié à à la récupération d'un `User`.
* **Envelope**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
@@ -108,7 +110,7 @@ Cette norme est aujourd'hui utilisée pour le hachage de mot de passe (associé
## 7. Data
-* **Cache**: Partie 1 chiffrée de la clé de dépense du signet du login stockée en cache, ainsi que les `Process` découverts et les pairs du réseau. Une fois identifié auprès des Members d'un `Process` et avec son `User` et ses `Member` par `Process`, l'objet Member et les `Pcd` et `Prd` du compte sont stockés en cache. Le cache se compose d'une partie prive jamais partagée et d'une partie publique partagée.
+* **Cache**: Partie 1 chiffrée de la clé de dépense du signet du login stockée en cache, ainsi que les `Process` découverts et les pairs du réseau. Une fois identifié auprès des Members d'un `Process` et avec son `User` et ses `Member` par `Process`, l'objet `Member` et les `Pcd` et `Prd` du compte sont stockés en cache. Le cache se compose d'une partie prive jamais partagée et d'une partie publique partagée.
* **IndexDB**: Base de données de stockage côté client utilisée pour stocker de manière sécurisée les données chiffrées, telles que les `Pcd` et Prd, dans les navigateurs web.
diff --git a/doc/diagrams/.$Login-Wireframes.drawio.bkp b/doc/diagrams/.$Login-Wireframes.drawio.bkp
new file mode 100644
index 0000000..b18b040
--- /dev/null
+++ b/doc/diagrams/.$Login-Wireframes.drawio.bkp
@@ -0,0 +1,1018 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/.$PRDUserCreate.drawio.bkp b/doc/diagrams/.$PRDUserCreate.drawio.bkp
new file mode 100644
index 0000000..f94a5a4
--- /dev/null
+++ b/doc/diagrams/.$PRDUserCreate.drawio.bkp
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/.$PRDUserCreateFlows.drawio.bkp b/doc/diagrams/.$PRDUserCreateFlows.drawio.bkp
new file mode 100644
index 0000000..4ebca99
--- /dev/null
+++ b/doc/diagrams/.$PRDUserCreateFlows.drawio.bkp
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/.$PRDUserRecoverFlows.drawio.bkp b/doc/diagrams/.$PRDUserRecoverFlows.drawio.bkp
new file mode 100644
index 0000000..02b8c01
--- /dev/null
+++ b/doc/diagrams/.$PRDUserRecoverFlows.drawio.bkp
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/.$PRDUserRecovery.drawio.bkp b/doc/diagrams/.$PRDUserRecovery.drawio.bkp
new file mode 100644
index 0000000..f759e0f
--- /dev/null
+++ b/doc/diagrams/.$PRDUserRecovery.drawio.bkp
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/.$PRDUserRevoverFlows.drawio.bkp b/doc/diagrams/.$PRDUserRevoverFlows.drawio.bkp
new file mode 100644
index 0000000..25245d4
--- /dev/null
+++ b/doc/diagrams/.$PRDUserRevoverFlows.drawio.bkp
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/4NK-CheatSheet.drawio b/doc/diagrams/4NK-CheatSheet.drawio
index 02e5d8b..0a91947 100644
--- a/doc/diagrams/4NK-CheatSheet.drawio
+++ b/doc/diagrams/4NK-CheatSheet.drawio
@@ -1 +1 @@
-
+
diff --git a/doc/diagrams/Login-Wireframes.drawio b/doc/diagrams/Login-Wireframes.drawio
index f8dacee..49c665c 100644
--- a/doc/diagrams/Login-Wireframes.drawio
+++ b/doc/diagrams/Login-Wireframes.drawio
@@ -1,6 +1,6 @@
-
+
-
+
@@ -14,121 +14,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -800,7 +685,8 @@
-
+
+
@@ -811,7 +697,7 @@
-
+
@@ -884,7 +770,7 @@
-
+
@@ -936,82 +822,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/doc/diagrams/Login-Wireframes.png b/doc/diagrams/Login-Wireframes.png
index c617532..af788ac 100644
Binary files a/doc/diagrams/Login-Wireframes.png and b/doc/diagrams/Login-Wireframes.png differ
diff --git a/doc/diagrams/PRDUserCreate.drawio b/doc/diagrams/PRDUserCreate.drawio
new file mode 100644
index 0000000..213b5f8
--- /dev/null
+++ b/doc/diagrams/PRDUserCreate.drawio
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/PRDUserCreate.png b/doc/diagrams/PRDUserCreate.png
new file mode 100644
index 0000000..5943e56
Binary files /dev/null and b/doc/diagrams/PRDUserCreate.png differ
diff --git a/doc/diagrams/PRDUserCreateFlows.drawio b/doc/diagrams/PRDUserCreateFlows.drawio
new file mode 100644
index 0000000..041ce38
--- /dev/null
+++ b/doc/diagrams/PRDUserCreateFlows.drawio
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/PRDUserCreateFlows.png b/doc/diagrams/PRDUserCreateFlows.png
new file mode 100644
index 0000000..40f8a82
Binary files /dev/null and b/doc/diagrams/PRDUserCreateFlows.png differ
diff --git a/doc/diagrams/PRDUserRecoverFlows.drawio b/doc/diagrams/PRDUserRecoverFlows.drawio
new file mode 100644
index 0000000..86bc153
--- /dev/null
+++ b/doc/diagrams/PRDUserRecoverFlows.drawio
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/PRDUserRecoverFlows.png b/doc/diagrams/PRDUserRecoverFlows.png
new file mode 100644
index 0000000..92a14ac
Binary files /dev/null and b/doc/diagrams/PRDUserRecoverFlows.png differ
diff --git a/doc/diagrams/PRDUserRecovery.drawio b/doc/diagrams/PRDUserRecovery.drawio
new file mode 100644
index 0000000..bb00f5d
--- /dev/null
+++ b/doc/diagrams/PRDUserRecovery.drawio
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/PRDUserRecovery.png b/doc/diagrams/PRDUserRecovery.png
new file mode 100644
index 0000000..3c8b1cb
Binary files /dev/null and b/doc/diagrams/PRDUserRecovery.png differ
diff --git a/doc/diagrams/PRDUserRevoverFlows.drawio b/doc/diagrams/PRDUserRevoverFlows.drawio
new file mode 100644
index 0000000..b8b8538
--- /dev/null
+++ b/doc/diagrams/PRDUserRevoverFlows.drawio
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/PRDUserRevoverFlows.png b/doc/diagrams/PRDUserRevoverFlows.png
new file mode 100644
index 0000000..535fefc
Binary files /dev/null and b/doc/diagrams/PRDUserRevoverFlows.png differ
diff --git a/doc/diagrams/WalletCreate.drawio b/doc/diagrams/WalletCreate.drawio
index ab366c0..5840eef 100644
--- a/doc/diagrams/WalletCreate.drawio
+++ b/doc/diagrams/WalletCreate.drawio
@@ -1,6 +1,6 @@
-
+
-
+
@@ -56,7 +56,7 @@
-
+
@@ -64,7 +64,7 @@
-
+
@@ -128,24 +128,12 @@
-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
@@ -158,13 +146,12 @@
-
+
-
+
-
-
-
+
+
@@ -174,14 +161,15 @@
-
+
-
-
-
+
+
+
+
@@ -193,11 +181,12 @@
-
+
-
-
+
+
+
@@ -214,64 +203,68 @@
-
+
-
+
-
+
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -375,41 +368,15 @@
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -432,10 +399,10 @@
-
+
-
-
+
+
@@ -445,102 +412,102 @@
-
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
@@ -555,7 +522,7 @@
-
+
@@ -564,9 +531,9 @@
-
+
-
+
@@ -575,14 +542,15 @@
-
+
+
-
+
@@ -591,7 +559,7 @@
-
+
@@ -607,28 +575,28 @@
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
@@ -637,20 +605,53 @@
-
+
-
+
-
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/diagrams/WalletRecover.drawio b/doc/diagrams/WalletRecover.drawio
index adb8659..d16a9cc 100644
--- a/doc/diagrams/WalletRecover.drawio
+++ b/doc/diagrams/WalletRecover.drawio
@@ -481,7 +481,7 @@
-
+
@@ -556,7 +556,7 @@
-
+