conditions added WIP (doc)

This commit is contained in:
NicolasCantu 2024-02-18 17:32:10 +01:00
parent 82f2a07437
commit 203c8c8dd5
3 changed files with 145 additions and 76 deletions

View File

@ -3,36 +3,36 @@
* 2. [Portée](#Porte) * 2. [Portée](#Porte)
* 3. [3. Documents de référence](#Documentsderfrence) * 3. [3. Documents de référence](#Documentsderfrence)
* 4. [Commun aux `RequestPcd` et RequestPrd](#CommunauxRequestPcdetRequestPrd) * 4. [Commun aux `RequestPcd` et RequestPrd](#CommunauxRequestPcdetRequestPrd)
* 4.1. [Création et envoi](#Crationetenvoi) * 4.1. [Création et envoi](#Crationetenvoi)
* 4.2. [Réception](#Rception) * 4.2. [Réception](#Rception)
* 5. [Fonction des RequestPcd](#FonctiondesRequestPcd) * 5. [Fonction des RequestPcd](#FonctiondesRequestPcd)
* 5.1. [Création et envoi](#Crationetenvoi-1) * 5.1. [Création et envoi](#Crationetenvoi-1)
* 5.2. [Réception](#Rception-1) * 5.2. [Réception](#Rception-1)
* 6. [Fonction des RequestPrd](#FonctiondesRequestPrd) * 6. [Fonction des RequestPrd](#FonctiondesRequestPrd)
* 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles) * 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
* 6.2. [Création et envoi](#Crationetenvoi-1) * 6.2. [Création et envoi](#Crationetenvoi-1)
* 6.3. [Réception](#Rception-1) * 6.3. [Réception](#Rception-1)
* 7. [RequestPrdList - Demande de Listes ( RequestPcd)](#RequestPrdList-DemandedeListesRequestPcd) * 7. [RequestPrdList - Demande de Listes ( RequestPcd)](#RequestPrdList-DemandedeListesRequestPcd)
* 7.1. [Création : Datas spécifiques](#Cration:Datasspcifiques) * 7.1. [Création : Datas spécifiques](#Cration:Datasspcifiques)
* 7.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques) * 7.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques)
* 8. [RequestPrdMessage - Envoi de Messages](#RequestPrdMessage-EnvoideMessages) * 8. [RequestPrdMessage - Envoi de Messages](#RequestPrdMessage-EnvoideMessages)
* 8.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 8.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 8.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 8.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 9. [RequestPrdUpdate - Mises à Jour de RequestPcd](#RequestPrdUpdate-MisesJourdeRequestPcd) * 9. [RequestPrdUpdate - Mises à Jour de RequestPcd](#RequestPrdUpdate-MisesJourdeRequestPcd)
* 9.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 9.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 9.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 9.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 10. [RequestPrdConfirm - Confirmation de Réception](#RequestPrdConfirm-ConfirmationdeRception) * 10. [RequestPrdConfirm - Confirmation de Réception](#RequestPrdConfirm-ConfirmationdeRception)
* 10.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 10.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 10.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 10.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 11. [RequestPrdResponse - Répondre à une Demande](#RequestPrdResponse-RpondreuneDemande) * 11. [RequestPrdResponse - Répondre à une Demande](#RequestPrdResponse-RpondreuneDemande)
* 11.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 11.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 11.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 11.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 12. [RequestPrdKeyBakcup](#RequestPrdKeyBakcup) * 12. [RequestPrdKeyBakcup](#RequestPrdKeyBakcup)
* 12.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 12.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 12.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 12.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 13. [RequestPrdKeyHello - Échange de Clés et d'Identités](#RequestPrdKeyHello-changedeClsetdIdentits) * 13. [RequestPrdKeyHello - Échange de Clés et d'Identités](#RequestPrdKeyHello-changedeClsetdIdentits)
* 13.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1) * 13.1. [Création : Datas spécifiques](#Cration:Datasspcifiques-1)
* 13.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1) * 13.2. [Réception : Datas spécifiques](#Rception:Datasspcifiques-1)
* 14. [Exemples de Code](#ExemplesdeCode) * 14. [Exemples de Code](#ExemplesdeCode)
* 15. [Todo](#Todo) * 15. [Todo](#Todo)
@ -42,21 +42,21 @@
/vscode-markdown-toc-config --> /vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc --># `RequestPrd` et `RequestPcd` - Specs <!-- /vscode-markdown-toc --># `RequestPrd` et `RequestPcd` - Specs
## 1. <a name='Objectif'></a>Objectif ## 1. <a name='Objectif'></a>Objectif
Le but de cette section est d'introduire les Portable Contract Document (`RequestPcd`) et Portable Request Document (`RequestPrd`) comme éléments fondamentaux du système 4NK. Ces documents jouent un rôle crucial dans la sécurisation des échanges de données et la gestion des identités numériques au sein d'un réseau décentralisé. Ils permettent de définir des contrats numériques, de gérer les permissions d'accès, et de faciliter les communications et les opéraations sécurisées entre les différents acteurs du réseau. Le but de cette section est d'introduire les Portable Contract Document (`RequestPcd`) et Portable Request Document (`RequestPrd`) comme éléments fondamentaux du système 4NK. Ces documents jouent un rôle crucial dans la sécurisation des échanges de données et la gestion des identités numériques au sein d'un réseau décentralisé. Ils permettent de définir des contrats numériques, de gérer les permissions d'accès, et de faciliter les communications et les opéraations sécurisées entre les différents acteurs du réseau.
## 2. <a name='Porte'></a>Portée ## 2. <a name='Porte'></a>Portée
La spécification couvre la conception, le développement, et l'application pratique des `RequestPcd` et `RequestPrd`.Elle vise à expliquer leur fonctionnement, leur structure, et la manière dont ils contribuent à l'écosystème 4NK en offrant une méthode sécurisée et efficace pour le partage d'informations et la validation des transactions. Les `RequestPcd` et `RequestPrd` encapsulent les données contractuelles et les requêtes dans un format standardisé, assurant l'intégrité, la confidentialité, l'authenticité et la validation des informations échangées. La spécification couvre la conception, le développement, et l'application pratique des `RequestPcd` et `RequestPrd`.Elle vise à expliquer leur fonctionnement, leur structure, et la manière dont ils contribuent à l'écosystème 4NK en offrant une méthode sécurisée et efficace pour le partage d'informations et la validation des transactions. Les `RequestPcd` et `RequestPrd` encapsulent les données contractuelles et les requêtes dans un format standardisé, assurant l'intégrité, la confidentialité, l'authenticité et la validation des informations échangées.
## 3. <a name='Documentsderfrence'></a>3. Documents de référence ## 3. <a name='Documentsderfrence'></a>3. Documents de référence
Voir [_Doc_references.md](_Doc_references.md). Voir [_Doc_references.md](_Doc_references.md).
## 4. <a name='CommunauxRequestPcdetRequestPrd'></a>Commun aux `RequestPcd` et RequestPrd ## 4. <a name='CommunauxRequestPcdetRequestPrd'></a>Commun aux `RequestPcd` et RequestPrd
### 4.1. <a name='Crationetenvoi'></a>Création et envoi ### 4.1. <a name='Crationetenvoi'></a>Création et envoi
Les `RequestPcd` et les `RequestPrd` sont envoyés sous forme de `message` (JSON) depuis les websockets des relais. Les `RequestPcd` et les `RequestPrd` sont envoyés sous forme de `message` (JSON) depuis les websockets des relais.
@ -64,7 +64,7 @@ Les messages contiennent des `RequestPrd` ou des `RequestPcd` encapsulés dans l
**Création du message et envoi**: voir [Message-SP-Specs.md](Message-SP-Specs.md). **Création du message et envoi**: voir [Message-SP-Specs.md](Message-SP-Specs.md).
### 4.2. <a name='Rception'></a>Réception ### 4.2. <a name='Rception'></a>Réception
Les `RequestPcd` et les `RequestPrd` sont reçus sous forme de `message` (JSON) depuis les websockets des relais. Les `RequestPcd` et les `RequestPrd` sont reçus sous forme de `message` (JSON) depuis les websockets des relais.
@ -82,13 +82,13 @@ En cas de `RequestPcd` ou `RequestPrd` en relation via `RequestPcd_reference_has
Pour les `RequestPcd` et les `RequestPrd` il faut vérifier que le hash du document n'est pas déjà en cas, si c'est le cas, le message est ignoré. Pour les `RequestPcd` et les `RequestPrd` il faut vérifier que le hash du document n'est pas déjà en cas, si c'est le cas, le message est ignoré.
## 5. <a name='FonctiondesRequestPcd'></a>Fonction des RequestPcd ## 5. <a name='FonctiondesRequestPcd'></a>Fonction des RequestPcd
Les Portable Contract Documents ( RequestPcd) sont des documents JSON qui encapsulent les listes versionnées d'`Item` dont les attributs sont chiffrés soit en public, soit en confidentiel par rôles soit en privé (cf. [Specs-Security.md](Specs-Security.md)). Les Portable Contract Documents ( RequestPcd) sont des documents JSON qui encapsulent les listes versionnées d'`Item` dont les attributs sont chiffrés soit en public, soit en confidentiel par rôles soit en privé (cf. [Specs-Security.md](Specs-Security.md)).
Les `Item` ainsi échangés via les `RequestPcd` sont vérifiés par les `RequestPrdResponse` afin de vérifier les validations de ces données et leurs conformités avec les `ItemProcess` et les `members` concernés. Les `Item` ainsi échangés via les `RequestPcd` sont vérifiés par les `RequestPrdResponse` afin de vérifier les validations de ces données et leurs conformités avec les `ItemProcess` et les `members` concernés.
### 5.1. <a name='Crationetenvoi-1'></a>Création et envoi ### 5.1. <a name='Crationetenvoi-1'></a>Création et envoi
La création d'un `RequestPcd` suit plusieurs étapes : La création d'un `RequestPcd` suit plusieurs étapes :
@ -108,7 +108,7 @@ La création d'un `RequestPcd` suit plusieurs étapes :
| `RequestPrdKeyBackup` | No | No | No | all the members of the `SharedProcess` | No | Yes | No | | `RequestPrdKeyBackup` | No | No | No | all the members of the `SharedProcess` | No | Yes | No |
| `RequestPrdKeyHello` | No | Yes | No | all the members of all role into to `ItemProcess` | Yes | Yes | Yes | | `RequestPrdKeyHello` | No | Yes | No | all the members of all role into to `ItemProcess` | Yes | Yes | Yes |
### 5.2. <a name='Rception-1'></a>Réception ### 5.2. <a name='Rception-1'></a>Réception
La réception d'un `RequestPcd` suit plusieurs étapes : La réception d'un `RequestPcd` suit plusieurs étapes :
@ -129,7 +129,7 @@ La réception d'un `RequestPcd` suit plusieurs étapes :
| `RequestPrdKeyBackup` | Info | No | No | reply | No | No | | `RequestPrdKeyBackup` | Info | No | No | reply | No | No |
| `RequestPrdKeyHello` | No | Yes | Yes | reply | No | Yes | | `RequestPrdKeyHello` | No | Yes | Yes | reply | No | Yes |
## 6. <a name='FonctiondesRequestPrd'></a>Fonction des RequestPrd ## 6. <a name='FonctiondesRequestPrd'></a>Fonction des RequestPrd
Les Portable Request Documents ( RequestPrd) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des `RequestPcd` via l'attribut `RequestPcd_keys_role_confidential_list_enc_by_shared_secret`. Ils sont utilisés pour demander des actions spécifiques, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions. Les Portable Request Documents ( RequestPrd) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des `RequestPcd` via l'attribut `RequestPcd_keys_role_confidential_list_enc_by_shared_secret`. Ils sont utilisés pour demander des actions spécifiques, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
@ -137,7 +137,7 @@ Les clés de chiffrement des attributs confidentiels par rôles des `Item` des `
Les `RequestPrd` sont de plusieurs types tels que `RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `RequestPrd` pour différentes actions, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions. Les `RequestPrd` sont de plusieurs types tels que `RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `RequestPrd` pour différentes actions, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
### 6.1. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles ### 6.1. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles
L'attribut `sig_value` permet de donner une valeur aux signatures. Les valeurs des signatures sont définies par rôles dans les `ItemProcess` avec des valeurs valant pour `OK` ou `KO` pour `none` pour les validations des `RequestPrd`. L'attribut `sig_value` permet de donner une valeur aux signatures. Les valeurs des signatures sont définies par rôles dans les `ItemProcess` avec des valeurs valant pour `OK` ou `KO` pour `none` pour les validations des `RequestPrd`.
@ -162,7 +162,7 @@ Les adresses et les roles sont précisés en cas d'utilisateurs ayant plusieurs
Tous les échanges sont complétés de l'empreinte du device de l'emetteur envoyée de façon confidentielle via `device_footprint_enc_by_shared_secret`. Tous les échanges sont complétés de l'empreinte du device de l'emetteur envoyée de façon confidentielle via `device_footprint_enc_by_shared_secret`.
### 6.2. <a name='Crationetenvoi-1'></a>Création et envoi ### 6.2. <a name='Crationetenvoi-1'></a>Création et envoi
La création d'un `RequestPrd` suit plusieurs étapes : La création d'un `RequestPrd` suit plusieurs étapes :
@ -179,7 +179,7 @@ La création d'un `RequestPrd` suit plusieurs étapes :
Voir [Silent-Payment-Specs.md](Silent-Payment-Specs.md). Voir [Silent-Payment-Specs.md](Silent-Payment-Specs.md).
### 6.3. <a name='Rception-1'></a>Réception ### 6.3. <a name='Rception-1'></a>Réception
La réception d'un `RequestPcd` suit plusieurs étapes : La réception d'un `RequestPcd` suit plusieurs étapes :
@ -195,23 +195,23 @@ La réception d'un `RequestPcd` suit plusieurs étapes :
10. Validation des conditions définies dans le `ItemProcess` pour ce d'`Item` avec le `Role` correspondant dans le `ItemProcess` et dans ce rôles les conditions pour ce type de `RequestPrd` (dans l'attribut `request_prd_type`) telles que définies dans [Specs-Process-Roles-Specs.md](Specs-Process-Roles-Specs.md). 10. Validation des conditions définies dans le `ItemProcess` pour ce d'`Item` avec le `Role` correspondant dans le `ItemProcess` et dans ce rôles les conditions pour ce type de `RequestPrd` (dans l'attribut `request_prd_type`) telles que définies dans [Specs-Process-Roles-Specs.md](Specs-Process-Roles-Specs.md).
11. Traitements spécifiques au type de RequestPrd. 11. Traitements spécifiques au type de RequestPrd.
## 7. <a name='RequestPrdList-DemandedeListesRequestPcd'></a>RequestPrdList - Demande de Listes ( RequestPcd) ## 7. <a name='RequestPrdList-DemandedeListesRequestPcd'></a>RequestPrdList - Demande de Listes ( RequestPcd)
Utile pour les utilisateurs cherchant à consulter ou à explorer des listes de contrats, de membres, ou d'autres items dans le résweau. Chaque `RequestPcd` liste des `Item` d'un même type, par exemple les `ItemProcess`, les `ItemMember`, les `ItemPeer`, les `ItemPayment`, etc. Utile pour les utilisateurs cherchant à consulter ou à explorer des listes de contrats, de membres, ou d'autres items dans le résweau. Chaque `RequestPcd` liste des `Item` d'un même type, par exemple les `ItemProcess`, les `ItemMember`, les `ItemPeer`, les `ItemPayment`, etc.
### 7.1. <a name='Cration:Datasspcifiques'></a>Création : Datas spécifiques ### 7.1. <a name='Cration:Datasspcifiques'></a>Création : Datas spécifiques
1. Traitements des `RequestPrd`, avec le `type_request` 1. Traitements des `RequestPrd`, avec le `type_request`
2. Pas de data spécifiques. 2. Pas de data spécifiques.
### 7.2. <a name='Rception:Datasspcifiques'></a>Réception : Datas spécifiques ### 7.2. <a name='Rception:Datasspcifiques'></a>Réception : Datas spécifiques
La réception d'un `RequestPrdList` suit plusieurs étapes : La réception d'un `RequestPrdList` suit plusieurs étapes :
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
2. Recherche en cache de la dernière version de la liste du type d'`Item` concerné (voir `RequestPcd` Création et envoi vers l'émetteur du `RequestPrdList`) 2. Recherche en cache de la dernière version de la liste du type d'`Item` concerné (voir `RequestPcd` Création et envoi vers l'émetteur du `RequestPrdList`)
## 8. <a name='RequestPrdMessage-EnvoideMessages'></a>RequestPrdMessage - Envoi de Messages ## 8. <a name='RequestPrdMessage-EnvoideMessages'></a>RequestPrdMessage - Envoi de Messages
Le `RequestPrdMessage` facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats. Le `RequestPrdMessage` facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats.
@ -220,18 +220,18 @@ Permet la communication :
* directe et sécurisée au sein du réseau, supportant des échanges d'informations critiques ou des notifications entre parties. * directe et sécurisée au sein du réseau, supportant des échanges d'informations critiques ou des notifications entre parties.
* des`transaction SP` au format `raw` dans l'attribut `raw_transaction_list` pour la publication de la transaction dans la side chain. * des`transaction SP` au format `raw` dans l'attribut `raw_transaction_list` pour la publication de la transaction dans la side chain.
Les `RequestPrdMessage` répondent aux `RequestPrdMessage` sauf en cas d'envoi de `raw_transaction_list ` (cas d'utilisation du afin de transaférer la `transaction SP` d'un autre `RequestPrd`). Les `RequestPrdMessage` répondent aux `RequestPrdMessage` sauf en cas d'envoi de `raw_transaction_list` (cas d'utilisation du afin de transaférer la `transaction SP` d'un autre `RequestPrd`).
### 8.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 8.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des `RequestPrd`, avec le `type_request` spécifique à `RequestPrdMessage` 1. Traitements des `RequestPrd`, avec le `type_request` spécifique à `RequestPrdMessage`
2. Cas de la transmission d'une `Transaction SP` d'un autre vRequestPrd` au format `raw` dans l'attribut `raw_transaction_list` pour la publication de la transaction dans la side chain. 2. Cas de la transmission d'une `Transaction SP` d'un autre vRequestPrd` au format `raw` dans l'attribut `raw_transaction_list` pour la publication de la transaction dans la side chain.
### 8.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 8.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
## 9. <a name='RequestPrdUpdate-MisesJourdeRequestPcd'></a>RequestPrdUpdate - Mises à Jour de RequestPcd ## 9. <a name='RequestPrdUpdate-MisesJourdeRequestPcd'></a>RequestPrdUpdate - Mises à Jour de RequestPcd
`RequestPrdUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `RequestPcd`. `RequestPrdUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `RequestPcd`.
@ -243,19 +243,19 @@ Par exemple, mettre à jour la liste des membres permet d'ajouter de nouveaux ut
Les `RequestPrdUpdate` signalent au réseau via l'attribut `RequestPcd_new_version_hash` les nouvelles version des RequestPcd. Les `RequestPrdUpdate` signalent au réseau via l'attribut `RequestPcd_new_version_hash` les nouvelles version des RequestPcd.
### 9.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 9.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des `RequestPrd`, avec le `type_request` spécifique à `RequestPrdUpdate` 1. Traitements des `RequestPrd`, avec le `type_request` spécifique à `RequestPrdUpdate`
2. Pas de data spécifiques. 2. Pas de data spécifiques.
### 9.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 9.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
La réception d'un `RequestPrdUpdate` suit plusieurs étapes : La réception d'un `RequestPrdUpdate` suit plusieurs étapes :
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
2. Comparaison de la dernirère version du `RequestPcd` en cache et de nouvelle version du `RequestPcd` associé via `RequestPcd_new_version_hash` et attente si nécessaire. 2. Comparaison de la dernirère version du `RequestPcd` en cache et de nouvelle version du `RequestPcd` associé via `RequestPcd_new_version_hash` et attente si nécessaire.
## 10. <a name='RequestPrdConfirm-ConfirmationdeRception'></a>RequestPrdConfirm - Confirmation de Réception ## 10. <a name='RequestPrdConfirm-ConfirmationdeRception'></a>RequestPrdConfirm - Confirmation de Réception
Le `RequestPrdConfirm` est utilisé pour confirmer la réception et le traitement de demandes ou de transactions, jouant un rôle crucial dans la validation des actions au sein du réseau. Le `RequestPrdConfirm` est utilisé pour confirmer la réception et le traitement de demandes ou de transactions, jouant un rôle crucial dans la validation des actions au sein du réseau.
@ -263,17 +263,17 @@ Les `RequestPrdList`, `RequestPrdUpdate`, `RequestPrdMessage`, `RequestPrdRespon
`code_confirm_enc_by_shared_secret`: Un code de confirmation chiffré qui valide l'authenticité et l'intégrité de la réponse, assurant que la confirmation est sécurisée et provient de la source attendue. Dans ce cas un output spécifique chiffré par la clé `KeyConfidential` précise ce code, à confirmer dans le RequestPrdConfirm. `code_confirm_enc_by_shared_secret`: Un code de confirmation chiffré qui valide l'authenticité et l'intégrité de la réponse, assurant que la confirmation est sécurisée et provient de la source attendue. Dans ce cas un output spécifique chiffré par la clé `KeyConfidential` précise ce code, à confirmer dans le RequestPrdConfirm.
### 10.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 10.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdConfirm` 1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdConfirm`
2. Communication éventuelle d'un `code_confirm_enc_by_shared_secret` à confirmer dans le `RequestPrdConfirm`. 2. Communication éventuelle d'un `code_confirm_enc_by_shared_secret` à confirmer dans le `RequestPrdConfirm`.
### 10.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 10.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
1. Traitements des `RequestPrd`, pas de traitement suppplémentaire. 1. Traitements des `RequestPrd`, pas de traitement suppplémentaire.
2. Vérification du `code_confirm_enc_by_shared_secret` dans le `RequestPrdConfirm` reçu. 2. Vérification du `code_confirm_enc_by_shared_secret` dans le `RequestPrdConfirm` reçu.
## 11. <a name='RequestPrdResponse-RpondreuneDemande'></a>RequestPrdResponse - Répondre à une Demande ## 11. <a name='RequestPrdResponse-RpondreuneDemande'></a>RequestPrdResponse - Répondre à une Demande
Le `RequestPrdResponse` permet de répondre spécifiquement à des `RequestPrd` reçus, facilitant un échange interactif d'informations ou de décisions entre les parties. Le `RequestPrdResponse` permet de répondre spécifiquement à des `RequestPrd` reçus, facilitant un échange interactif d'informations ou de décisions entre les parties.
@ -283,57 +283,57 @@ Utilisé pour fournir des feedbacks, des confirmations, ou des instructions supp
Aussi le moyen de demander des moyens de paiement ou de dépot ou de preuve, puis de partager le payload de ces actions. Aussi le moyen de demander des moyens de paiement ou de dépot ou de preuve, puis de partager le payload de ces actions.
### 11.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 11.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdResponse` 1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdResponse`
2. Attente de la valeur de la signature de l'utilisateur `sig_value` (si non automatique) 2. Attente de la valeur de la signature de l'utilisateur `sig_value` (si non automatique)
3. En cas de réponse à `RequestPrdKeyBackup` :`pre_id_enc_by_sp_shared_secret` avec les shards correspondants à la `pre-id` demandée. 3. En cas de réponse à `RequestPrdKeyBackup` :`pre_id_enc_by_sp_shared_secret` avec les shards correspondants à la `pre-id` demandée.
4. (option) `shared_secret_key` paratage d'une clé de chiffrement ad'hoc 4. (option) `shared_secret_key` paratage d'une clé de chiffrement ad'hoc
### 11.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 11.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
2. Vérification des conditions de validation des RequestPcd associés. 2. Vérification des conditions de validation des RequestPcd associés.
3. En cas de réponse reçue à `RequestPrdKeyBackup` : Récupération des shards correspondants à la `pre-id` demandée et génération de la clé `KeyRecover` 3. En cas de réponse reçue à `RequestPrdKeyBackup` : Récupération des shards correspondants à la `pre-id` demandée et génération de la clé `KeyRecover`
## 12. <a name='RequestPrdKeyBakcup'></a>RequestPrdKeyBakcup ## 12. <a name='RequestPrdKeyBakcup'></a>RequestPrdKeyBakcup
Le RequestPrdKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` . Le RequestPrdKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` .
### 12.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 12.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdKeyBakcup` 1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdKeyBakcup`
2. Voir [Auth-Specs.md](Auth-Specs.md) pour la création des shards et de la pre_id 2. Voir [Auth-Specs.md](Auth-Specs.md) pour la création des shards et de la pre_id
2.1. Mise à jour de `pre_id_enc_by_sp_shared_secret` 2.1. Mise à jour de `pre_id_enc_by_sp_shared_secret`
2.2. Mise à jour de `shard_enc_by_sp_shared_secret` 2.2. Mise à jour de `shard_enc_by_sp_shared_secret`
### 12.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 12.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
2. Voir [Auth-Specs.md](Auth-Specs.md) 2. Voir [Auth-Specs.md](Auth-Specs.md)
2.1. Si `pre_id_enc_by_sp_shared_secret` n'existe pas encore : enregistrement en cache du shard et de la `pre_id`. 2.1. Si `pre_id_enc_by_sp_shared_secret` n'existe pas encore : enregistrement en cache du shard et de la `pre_id`.
2.2. Si `pre_id_enc_by_sp_shared_secret` existe déjà : vérification de la transaction SP qui doit venir de l'adresse SP de recovery du membre, et donc mise jour du shard et de la `pre_id`. 2.2. Si `pre_id_enc_by_sp_shared_secret` existe déjà : vérification de la transaction SP qui doit venir de l'adresse SP de recovery du membre, et donc mise jour du shard et de la `pre_id`.
## 13. <a name='RequestPrdKeyHello-changedeClsetdIdentits'></a>RequestPrdKeyHello - Échange de Clés et d'Identités ## 13. <a name='RequestPrdKeyHello-changedeClsetdIdentits'></a>RequestPrdKeyHello - Échange de Clés et d'Identités
RequestPrdKeyHello est conçu pour initier ou répondre à des demandes d'échange de clés ou d'informations d'identité, essentiel pour la gestion sécurisée des accès et des identités au sein du réseau. RequestPrdKeyHello est conçu pour initier ou répondre à des demandes d'échange de clés ou d'informations d'identité, essentiel pour la gestion sécurisée des accès et des identités au sein du réseau.
Important pour les processus d'onboarding de nouveaux membres, de réinitialisation des accès, ou de renouvellement des clés, facilitant une intégration sécurisée et la mise à jour des identités dans le réseau. Important pour les processus d'onboarding de nouveaux membres, de réinitialisation des accès, ou de renouvellement des clés, facilitant une intégration sécurisée et la mise à jour des identités dans le réseau.
### 13.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques ### 13.1. <a name='Cration:Datasspcifiques-1'></a>Création : Datas spécifiques
1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdKeyHello` 1. Traitements des RequestPrd, avec le `type_request` spécifique à `RequestPrdKeyHello`
2. Voir [Auth-Specs.md](Auth-Specs.md) pour ma mise à jour de `pre_id_enc_by_sp_shared_secret` 2. Voir [Auth-Specs.md](Auth-Specs.md) pour ma mise à jour de `pre_id_enc_by_sp_shared_secret`
### 13.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques ### 13.2. <a name='Rception:Datasspcifiques-1'></a>Réception : Datas spécifiques
1. Traitements des `RequestPrd` 1. Traitements des `RequestPrd`
2. Voir [Auth-Specs.md](Auth-Specs.md) 2. Voir [Auth-Specs.md](Auth-Specs.md)
1. Renvoi des shards dans le champs le `shard_enc_by_sp_shared_secret` du `RequestPrdResponse` à envoyer 1. Renvoi des shards dans le champs le `shard_enc_by_sp_shared_secret` du `RequestPrdResponse` à envoyer
2. Envoi des `RequestPcd` relatif au role de l'utilisateur dans le `ItemProcess` et des `RequestPcd` avec l`item_name` égal à "process" en cache 2. Envoi des `RequestPcd` relatif au role de l'utilisateur dans le `ItemProcess` et des `RequestPcd` avec l`item_name` égal à "process" en cache
## 14. <a name='ExemplesdeCode'></a>Exemples de Code ## 14. <a name='ExemplesdeCode'></a>Exemples de Code
## 15. <a name='Todo'></a>Todo ## 15. <a name='Todo'></a>Todo
* [ ] Diagrammes de séquences * [ ] Diagrammes de séquences

View File

@ -141,6 +141,75 @@ La structure MetaData et ses sous-structures comme MetadataContractPublic, Metad
L'ItemProcess et ItemProcessPublicAttributeGroup offrent un cadre pour l'intégration et l'orchestration des processus dans le système 4NK, permettant la définition, la gestion et l'exécution de workflows complexes de manière sécurisée et efficace. L'ItemProcess et ItemProcessPublicAttributeGroup offrent un cadre pour l'intégration et l'orchestration des processus dans le système 4NK, permettant la définition, la gestion et l'exécution de workflows complexes de manière sécurisée et efficace.
## Condition RequestPrdAddressSet
`request_prd_type`
`from_role`
`request_prd_sp_address_list`
`request_prd_sp_address_required_list`
`request_prd_sp_address_quota`
`request_prd_request_prd_value_ok_list`
`request_prd_value_ko_list`
`request_prd_value_none_list`
`request_prd_sp_address_value_min`
`request_prd_sp_address_value_min_per`
`request_prd_sp_address_value_min_ok`
`request_prd_sp_adddress_value_ok_min_per`
`request_prd_sp_address_value_ok_max`
`request_prd_sp_adderss_value_ko_max_per`
`request_prd_sp_address_value_none_max`
`request_prd_sp_adderss_value_none_max_per`
`request_prd_sp_address_score_min`
`request_prd_sp_address_score_min_min_required`
`request_prd_sp_address_score_min_min_ok`
`request_prd_sp_address_score_min_min_per`
`request_prd_value_auto_ok`
`request_prd_value_auto_ko`
`request_prd_value_auto_none`
## ConditionPublish : conditions de publication
`request_prd_type`
`request_pcd_data_size_max_unit`
`request_pcd_data_size_max_total`
`request_pcd_number_min`
`request_pcd_number_max`
`request_pcd_amount_max_total`
`Amount`
`request_prd_waiting_timeout`
`request_pcd_waiting_timeout`
## ConditionPayment : conditions de paiement
`request_prd_type`
`payment_amount`
`payment_method`
`role_transaction`
## ConditionCommitment : conditions d'engagement
`request_prd_type`
`role_artefact`
`role_transaction`
## ConditionDeposit : conditions de dépôt de garantie
`request_prd_type`
`role_deposit`
`role_transaction`
## ConditionOrchestration : conditions d'orchestration des processus
`request_prd_type`
`role_ok`
`role_ko`
## ConditionCap : Conditions de passage d'un seuil minimum de paiements ou de déposits ou de d'engagement
`request_prd_type`
`role_deposit`
`role_transaction`
## 9. <a name='ExemplesdeCode'></a>Exemples de Code ## 9. <a name='ExemplesdeCode'></a>Exemples de Code
## 10. <a name='Todo'></a>Todo ## 10. <a name='Todo'></a>Todo

View File

@ -74,15 +74,15 @@
* 11.2.5. [ConditionPayment](#ConditionPayment) * 11.2.5. [ConditionPayment](#ConditionPayment)
* 11.2.6. [Condition RequestPrdAddressSet](#ConditionRequestPrdAddressSet) * 11.2.6. [Condition RequestPrdAddressSet](#ConditionRequestPrdAddressSet)
* 11.2.7. [ConditionPublish](#ConditionPublish) * 11.2.7. [ConditionPublish](#ConditionPublish)
* 11.2.8. [RolesGroup](#RolesGroup) * 11.3. [RolesGroup](#RolesGroup)
* 11.2.9. [RoleArtefact](#RoleArtefact) * 11.3.1. [RoleArtefact](#RoleArtefact)
* 11.2.10. [RoleDeposit](#RoleDeposit) * 11.3.2. [RoleDeposit](#RoleDeposit)
* 11.2.11. [RoleCommitment](#RoleCommitment) * 11.3.3. [RoleCommitment](#RoleCommitment)
* 11.2.12. [RoleMember](#RoleMember) * 11.3.4. [RoleMember](#RoleMember)
* 11.3. [RolePeer](#RolePeer) * 11.4. [RolePeer](#RolePeer)
* 11.3.1. [RolePayment](#RolePayment) * 11.4.1. [RolePayment](#RolePayment)
* 11.3.2. [RoleProcess](#RoleProcess) * 11.4.2. [RoleProcess](#RoleProcess)
* 11.4. [TransactionMode](#TransactionMode) * 11.5. [TransactionMode](#TransactionMode)
* 12. [12. Rust considerations](#Rustconsiderations) * 12. [12. Rust considerations](#Rustconsiderations)
* 12.1. [General Implications for Project Objects](#GeneralImplicationsforProjectObjects) * 12.1. [General Implications for Project Objects](#GeneralImplicationsforProjectObjects)
* 12.2. [Debug](#Debug) * 12.2. [Debug](#Debug)
@ -899,7 +899,7 @@ Condition `request_prdAddressSet` involves complex conditions based on RequestPr
| `request_prd_waiting_timeout` | ```u64``` | | The waiting timeout for a publication to be considered valid. | | `request_prd_waiting_timeout` | ```u64``` | | The waiting timeout for a publication to be considered valid. |
| `request_pcd_waiting_timeout` | ```u64``` | | The waiting timeout for the condition to be considered met. | | `request_pcd_waiting_timeout` | ```u64``` | | The waiting timeout for the condition to be considered met. |
#### 11.2.8. <a name='RolesGroup'></a>RolesGroup ### 11.3. <a name='RolesGroup'></a>RolesGroup
RolesGroup outlines a collection of roles. RolesGroup outlines a collection of roles.
@ -910,7 +910,7 @@ RolesGroup outlines a collection of roles.
| `role_process` | ```String``` | | Represents the entities charged with defining and managing processes within the system. | | `role_process` | ```String``` | | Represents the entities charged with defining and managing processes within the system. |
| `role_artefact_list` | ```Vec<String>``` | | A list of artefact roles, allowing customization and extension of functionalities and interactions beyond standard roles. | | `role_artefact_list` | ```Vec<String>``` | | A list of artefact roles, allowing customization and extension of functionalities and interactions beyond standard roles. |
#### 11.2.9. <a name='RoleArtefact'></a>RoleArtefact #### 11.3.1. <a name='RoleArtefact'></a>RoleArtefact
The `RoleArtefact` struct is utilized to define the role associated with artefacts within the system. It specifies the responsibilities and permissions tied to the handling, management, or interaction with artefacts, ensuring clarity in role-based actions and access controls related to artefact-related operations. The `RoleArtefact` struct is utilized to define the role associated with artefacts within the system. It specifies the responsibilities and permissions tied to the handling, management, or interaction with artefacts, ensuring clarity in role-based actions and access controls related to artefact-related operations.
@ -919,7 +919,7 @@ The `RoleArtefact` struct is utilized to define the role associated with artefac
| `item_name` | ```String``` | | The name of the item associated with the deposit. | | `item_name` | ```String``` | | The name of the item associated with the deposit. |
| `role` | ```Role``` | | The role associated with this deposit. | | `role` | ```Role``` | | The role associated with this deposit. |
#### 11.2.10. <a name='RoleDeposit'></a>RoleDeposit #### 11.3.2. <a name='RoleDeposit'></a>RoleDeposit
`RoleDeposit` outlines the role and responsibilities concerning deposits in the system. It identifies the specific obligations and permissions granted to entities managing or engaging with deposit transactions, providing a structured approach to deposit management and execution. `RoleDeposit` outlines the role and responsibilities concerning deposits in the system. It identifies the specific obligations and permissions granted to entities managing or engaging with deposit transactions, providing a structured approach to deposit management and execution.
@ -928,7 +928,7 @@ The `RoleArtefact` struct is utilized to define the role associated with artefac
| `item_name` | ```String``` | | The name of the item associated with the artefact. | | `item_name` | ```String``` | | The name of the item associated with the artefact. |
| `role` | ```Role``` | | The role associated with this artefact. | | `role` | ```Role``` | | The role associated with this artefact. |
#### 11.2.11. <a name='RoleCommitment'></a>RoleCommitment #### 11.3.3. <a name='RoleCommitment'></a>RoleCommitment
The `RoleCommitment` struct details the role associated with commitments, delineating the duties and authorities of entities tasked with creating, managing, or fulfilling commitments. This struct ensures that commitment-related activities are clearly defined and regulated within the system. The `RoleCommitment` struct details the role associated with commitments, delineating the duties and authorities of entities tasked with creating, managing, or fulfilling commitments. This struct ensures that commitment-related activities are clearly defined and regulated within the system.
@ -937,7 +937,7 @@ The `RoleCommitment` struct details the role associated with commitments, deline
| `item_name` | ```String``` | | The name of the item associated with the commitment. | | `item_name` | ```String``` | | The name of the item associated with the commitment. |
| `role` | ```Role``` | | The role associated with this commitment. | | `role` | ```Role``` | | The role associated with this commitment. |
#### 11.2.12. <a name='RoleMember'></a>RoleMember #### 11.3.4. <a name='RoleMember'></a>RoleMember
`RoleMember` defines the role of members within the system, specifying the rights and responsibilities of membership. This includes access to resources, participation in processes, and contributions to decision-making, highlighting the importance of members in the system's ecosystem. `RoleMember` defines the role of members within the system, specifying the rights and responsibilities of membership. This includes access to resources, participation in processes, and contributions to decision-making, highlighting the importance of members in the system's ecosystem.
@ -946,7 +946,7 @@ The `RoleCommitment` struct details the role associated with commitments, deline
| `item_name` | ```String``` | | The name of the item associated with the member. | | `item_name` | ```String``` | | The name of the item associated with the member. |
| `role` | ```Role``` | | The role associated with this member. | | `role` | ```Role``` | | The role associated with this member. |
### 11.3. <a name='RolePeer'></a>RolePeer ### 11.4. <a name='RolePeer'></a>RolePeer
The `RolePeer` struct identifies peers associated with specific roles, detailing their identifiers, associated peers, and metadata, essential for defining peer responsibilities and permissions within the networked environment. The `RolePeer` struct identifies peers associated with specific roles, detailing their identifiers, associated peers, and metadata, essential for defining peer responsibilities and permissions within the networked environment.
@ -955,7 +955,7 @@ The `RolePeer` struct identifies peers associated with specific roles, detailing
| `item_name` | ```String``` | | The name of the item associated with the peer. | | `item_name` | ```String``` | | The name of the item associated with the peer. |
| `role` | ```Role``` | | The role associated with this peer. | | `role` | ```Role``` | | The role associated with this peer. |
#### 11.3.1. <a name='RolePayment'></a>RolePayment #### 11.4.1. <a name='RolePayment'></a>RolePayment
The `RolePayment` struct is dedicated to defining the role related to payments, outlining the specific tasks, permissions, and responsibilities assigned to entities handling or involved in payment transactions, ensuring secure and orderly payment processes. The `RolePayment` struct is dedicated to defining the role related to payments, outlining the specific tasks, permissions, and responsibilities assigned to entities handling or involved in payment transactions, ensuring secure and orderly payment processes.
@ -964,7 +964,7 @@ The `RolePayment` struct is dedicated to defining the role related to payments,
| `item_name` | ```String``` | | The name of the item associated with the payment. | | `item_name` | ```String``` | | The name of the item associated with the payment. |
| `role` | ```Role``` | | The role associated with this payment. | | `role` | ```Role``` | | The role associated with this payment. |
#### 11.3.2. <a name='RoleProcess'></a>RoleProcess #### 11.4.2. <a name='RoleProcess'></a>RoleProcess
`RoleProcess` describes the role associated with processes within the system. It specifies the expectations, duties, and permissions of entities that initiate, manage, or participate in various system processes, facilitating smooth and regulated process flow. `RoleProcess` describes the role associated with processes within the system. It specifies the expectations, duties, and permissions of entities that initiate, manage, or participate in various system processes, facilitating smooth and regulated process flow.
@ -973,7 +973,7 @@ The `RolePayment` struct is dedicated to defining the role related to payments,
| `item_name` | ```String``` | | The name of the item associated with the process. | | `item_name` | ```String``` | | The name of the item associated with the process. |
| `role` | ```Role``` | | The role associated with this process. | | `role` | ```Role``` | | The role associated with this process. |
### 11.4. <a name='TransactionMode'></a>TransactionMode ### 11.5. <a name='TransactionMode'></a>TransactionMode
`TransactionMode` and its specific types (Distribution, Direct) describe how transactions are handled within the system, whether through direct communication or distributed across multiple entities, influencing the flow and security of transactions. `TransactionMode` and its specific types (Distribution, Direct) describe how transactions are handled within the system, whether through direct communication or distributed across multiple entities, influencing the flow and security of transactions.