fix PCD & PRD vs RequestPCD & RequestPRD (doc)

This commit is contained in:
NicolasCantu 2024-02-16 12:43:14 +01:00
parent 96494372ba
commit cae369e5d3
12 changed files with 422 additions and 386 deletions

View File

@ -55,7 +55,7 @@ Pour cela, les flux de 4NK agissent en "proxy" transparent devant les flux API d
En cas d'oubli de mot de passe, les utilisateurs pourront récupérer leur accès depuis une nouvelle identité (`recover`) après avoir révoqué l'ancienne identité, via un processus sécurisé, impliquant une vérification d'identité et l'échange de secrets chiffrés conformément aux protocoles établis. En cas d'oubli de mot de passe, les utilisateurs pourront récupérer leur accès depuis une nouvelle identité (`recover`) après avoir révoqué l'ancienne identité, via un processus sécurisé, impliquant une vérification d'identité et l'échange de secrets chiffrés conformément aux protocoles établis.
Une image de révocation est générée à la création d'une identité pour pouvoir dépenser un UTXO dit alors de révocation, avec les flux PCD et PRD correspondants. Une image de révocation est générée à la création d'une identité pour pouvoir dépenser un UTXO dit alors de révocation, avec les flux RequestPCD et RequestPRD correspondants.
## 7. <a name='Gestiondesessionbasesuruncache'></a>Gestion de session basée sur un cache ## 7. <a name='Gestiondesessionbasesuruncache'></a>Gestion de session basée sur un cache
@ -138,7 +138,7 @@ Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Vo
2. Une `pre-id Part1EncHash` qui identifie l'utilisateur est générée par le hash (SHA 256) de la `Part1` et du mot de passe de l'utilisateur. 2. Une `pre-id Part1EncHash` qui identifie l'utilisateur est générée par le hash (SHA 256) de la `Part1` et du mot de passe de l'utilisateur.
3. Création d'un `PRDKeyBackup` par membre (1 shard par membre), par PRD : 3. Création d'un `RequestPRDKeyBackup` par membre (1 shard par membre), par RequestPRD :
3.1. Génération d'une clé de chiffrement dite `sp_shared_secret` qui sera transmise dans le Diffie-Hellman de la transaction SP. 3.1. Génération d'une clé de chiffrement dite `sp_shared_secret` qui sera transmise dans le Diffie-Hellman de la transaction SP.
@ -148,7 +148,7 @@ Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Vo
3.4. Définition de l'attribut `shard_enc_by_sp_shared_secret` et chiffrement avec `sp_shared_secret`. 3.4. Définition de l'attribut `shard_enc_by_sp_shared_secret` et chiffrement avec `sp_shared_secret`.
4. Création des messages de type `Message` correspondant aux PRD, envoi des messages aux relais connectés. 4. Création des messages de type `Message` correspondant aux RequestPRD, envoi des messages aux relais connectés.
Dans l'ordre on réalise donc les opérations suivantes donc : Dans l'ordre on réalise donc les opérations suivantes donc :
@ -163,18 +163,18 @@ Dans l'ordre on réalise donc les opérations suivantes donc :
Les relais initialisent le SDK (Wasm) par défaut avec une liste `SharedProcessList` de `SharedProcess` contenant les membres du rôle `member` du `process` choisi. Les relais initialisent le SDK (Wasm) par défaut avec une liste `SharedProcessList` de `SharedProcess` contenant les membres du rôle `member` du `process` choisi.
Chacun de ses membres sera responsable de d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `PRDResponse` en réponse à un `PRDKeyBackup`. Chacun de ses membres sera responsable de d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `RequestPRDResponse` en réponse à un `RequestPRDKeyBackup`.
Dans l'ordre on réalise donc les opérations suivantes pour chaque membres : Dans l'ordre on réalise donc les opérations suivantes pour chaque membres :
1. Création de `PRDKeyBackup` à destination du membre 1. Création de `RequestPRDKeyBackup` à destination du membre
2. Création de `Message` du `PRDKeyBackup` à destination du membre. 2. Création de `Message` du `RequestPRDKeyBackup` à destination du membre.
3. Envoi de la transaction SP du `Message` du `PRDKeyBackup` à destination du membre. 3. Envoi de la transaction SP du `Message` du `RequestPRDKeyBackup` à destination du membre.
4. Envoi du `Message` du `PRDKeyBackup` à destination du membre. 4. Envoi du `Message` du `RequestPRDKeyBackup` à destination du membre.
5. Atttente de la réception des `PRDResponse` en réponse aux `PRDKeyBackup` (confirmations). 5. Atttente de la réception des `RequestPRDResponse` en réponse aux `RequestPRDKeyBackup` (confirmations).
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PRDResponse`. 6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `RequestPRDResponse`.
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache. 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_enc_by_shared_secret` des `PRDResponse` de chaque member du role `Member`du process. 6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPRDResponse` de chaque member du role `Member`du process.
6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe 6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
6.4. Concaténation de `Part1` et `Part2` 6.4. Concaténation de `Part1` et `Part2`
@ -187,9 +187,9 @@ Pour être `onboard` dans un process, c'est-à-dire avoir un rôle, il faut :
###### Mise à jour de la liste des membres ###### Mise à jour de la liste des membres
Pour mettre à jour la liste des membres il faut envoyer un `PRDUpdate` avec une nouvelle version du PCD de la liste des membres, contenant l'objet `ItemMember` complet aux membres du role `member`. Ce PRD devra recevoir des membres du rôle `Member` du process les `PRDResponse` correspondant aux critères de validation du `process`. Pour mettre à jour la liste des membres il faut envoyer un `RequestPRDUpdate` avec une nouvelle version du RequestPCD de la liste des membres, contenant l'objet `ItemMember` complet aux membres du role `member`. Ce RequestPRD devra recevoir des membres du rôle `Member` du process les `RequestPRDResponse` correspondant aux critères de validation du `process`.
C'est à ce moment-là que l'on transmet toutes les clés privées dans l'objet `ItemMember`, en tant que `metadadata` privée (chiffrée par la clé de dépense du signet) dans un PCD (et les `PRDUpdate` correspondant). C'est à ce moment-là que l'on transmet toutes les clés privées dans l'objet `ItemMember`, en tant que `metadadata` privée (chiffrée par la clé de dépense du signet) dans un RequestPCD (et les `RequestPRDUpdate` correspondant).
Les adresses SP correspondantes sont aussi transmises en tant que données publiques, ainsi que l'adresse SP de la clé de dépense du login du signet. Les adresses SP correspondantes sont aussi transmises en tant que données publiques, ainsi que l'adresse SP de la clé de dépense du login du signet.
@ -198,37 +198,37 @@ Les metadatas des membres propres au process sont décrits dans le process et do
L'`ItemMember` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md). L'`ItemMember` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md).
1. Création d'un `ItemMember` correspondant à l'utilisateur. 1. Création d'un `ItemMember` correspondant à l'utilisateur.
2. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemMember` créé. 2. Création d'une nouvelle version du RequestPCD avec l'ajout de l'`ItemMember` créé.
3. Création de `PRDKeyHello` à destination du membre. 3. Création de `RequestPRDKeyHello` à destination du membre.
4. Création de `Message` du `PRDKeyHello` à destination du membre. 4. Création de `Message` du `RequestPRDKeyHello` à destination du membre.
5. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination du membre. 5. Envoi de la transaction SP du `Message` du `RequestPRDKeyHello` à destination du membre.
6. Envoi du `Message` du `PRDKeyHello` à destination du membre. 6. Envoi du `Message` du `RequestPRDKeyHello` à destination du membre.
7. Réception des `PRDResponse` en réponse aux `PRDKeyHello` et mise à jour des listes depuis les `PCD` correspondants. 7. Réception des `RequestPRDResponse` en réponse aux `RequestPRDKeyHello` et mise à jour des listes depuis les `RequestPCD` correspondants.
8. Attente de la validation (`PRDResponse`) du `PRDUpdate`. 8. Attente de la validation (`RequestPRDResponse`) du `RequestPRDUpdate`.
###### Mise à jour de la liste des process ###### Mise à jour de la liste des process
Pour mettre à jour la liste des process il faut envoyer un `PRDUpdate` avec une nouvelle version du PCD de la liste des process, contenant l'objet `ItemProcess` complet aux membres du role `process`. Ce PRD devra recevoir des membres du rôle `Process` du process les `PRDResponse` correspondant aux critères de validation du `process`. Pour mettre à jour la liste des process il faut envoyer un `RequestPRDUpdate` avec une nouvelle version du RequestPCD de la liste des process, contenant l'objet `ItemProcess` complet aux membres du role `process`. Ce RequestPRD devra recevoir des membres du rôle `Process` du process les `RequestPRDResponse` correspondant aux critères de validation du `process`.
L'`ItemProcess` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md). L'`ItemProcess` est décrit dans la spécification [Specs-Datamodel.md](Specs-Datamodel.md).
Demande d'update de la liste des membres (PCD) d'un process vers chaque membre du rôle `Member` du process.: Demande d'update de la liste des membres ( RequestPCD) d'un process vers chaque membre du rôle `Member` du process.:
1. Création d'un `ItemProcess` correspondant à l'utilisateur. 1. Création d'un `ItemProcess` correspondant à l'utilisateur.
2. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemProcess` créé. 2. Création d'une nouvelle version du RequestPCD avec l'ajout de l'`ItemProcess` créé.
3. Création de `PRDKeyHello` à destination du membre. 3. Création de `RequestPRDKeyHello` à destination du membre.
4. Création de `Message` du `PRDKeyHello` à destination du membre. 4. Création de `Message` du `RequestPRDKeyHello` à destination du membre.
5. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination du membre. 5. Envoi de la transaction SP du `Message` du `RequestPRDKeyHello` à destination du membre.
6. Envoi du `Message` du `PRDKeyHello` à destination du membre. 6. Envoi du `Message` du `RequestPRDKeyHello` à destination du membre.
7. Réception des `PRDResponse` en réponse aux `PRDKeyHello` et mise à jour des listes depuis les `PCD` correspondants. 7. Réception des `RequestPRDResponse` en réponse aux `RequestPRDKeyHello` et mise à jour des listes depuis les `RequestPCD` correspondants.
8. Attente de la validation (`PRDResponse`) du `PRDUpdate`. 8. Attente de la validation (`RequestPRDResponse`) du `RequestPRDUpdate`.
9. Redirection vers la page du process sur le relai. 9. Redirection vers la page du process sur le relai.
##### Clés de révocation (`revoke`) ##### Clés de révocation (`revoke`)
Les clés de l'image de révocation sont chiffrées par le mot de passe (ou pas, en option) et stockées directement dans les données exifs de l'image de révocation. Les adresses SP correspondantes sont aussi inscrites dans les données exif. Les clés de l'image de révocation sont chiffrées par le mot de passe (ou pas, en option) et stockées directement dans les données exifs de l'image de révocation. Les adresses SP correspondantes sont aussi inscrites dans les données exif.
L'envoi d'une révocation est identique à la création d'une nouvelle adresse via les `PRDKeyBackup` mais la transaction SP est envoyée depuis l'adresse de révocation (la clé aura dû être chargée au préalable depuis l'interface). L'envoi d'une révocation est identique à la création d'une nouvelle adresse via les `RequestPRDKeyBackup` mais la transaction SP est envoyée depuis l'adresse de révocation (la clé aura dû être chargée au préalable depuis l'interface).
##### Clés de third parties ##### Clés de third parties
@ -236,39 +236,39 @@ Au moment de l'update de l'`ItemMember` il est possible de charger des addresses
Les clés privées associées sont générées lors de l'update d'un membre, à 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 membre, à 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. 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 RequestPRD concernés.
#### 9.1.3. <a name='Connexionsavecuneidentitcrerecover'></a>Connexions avec une identité crée (`recover`) #### 9.1.3. <a name='Connexionsavecuneidentitcrerecover'></a>Connexions avec une identité crée (`recover`)
Pour recrééer sa clé privée et envoyer un `PRDKeyHello` à chaque membre du rôle `Member` du process, il faut réaliser les opérations suivantes : Pour recrééer sa clé privée et envoyer un `RequestPRDKeyHello` à chaque membre du rôle `Member` du process, il faut réaliser les opérations suivantes :
1. Récupération de Part1Enc en cache 1. Récupération de Part1Enc en cache
2. Création de la pré-image avec le mot de passe 2. Création de la pré-image avec le mot de passe
Puis depuis la liste des membres du process, pour chacun des membres : Puis depuis la liste des membres du process, pour chacun des membres :
1. Création de `PRDKeyHello` à destination du membre 1. 1. Création de `RequestPRDKeyHello` à destination du membre 1.
2. Création de `Message` du `PRDKeyHello` à destination du membre. 2. Création de `Message` du `RequestPRDKeyHello` à destination du membre.
3. Envoi de la transaction SP du `Message` du `PRDKeyHello` à destination du membre. 3. Envoi de la transaction SP du `Message` du `RequestPRDKeyHello` à destination du membre.
4. Envoi du `Message` du `PRDKeyHello` à destination du membre. 4. Envoi du `Message` du `RequestPRDKeyHello` à destination du membre.
5. Attente de la validation (`PRDResponse`) du `PRDUpdate`. 5. Attente de la validation (`RequestPRDResponse`) du `RequestPRDUpdate`.
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PRDResponse`. 6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `RequestPRDResponse`.
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache. 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_enc_by_shared_secret` des `PRDResponse` de chaque member du role `Member`du process. 6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_enc_by_shared_secret` des `RequestPRDResponse` de chaque member du role `Member`du process.
6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe 6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
6.4. Concaténation de `Part1` et `Part2` 6.4. Concaténation de `Part1` et `Part2`
Demande d'update de la liste des membres (PCD) d'un process : Demande d'update de la liste des membres ( RequestPCD) d'un process :
1. Création et envoi des `PRDList`. 1. Création et envoi des `RequestPRDList`.
2. Réception des `PRDResponse` en réponse aux `PRDList` et mise à jour des listes depuis les `PCD` correspondants. 2. Réception des `RequestPRDResponse` en réponse aux `RequestPRDList` et mise à jour des listes depuis les `RequestPCD` correspondants.
3. Création d'un `ItemMember` correspondant à l'utilisateur avec les clés chiffrées (hors clés de révocation) dans la partie data des métadonnées privées et les adresses SP dans les données publiques. 3. Création d'un `ItemMember` correspondant à l'utilisateur avec les clés chiffrées (hors clés de révocation) dans la partie data des métadonnées privées et les adresses SP dans les données publiques.
4. Création d'une nouvelle version du PCD avec l'ajout de l'`ItemMember` créé. 4. Création d'une nouvelle version du RequestPCD avec l'ajout de l'`ItemMember` créé.
5. Redirection vers la page du process sur le relai. 5. Redirection vers la page du process sur le relai.
## 10. <a name='ExemplesdeCode'></a>Exemples de Code ## 10. <a name='ExemplesdeCode'></a>Exemples de Code
## 11. <a name='Todo'></a>Todo ## 11. <a name='Todo'></a>Todo
* [ ] Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels. * [ ] Extraits de code illustrant l'utilisation des RequestPCD et RequestPRD dans des scénarios réels.
* [ ] Diagrammes de séquences * [ ] Diagrammes de séquences

View File

@ -14,7 +14,7 @@
* **Authentification**: [Auth.md](Auth-Specs.md) * **Authentification**: [Auth.md](Auth-Specs.md)
* **Items**: [Item-Specs.md](Item-Specs.md) * **Items**: [Item-Specs.md](Item-Specs.md)
* **PRD et PCD**: [PRD-PCD-Specs.md](PRD-PCD-Specs.md) * ** RequestPRD et RequestPCD**: [ RequestPRD- RequestPCD-Specs.md]( RequestPRD- RequestPCD-Specs.md)
* **Messages et transactions SP**: [Message-SP-Specs.md] * **Messages et transactions SP**: [Message-SP-Specs.md]
* **Process et roles**: [Process-Role-Specs.md](Process-Role-Specs.md) * **Process et roles**: [Process-Role-Specs.md](Process-Role-Specs.md)

View File

@ -44,7 +44,7 @@ Dans le système 4NK, les items représentent les entités ou les objets appelé
* **hash**: Optionnel, fournit un hash de l'item pour vérifier son intégrité et son authenticité. * **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, Payment, 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, Payment, 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. * **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_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. * **pagination_number_per_ RequestPCD**: Détermine comment l'item est paginé ou divisé dans le contexte des RequestPCD, 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é. * **metadata**: Comprend MetadataContractPublic, MetadataRoleConfidential, et MetadataPrivate, encapsulant les attributs de l'item selon différents niveaux de confidentialité.
#### 3.4.1. <a name='Casdutilisation'></a>Cas d'utilisation #### 3.4.1. <a name='Casdutilisation'></a>Cas d'utilisation
@ -73,4 +73,4 @@ La richesse et la diversité des métadonnées permettent une personnalisation e
## 5. <a name='ExemplesdeCode'></a>Exemples de Code ## 5. <a name='ExemplesdeCode'></a>Exemples de Code
Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels. Extraits de code illustrant l'utilisation des RequestPCD et RequestPRD dans des scénarios réels.

View File

@ -18,8 +18,8 @@
* 7.1. [7.1. Connexion d'un client à sa liste relais via les messages de type `MessageConnect`](#ConnexiondunclientsalisterelaisvialesmessagesdetypeMessageConnect) * 7.1. [7.1. Connexion d'un client à sa liste relais via les messages de type `MessageConnect`](#ConnexiondunclientsalisterelaisvialesmessagesdetypeMessageConnect)
* 7.1.1. [7.1.1. Récupération et choix des relais](#Rcuprationetchoixdesrelais) * 7.1.1. [7.1.1. Récupération et choix des relais](#Rcuprationetchoixdesrelais)
* 7.1.2. [7.1.2. Envoi du message de type `MessageConnect` à chaque relais](#EnvoidumessagedetypeMessageConnectchaquerelais) * 7.1.2. [7.1.2. Envoi du message de type `MessageConnect` à chaque relais](#EnvoidumessagedetypeMessageConnectchaquerelais)
* 7.2. [7.2. Envoi de PCD sur les relais via les messages de type `Message`](#EnvoidePCDsurlesrelaisvialesmessagesdetypeMessage) * 7.2. [7.2. Envoi de RequestPCD sur les relais via les messages de type `Message`](#Envoide RequestPCDsurlesrelaisvialesmessagesdetypeMessage)
* 7.3. [7.3. Envoi de PRD sur les relais via les messages de type `Message`](#EnvoidePRDsurlesrelaisvialesmessagesdetypeMessage) * 7.3. [7.3. Envoi de RequestPRD sur les relais via les messages de type `Message`](#Envoide RequestPRDsurlesrelaisvialesmessagesdetypeMessage)
* 7.4. [7.4. Traitement des messages de type `Message` par les clients](#TraitementdesmessagesdetypeMessageparlesclients) * 7.4. [7.4. Traitement des messages de type `Message` par les clients](#TraitementdesmessagesdetypeMessageparlesclients)
* 8. [8. Traitements par les relais](#Traitementsparlesrelais) * 8. [8. Traitements par les relais](#Traitementsparlesrelais)
* 8.1. [8.1. Traitement des messages de type `MessageConnect` par les relais](#TraitementdesmessagesdetypeMessageConnectparlesrelais) * 8.1. [8.1. Traitement des messages de type `MessageConnect` par les relais](#TraitementdesmessagesdetypeMessageConnectparlesrelais)
@ -37,7 +37,7 @@
* 10.6.1. [10.6.1. Clients](#Clients) * 10.6.1. [10.6.1. Clients](#Clients)
* 10.6.2. [10.6.2. Relais](#Relais-1) * 10.6.2. [10.6.2. Relais](#Relais-1)
* 10.7. [10.7. Connexion au réseau de nœuds de layer 1](#Connexionaurseaudenudsdelayer1) * 10.7. [10.7. Connexion au réseau de nœuds de layer 1](#Connexionaurseaudenudsdelayer1)
* 10.8. [10.8. Horodatage et ancrage des PRD via les transactions Silent Payment (SP)](#HorodatageetancragedesPRDvialestransactionsSilentPaymentSP) * 10.8. [10.8. Horodatage et ancrage des RequestPRD via les transactions Silent Payment (SP)](#Horodatageetancragedes RequestPRDvialestransactionsSilentPaymentSP)
* 11. [## 11. Transactions mainnet Bitcoin](#11.TransactionsmainnetBitcoin) * 11. [## 11. Transactions mainnet Bitcoin](#11.TransactionsmainnetBitcoin)
* 11.1. [11.1. Horodatage et ancrage des blocs de la side chain sur Bitcoin](#HorodatageetancragedesblocsdelasidechainsurBitcoin) * 11.1. [11.1. Horodatage et ancrage des blocs de la side chain sur Bitcoin](#HorodatageetancragedesblocsdelasidechainsurBitcoin)
* 11.2. [11.2. Remboursement des frais d'horodatage et ancrage des blocs de la side chain sur Bitcoin](#RemboursementdesfraisdhorodatageetancragedesblocsdelasidechainsurBitcoin) * 11.2. [11.2. Remboursement des frais d'horodatage et ancrage des blocs de la side chain sur Bitcoin](#RemboursementdesfraisdhorodatageetancragedesblocsdelasidechainsurBitcoin)
@ -105,8 +105,8 @@ Le cache contient une liste des hashs des messages de type `Message` et de type
* MessageHashList: Hashs des objets `Message`. * MessageHashList: Hashs des objets `Message`.
* MessageConnectHashList: Hashs des objets `MessageConnect` (vide pour les clients). * MessageConnectHashList: Hashs des objets `MessageConnect` (vide pour les clients).
* MessageDataEncHashList: Hashs de la donnée encryptée dans les objets `Message`. * MessageDataEncHashList: Hashs de la donnée encryptée dans les objets `Message`.
* PCDHashList: Hashs des `PCD` une fois déchiffrés des objets Message `Message`, avec le hash du message correspondant (vide pour les relais) et état actuel de la collecte des PRD correspondants. * RequestPCDHashList: Hashs des `RequestPCD` une fois déchiffrés des objets Message `Message`, avec le hash du message correspondant (vide pour les relais) et état actuel de la collecte des RequestPRD correspondants.
* PRDHashList: Hashs des `PRD` une fois déchiffrés des objets Message `Message`, avec le hash du message correspondant et l'id de la transaction Silent Payment (SP) correspondante (vide pour les relais). * RequestPRDHashList: Hashs des `RequestPRD` une fois déchiffrés des objets Message `Message`, avec le hash du message correspondant et l'id de la transaction Silent Payment (SP) correspondante (vide pour les relais).
* TxFaucetIdList: Liste des transactions classiques du faucet. * TxFaucetIdList: Liste des transactions classiques du faucet.
* TxSpIdList: Liste des transactions silent payment (SP) reçues. * TxSpIdList: Liste des transactions silent payment (SP) reçues.
@ -147,7 +147,7 @@ L'utilisateur reçoit en retour une transaction Silent Payment (SP) contenant de
#### 7.1.1. <a name='Rcuprationetchoixdesrelais'></a>7.1.1. Récupération et choix des relais #### 7.1.1. <a name='Rcuprationetchoixdesrelais'></a>7.1.1. Récupération et choix des relais
Afin de pouvoir discuter avec les relais du réseau et faire relayer des `PCD` et des `PRD` sous forme de `Message`, l'utilisateur doit se connecter à un ou plusieurs relais, 4 par défaut. Afin de pouvoir discuter avec les relais du réseau et faire relayer des `RequestPCD` et des `RequestPRD` sous forme de `Message`, l'utilisateur doit se connecter à un ou plusieurs relais, 4 par défaut.
L'utilisateur enverra un message de type `MessageConnect` à chaque relais pour se connecter. Puis, il pourra envoyer des `Message` à chacun des 4 relais connectés et recevoir des `Message` de chacun d'eux. L'utilisateur enverra un message de type `MessageConnect` à chaque relais pour se connecter. Puis, il pourra envoyer des `Message` à chacun des 4 relais connectés et recevoir des `Message` de chacun d'eux.
@ -167,33 +167,33 @@ L'utilisateur parcourt sa liste de relais et envoie un message de type `MessageC
Il n'y a pas de retour attendu pour ce message. Il n'y a pas de retour attendu pour ce message.
### 7.2. <a name='EnvoidePCDsurlesrelaisvialesmessagesdetypeMessage'></a>7.2. Envoi de PCD sur les relais via les messages de type `Message` ### 7.2. <a name='Envoide RequestPCDsurlesrelaisvialesmessagesdetypeMessage'></a>7.2. Envoi de RequestPCD sur les relais via les messages de type `Message`
Une fois le `PCD` finalisé, il est chiffré par la `ProcessKey` du process. Cette partie chiffrée est la valeur de l'attribut `request_enc` du `Message`. Une fois le `RequestPCD` finalisé, il est chiffré par la `ProcessKey` du process. Cette partie chiffrée est la valeur de l'attribut `request_enc` du `Message`.
L'utilisateur parcourt sa liste de relais et envoie un message correspondant de type `Message` en JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter, il partage sa liste de relais et sa liste de process. L'utilisateur parcourt sa liste de relais et envoie un message correspondant de type `Message` en JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter, il partage sa liste de relais et sa liste de process.
### 7.3. <a name='EnvoidePRDsurlesrelaisvialesmessagesdetypeMessage'></a>7.3. Envoi de PRD sur les relais via les messages de type `Message` ### 7.3. <a name='Envoide RequestPRDsurlesrelaisvialesmessagesdetypeMessage'></a>7.3. Envoi de RequestPRD sur les relais via les messages de type `Message`
Une fois le `PRD` finalisé, une transaction SP est réalisée, dans cette transaction plusieurs hashs sont ajoutés sur des outputs aux indexs suivants: Une fois le `RequestPRD` finalisé, une transaction SP est réalisée, dans cette transaction plusieurs hashs sont ajoutés sur des outputs aux indexs suivants:
1. Le hash du message de type `Message` correspondant 1. Le hash du message de type `Message` correspondant
2. Le hash du `PRD` 2. Le hash du `RequestPRD`
3. Le hash du process 3. Le hash du process
4. Le hash de l'`item_name` de l'`Item` concerné 4. Le hash de l'`item_name` de l'`Item` concerné
5. Le hash de la valeur de la signature (attribut `sig_value` du PRD) 5. Le hash de la valeur de la signature (attribut `sig_value` du RequestPRD)
6. Le hash du `PRD` d'origine associé au PRD (le cas échéant) 6. Le hash du `RequestPRD` d'origine associé au RequestPRD (le cas échéant)
7. Le hash du `PCD` d'origine associé au PRD (le cas échéant) 7. Le hash du `RequestPCD` d'origine associé au RequestPRD (le cas échéant)
8. Le hash du `PCD` de référence associé au PRD (le cas échéant) 8. Le hash du `RequestPCD` de référence associé au RequestPRD (le cas échéant)
9. Le hash d'un `Amount` de paiement (le cas échéant) 9. Le hash d'un `Amount` de paiement (le cas échéant)
10. Le hash d'un `Amount`de dépôt (le cas échéant) 10. Le hash d'un `Amount`de dépôt (le cas échéant)
11. Un hash d'un engagement externe ou d'un `Number` (le cas échéant) 11. Un hash d'un engagement externe ou d'un `Number` (le cas échéant)
La clé `KeyConfidential` de cette transaction est utilisée pour chiffrer les champs suivants : La clé `KeyConfidential` de cette transaction est utilisée pour chiffrer les champs suivants :
* `pcd_keys_role_confidential_list_enc_by_shared_secret` * `RequestPCD_keys_role_confidential_list_enc_by_shared_secret`
Pour les PRD de type `PRDResponse` : Pour les RequestPRD de type `RequestPRDResponse` :
* `payment_method_enc_by_shared_secret` * `payment_method_enc_by_shared_secret`
* `deposit_method_enc_by_shared_secret` * `deposit_method_enc_by_shared_secret`
@ -203,21 +203,21 @@ Pour les PRD de type `PRDResponse` :
* `part_1_enc_hash_enc_by_sp_shared_secret` * `part_1_enc_hash_enc_by_sp_shared_secret`
* `shard_enc_by_sp_shared_secret` * `shard_enc_by_sp_shared_secret`
Pour les PRD de type `PRDConfirm` : Pour les RequestPRD de type `RequestPRDConfirm` :
* `code_confirm_enc_by_shared_secret` * `code_confirm_enc_by_shared_secret`
Pour les PRD de type `PRDKeyBackup` : Pour les RequestPRD de type `RequestPRDKeyBackup` :
* `device_footprint_enc_by_sp_shared_secret` * `device_footprint_enc_by_sp_shared_secret`
* `part_1_enc_hash_enc_by_sp_shared_secret` * `part_1_enc_hash_enc_by_sp_shared_secret`
* `shard_enc_by_sp_shared_secret` * `shard_enc_by_sp_shared_secret`
Pour les PRD de type `PRDKeyHello` : Pour les RequestPRD de type `RequestPRDKeyHello` :
* `part_1_enc_hash_enc_by_sp_shared_secret` * `part_1_enc_hash_enc_by_sp_shared_secret`
Puis le `PRD` est chiffré par la `ProcessKey` du process. Cette partie chiffrée est la valeur de l'attribut `request_enc` du `Message`. Puis le `RequestPRD` est chiffré par la `ProcessKey` du process. Cette partie chiffrée est la valeur de l'attribut `request_enc` du `Message`.
L'utilisateur parcourt sa liste de relais et envoie un message correspondant de type `Message` en JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter, il partage sa liste de relais et sa liste de process. L'utilisateur parcourt sa liste de relais et envoie un message correspondant de type `Message` en JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter, il partage sa liste de relais et sa liste de process.
@ -236,8 +236,8 @@ Le client met à jour ses propres listes suivantes :
Déchiffrement du message avec la `ProcessKey` du process et contrôles suivants : Déchiffrement du message avec la `ProcessKey` du process et contrôles suivants :
* Calcul du hash du PCD ou PRD et vérification de la non-existence du hash dans le cache. * Calcul du hash du RequestPCD ou RequestPRD et vérification de la non-existence du hash dans le cache.
* Voir [PRD-PCD-Specs.md](PRD-PCD-Specs.md) pour les détails des contrôles. * Voir [ RequestPRD- RequestPCD-Specs.md]( RequestPRD- RequestPCD-Specs.md) pour les détails des contrôles.
Mises à jour des données du cache. Mises à jour des données du cache.
@ -373,7 +373,7 @@ Lorsque deux blocs sont minés presque simultanément, cela peut créer une bifu
#### 10.6.1. <a name='Clients'></a>10.6.1. Clients #### 10.6.1. <a name='Clients'></a>10.6.1. Clients
Les clients se connectent comme un nœud depuis le SDK au réseau de nœuds de side chain via les protocoles p2p de Bitcoin. Ils reçoivent les blocs et les transactions (mempool) de la side chain et scannent les transactions de la side chain pour trouver les transactions Silent Payment (SP) correspondantes aux PRD, puis les PCD correspondant aux PRD. Les clients se connectent comme un nœud depuis le SDK au réseau de nœuds de side chain via les protocoles p2p de Bitcoin. Ils reçoivent les blocs et les transactions (mempool) de la side chain et scannent les transactions de la side chain pour trouver les transactions Silent Payment (SP) correspondantes aux RequestPRD, puis les RequestPCD correspondant aux RequestPRD.
#### 10.6.2. <a name='Relais-1'></a>10.6.2. Relais #### 10.6.2. <a name='Relais-1'></a>10.6.2. Relais
@ -383,9 +383,9 @@ Les relais hébergent un nœud complet de la side chain, connecté aux autres me
Les relais hébergent un nœud complet du mainnet, connecté aux autres membres de ce réseau. Voir [Specs-Deployment.md](Specs-Deployment.md) pour les détails de déploiement. Les relais hébergent un nœud complet du mainnet, connecté aux autres membres de ce réseau. Voir [Specs-Deployment.md](Specs-Deployment.md) pour les détails de déploiement.
### 10.8. <a name='HorodatageetancragedesPRDvialestransactionsSilentPaymentSP'></a>10.8. Horodatage et ancrage des PRD via les transactions Silent Payment (SP) ### 10.8. <a name='Horodatageetancragedes RequestPRDvialestransactionsSilentPaymentSP'></a>10.8. Horodatage et ancrage des RequestPRD via les transactions Silent Payment (SP)
Les PRD sont horodatés et ancrés sur la side chain via des transactions Silent Payment (SP) contenant les hashs des messages et des signatures associées (PRD). Ces transactions sont ajoutées aux blocs, eux-mêmes signés par les nœuds "certificator" de la side chain pour être ajoutés à cette timechain. La dépense des UTXO de la transaction Silent Payment (SP) vaut pour signature (validation de la possession de la clé privée associée). Voir [Specs-Deployment.md](Specs-Deployment.md) pour les détails de déploiement. Les RequestPRD sont horodatés et ancrés sur la side chain via des transactions Silent Payment (SP) contenant les hashs des messages et des signatures associées ( RequestPRD). Ces transactions sont ajoutées aux blocs, eux-mêmes signés par les nœuds "certificator" de la side chain pour être ajoutés à cette timechain. La dépense des UTXO de la transaction Silent Payment (SP) vaut pour signature (validation de la possession de la clé privée associée). Voir [Specs-Deployment.md](Specs-Deployment.md) pour les détails de déploiement.
## 11. <a name='11.TransactionsmainnetBitcoin'></a>## 11. Transactions mainnet Bitcoin ## 11. <a name='11.TransactionsmainnetBitcoin'></a>## 11. Transactions mainnet Bitcoin
@ -401,5 +401,5 @@ Le minage "vert" de 4NK permet de produire les jetons nécessaires au remboursem
## Todo ## Todo
* [ ] Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels. * [ ] Extraits de code illustrant l'utilisation des RequestPCD et RequestPRD dans des scénarios réels.
* [ ] Diagrammes de séquences * [ ] Diagrammes de séquences

View File

@ -2,24 +2,24 @@
* 1. [Objectif](#Objectif) * 1. [Objectif](#Objectif)
* 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 PCD et PRD](#CommunauxPCDetPRD) * 4. [Commun aux RequestPCD et RequestPRD](#Communaux RequestPCDet RequestPRD)
* 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 PCD](#FonctiondesPCD) * 5. [Fonction des RequestPCD](#Fonctiondes RequestPCD)
* 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 PRD](#FonctiondesPRD) * 6. [Fonction des RequestPRD](#Fonctiondes RequestPRD)
* 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles) * 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
* 6.2. [Fonction des transactions silent payment SP associées aux PRD](#FonctiondestransactionssilentpaymentSPassociesauxPRD) * 6.2. [Fonction des transactions silent payment SP associées aux RequestPRD](#FonctiondestransactionssilentpaymentSPassociesaux RequestPRD)
* 6.3. [Création et envoi](#Crationetenvoi-1) * 6.3. [Création et envoi](#Crationetenvoi-1)
* 6.4. [Réception](#Rception-1) * 6.4. [Réception](#Rception-1)
* 7. [RequestPrdList - Demande de Listes (PCD)](#RequestPrdList-DemandedeListesPCD) * 7. [RequestPRDList - Demande de Listes ( RequestPCD)](#RequestPRDList-DemandedeListes RequestPCD)
* 8. [RequestPrdMessage - Envoi de Messages](#RequestPrdMessage-EnvoideMessages) * 8. [RequestPRDMessage - Envoi de Messages](#RequestPRDMessage-EnvoideMessages)
* 9. [RequestPrdUpdate - Mises à Jour de PCD](#RequestPrdUpdate-MisesJourdePCD) * 9. [RequestPRDUpdate - Mises à Jour de RequestPCD](#RequestPRDUpdate-MisesJourde RequestPCD)
* 10. [RequestPrdConfirm - Confirmation de Réception](#RequestPrdConfirm-ConfirmationdeRception) * 10. [RequestPRDConfirm - Confirmation de Réception](#RequestPRDConfirm-ConfirmationdeRception)
* 11. [RequestPrdResponse - Répondre à une Demande](#RequestPrdResponse-RpondreuneDemande) * 11. [RequestPRDResponse - Répondre à une Demande](#RequestPRDResponse-RpondreuneDemande)
* 12. [RequestPrdKeyHelloBakcup](#RequestPrdKeyHelloBakcup) * 12. [RequestPRDKeyHelloBakcup](#RequestPRDKeyHelloBakcup)
* 13. [RequestPrdKeyHello - Échange de Clés et d'Identités](#RequestPrdKeyHello-changedeClsetdIdentits) * 13. [RequestPRDKeyHello - Échange de Clés et d'Identités](#RequestPRDKeyHello-changedeClsetdIdentits)
* 14. [Gestion et Échange des Documents](#GestionetchangedesDocuments) * 14. [Gestion et Échange des Documents](#GestionetchangedesDocuments)
* 14.1. [Création et Distribution](#CrationetDistribution) * 14.1. [Création et Distribution](#CrationetDistribution)
* 14.2. [Validation et Mise à Jour](#ValidationetMiseJour) * 14.2. [Validation et Mise à Jour](#ValidationetMiseJour)
@ -30,99 +30,99 @@
numbering=true numbering=true
autoSave=true autoSave=true
/vscode-markdown-toc-config --> /vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc --># PRD et PCD - 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 (PCD) et Portable Request Document (PRD) 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 PCD et PRD. 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 PCD et PRD 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='CommunauxPCDetPRD'></a>Commun aux PCD et PRD ## 4. <a name='Communaux RequestPCDet RequestPRD'></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 PCD et les PRD 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.
Les messages contiennent des PRD ou des PCD encapsulés dans l'attribut `request_enc`, chiffré par la clé `ProcessKey` du `process` concerné. Les messages contiennent des RequestPRD ou des RequestPCD encapsulés dans l'attribut `request_enc`, chiffré par la clé `ProcessKey` du `process` concerné.
**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 PCD et les PRD 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.
Les messages contiennent des PRD ou des PCD encapsulés dans l'attribut `request_enc`, chiffré par la clé `ProcessKey` du `process` concerné. Les messages contiennent des RequestPRD ou des RequestPCD encapsulés dans l'attribut `request_enc`, chiffré par la clé `ProcessKey` du `process` concerné.
A la réception des messages, ils sont tous déchiffrés puis conservés ou non en fonction du `process hash` du PCD ou du PRD (dans l'attribut `request`). Si le `process hash` n'est pas reconnu, le message est ignoré. A la réception des messages, ils sont tous déchiffrés puis conservés ou non en fonction du `process hash` du RequestPCD ou du RequestPRD (dans l'attribut `request`). Si le `process hash` n'est pas reconnu, le message est ignoré.
Les PRD et PCD sont au format JSON. Voir [Specs-Datamodel.md](Specs-Datamodel.md). Les RequestPRD et RequestPCD sont au format JSON. Voir [Specs-Datamodel.md](Specs-Datamodel.md).
Les types PRD et PCD sont distingués par l'attribut `request_type` dans le `message`. Les types RequestPRD et RequestPCD sont distingués par l'attribut `request_type` dans le `message`.
En cas de PCD ou PRD en relation via `pcd_reference_hash` ou `prd_reference_hash` ou `pcd_origin_hash` ou `prd_origin_hash` ou `item_reference_hash` (dans des PCD), il avoir reçu ou attendre ces documents pour traiter le message. En cas de RequestPCD ou RequestPRD en relation via `RequestPCD_reference_hash` ou `RequestPRD_reference_hash` ou `RequestPCD_origin_hash` ou `RequestPRD_origin_hash` ou `item_reference_hash` (dans des RequestPCD), il avoir reçu ou attendre ces documents pour traiter le message.
**Réception du message**: voir [Message-SP-Specs.md](Message-SP-Specs.md). **Réception du message**: voir [Message-SP-Specs.md](Message-SP-Specs.md).
Pour les PCD et les PRD 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='FonctiondesPCD'></a>Fonction des PCD ## 5. <a name='Fonctiondes RequestPCD'></a>Fonction des RequestPCD
Les Portable Contract Documents (PCD) 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 PCD sont vérifiés par les `PRDResponse` afin de vérifier les validations de ces données et leurs conformités avec les `process` 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 `process` 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 PCD suit plusieurs étapes : La création d'un RequestPCD suit plusieurs étapes :
1. **Chargement de la dernière version de la liste (PCD)**: Récupération de la dernière version de la liste du type d'`Item` à partir de la source de données, telle qu'une base de données ou un système de stockage. 1. **Chargement de la dernière version de la liste ( RequestPCD)**: Récupération de la dernière version de la liste du type d'`Item` à partir de la source de données, telle qu'une base de données ou un système de stockage.
2. **Mise à jour**: Ajouts et modifications eventuelles des `Item` 2. **Mise à jour**: Ajouts et modifications eventuelles des `Item`
3. **Chiffrement des attributs**: Chiffrement des attributs de chaque Item selon les règles de confidentialité et de partage des clés (cf. [Specs-Security.md](Specs-Security.md)). 3. **Chiffrement des attributs**: Chiffrement des attributs de chaque Item selon les règles de confidentialité et de partage des clés (cf. [Specs-Security.md](Specs-Security.md)).
4. **Chiffrement du PCD**: Chiffrement du PCD avec la clé `ProcessKey` du `process` concerné. 4. **Chiffrement du RequestPCD**: Chiffrement du RequestPCD avec la clé `ProcessKey` du `process` concerné.
5. Traitements communs aux PCD et PRD 5. Traitements communs aux RequestPCD et RequestPRD
### 5.2. <a name='Rception-1'></a>Réception ### 5.2. <a name='Rception-1'></a>Réception
La réception d'un PCD suit plusieurs étapes : La réception d'un RequestPCD suit plusieurs étapes :
1. Traitements communs aux PCD et PRD 1. Traitements communs aux RequestPCD et RequestPRD
2. Recherche des PRD en relation via `pcd_reference_hash` ou `pcd_origin_hash` de ces PRD et attente si nécessaire. 2. Recherche des RequestPRD en relation via `RequestPCD_reference_hash` et `RequestPCD_origin_hash` de ces RequestPRD et attente si nécessaire.
3. Déchiffrage des attributs publics des `Item` des PCD avec la `ProcessKey` du `process` concerné. 3. Déchiffrage des attributs publics des `Item` des RequestPCD avec la `ProcessKey` du `process` concerné.
4. Déchiffrage des attributs confidentiels des `Item` des PCD avec les clés de déchiffrement depuis l'attribut `pcd_keys_role_confidential_list_enc_by_shared_secret` des PRD. 4. Déchiffrage des attributs confidentiels des `Item` des RequestPCD avec les clés de déchiffrement depuis l'attribut `RequestPCD_keys_role_confidential_list_enc_by_shared_secret` des RequestPRD.
5. Déchiffrage des attributs privés des `Item` des PCD avec la clé privée `KeyRecover` 5. Déchiffrage des attributs privés des `Item` des RequestPCD avec la clé privée `KeyRecover`
6. Mise à jour du cache pour les traitement des PRD. 6. Mise à jour du cache pour les traitement des RequestPRD.
## 6. <a name='FonctiondesPRD'></a>Fonction des PRD ## 6. <a name='Fonctiondes RequestPRD'></a>Fonction des RequestPRD
Les Portable Request Documents (PRD) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des PCD via l'attribut `pcd_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.
Les clés de chiffrement des attributs confidentiels par rôles des `Item` des PCD sont chiffrées dans les PRD avec le chiffrement du PRD par la clé `KeyConfidential` d'une transaction Silent Payment SP (cf. [Specs-Security.md](Specs-Security.md)). Ces clés ne sont distribués qu'aux `members` concernés par les `Item` des PCD (rôles dans les `process`). Les clés de chiffrement des attributs confidentiels par rôles des `Item` des RequestPCD sont chiffrées dans les RequestPRD avec le chiffrement du RequestPRD par la clé `KeyConfidential` d'une transaction Silent Payment SP (cf. [Specs-Security.md](Specs-Security.md)). Ces clés ne sont distribués qu'aux `members` concernés par les `Item` des RequestPCD (rôles dans les `process`).
Les PRD sont de plusieurs types tels que `RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `PRD` 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 `PRD`. 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`.
Lorsque que la réponse fait référence à un PCD il est précisé dans `pcd_reference_hash`, idem pour les prd avec `prd_reference_hash`. Lorsque que la réponse fait référence à un RequestPCD il est précisé dans `RequestPCD_reference_hash`, idem pour les RequestPRD avec `RequestPRD_reference_hash`.
Lorsque que la réponse fait suite directement à un PCD il est précisé dans `pcd_origin_hash`, idem pour les prd avec `prd_origin_hash`. Lorsque que la réponse fait suite directement à un RequestPCD il est précisé dans `RequestPCD_origin_hash`, idem pour les RequestPRD avec `RequestPRD_origin_hash`.
Les `PrdResponse` signalent de façon confidentielle : Les `RequestPRDResponse` signalent de façon confidentielle :
* soient des conditions ad'hoc déjà remplies via l'attribut `payment_method_enc_by_shared_secret`, `deposit_method_enc_by_shared_secret`, `commitment_method_enc_by_shared_secret`, `commitment_pcd_hash_list` pour les paiements et preuves ad'hoc éventuellements associés aux PCD de la nouvelle version. * soient des conditions ad'hoc déjà remplies via l'attribut `payment_method_enc_by_shared_secret`, `deposit_method_enc_by_shared_secret`, `commitment_method_enc_by_shared_secret`, `commitment_ RequestPCD_hash_list` pour les paiements et preuves ad'hoc éventuellements associés aux RequestPCD de la nouvelle version.
* soient des appels pour recevoir les moyens de satisfaire ces conditions via les attributs `ask_payment_method_enc_by_shared_secret`, `ask_deposit_method_enc_by_shared_secret`, `ask_commitment_method_enc_by_shared_secret`. * soient des appels pour recevoir les moyens de satisfaire ces conditions via les attributs `ask_payment_method_enc_by_shared_secret`, `ask_deposit_method_enc_by_shared_secret`, `ask_commitment_method_enc_by_shared_secret`.
Les `Item` associés sont référencés dans des PCD identifiés par `payment_pcd_hash_list_enc_by_shared_secret`, `cap_pcd_hash_list_enc_by_shared_secret` (cas des payments temporaires en l'attente du passage d'un cap), `deposit_pcd_hash_list_enc_by_shared_secret` et `commitment_pcd_hash_list_enc_by_shared_secret`. Les `Item` associés sont référencés dans des RequestPCD identifiés par `payment_ RequestPCD_hash_list_enc_by_shared_secret`, `cap_ RequestPCD_hash_list_enc_by_shared_secret` (cas des payments temporaires en l'attente du passage d'un cap), `deposit_ RequestPCD_hash_list_enc_by_shared_secret` et `commitment_ RequestPCD_hash_list_enc_by_shared_secret`.
Des champs messages peuvent accompagner les PRD via `message_public`, `message_confidential`, `message_private`. Des champs messages peuvent accompagner les RequestPRD via `message_public`, `message_confidential`, `message_private`.
Il est aussi possible de partager des clés de chiffrement ad'hoc via `certif_key_enc_by_shared_secret`. Il est aussi possible de partager des clés de chiffrement ad'hoc via `certif_key_enc_by_shared_secret`.
@ -132,112 +132,145 @@ 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='FonctiondestransactionssilentpaymentSPassociesauxPRD'></a>Fonction des transactions silent payment SP associées aux PRD ### 6.2. <a name='FonctiondestransactionssilentpaymentSPassociesaux RequestPRD'></a>Fonction des transactions silent payment SP associées aux RequestPRD
La clé `KeyConfidential` d'une transaction Silent Payment SP est utilisée pour chiffrer les PRD. Cette clé est échangée avec le destinataire via un Diffie-Hellman (cf. [Specs-Security.md](Specs-Security.md)) dans la transaction. Cette information est parrallèle aux PRD et permet une meilleur sécurité et confidentialité des échanges. La clé `KeyConfidential` d'une transaction Silent Payment SP est utilisée pour chiffrer les RequestPRD. Cette clé est échangée avec le destinataire via un Diffie-Hellman (cf. [Specs-Security.md](Specs-Security.md)) dans la transaction. Cette information est parrallèle aux RequestPRD et permet une meilleur sécurité et confidentialité des échanges.
La transaction Silent Payment SP a aussi une fonction d'horodate et de preuve de publication des PRD donc de la validation des données des PCD. Les outputs de la transaction Silent Payment SP contiennent les empreintes cryptographiques des `messages` et PRD (sauf `PRDKeyBackup`) et des PCD. Ainsi l'infrastructure blockchain de signet de 4NK permet de vérifier l'intégrité des flux, leur ordre de référence (horodatage) et leur preuve de publication. La transaction Silent Payment SP a aussi une fonction d'horodate et de preuve de publication des RequestPRD donc de la validation des données des RequestPCD. Les outputs de la transaction Silent Payment SP contiennent les empreintes cryptographiques des `messages` et RequestPRD (sauf `RequestPRDKeyBackup`) et des RequestPCD. Ainsi l'infrastructure blockchain de signet de 4NK permet de vérifier l'intégrité des flux, leur ordre de référence (horodatage) et leur preuve de publication.
Les `PRDConfirm` qui sont des accusés automatiques de réception des PRD sont aussi associés à une transaction Silent Payment SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non). Les `RequestPRDConfirm` qui sont des accusés automatiques de réception des RequestPRD sont aussi associés à une transaction Silent Payment SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non).
### 6.3. <a name='Crationetenvoi-1'></a>Création et envoi ### 6.3. <a name='Crationetenvoi-1'></a>Création et envoi
La création d'un PRD suit plusieurs étapes : La création d'un RequestPRD suit plusieurs étapes :
1. **Chargement des clés de chiffrement confidentiel'**: Récupération des clés de chiffrement confidentiel des attributs des items d'un PCD. 1. **Chargement des clés de chiffrement confidentiel'**: Récupération des clés de chiffrement confidentiel des attributs des items d'un RequestPCD.
2. **Chiffrement du PRD**: Chiffrement du PRD avec la clé `ProcessKey` du `process` concerné. 2. **Chiffrement du RequestPRD**: Chiffrement du RequestPRD avec la clé `ProcessKey` du `process` concerné.
3. **Création de l'adresse SP**: Création d'une adresse Silent Payment SP pour le paiement des frais de transaction depuis l'adresse signet de l'utilisateur décrit dans un objet `ItemMember` (cf. [Specs-Datamodel.md](Specs-Datamodel.md)) avec les outupts de la transaction Silent Payment SP correspondants au PRD et aux éventuels PCD associés. 3. **Création de l'adresse SP**: Création d'une adresse Silent Payment SP pour le paiement des frais de transaction depuis l'adresse signet de l'utilisateur décrit dans un objet `ItemMember` (cf. [Specs-Datamodel.md](Specs-Datamodel.md)) avec les outupts de la transaction Silent Payment SP correspondants au RequestPRD et aux éventuels RequestPCD associés.
4. **Création du message**: Création du `message` contenant le PRD chiffré, la preuve de travail, l'adresse de faucet 4. **Création du message**: Création du `message` contenant le RequestPRD chiffré, la preuve de travail, l'adresse de faucet
5. **Sélection des relais pour le message**: Sélection de 4 relais pour le message selon l'historique des pings et des réponses retournées. 5. **Sélection des relais pour le message**: Sélection de 4 relais pour le message selon l'historique des pings et des réponses retournées.
6. **Sélection des noeuds de signet pour la transaction silent Payment (SP)**: Sélection de 4 noeuds de signet pour l'envoi de la transaction Silent Payment SP. 6. **Sélection des noeuds de signet pour la transaction silent Payment (SP)**: Sélection de 4 noeuds de signet pour l'envoi de la transaction Silent Payment SP.
7. **Envoi du message**: Envoi du message aux relais et des transactions aux noeuds de signet. 7. **Envoi du message**: Envoi du message aux relais et des transactions aux noeuds de signet.
### 6.4. <a name='Rception-1'></a>Réception ### 6.4. <a name='Rception-1'></a>Réception
La réception d'un PCD suit plusieurs étapes : La réception d'un RequestPCD suit plusieurs étapes :
1. Traitements communs aux PCD et PRD 1. Traitements communs aux RequestPCD et RequestPRD
2. Recherche des PCD en relation via `pcd_reference_hash` ou `pcd_origin_hash` et attente si nécessaire. 2. Recherche des RequestPCD en relation via `RequestPCD_reference_hash` et `RequestPCD_origin_hash` et attente si nécessaire.
3. Recherche des PRD en relation via `prd_reference_hash` ou `prd_origin_hash` et attente si nécessaire. 3. Recherche des RequestPRD en relation via `RequestPRD_reference_hash` et `RequestPRD_origin_hash` et attente si nécessaire.
4. Recherche de l'`Item` associé via `item_reference_hash` et attente si nécessaire. 4. Recherche de l'`Item` associé via `item_reference_hash` et attente si nécessaire.
5. Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la transaction silent payment SP correspondante via hash du PRD dans l'output `2` de la transaction. 5. Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la transaction silent payment SP correspondante via hash du RequestPRD dans l'output `2` de la transaction.
6. Mise à jour du cache pour les traitement des PRD. 6. Mise à jour du cache pour les traitement des RequestPRD.
7. Traitements spécifiques au type de PRD. 7. Traitements spécifiques au type de RequestPRD.
## 7. <a name='RequestPrdList-DemandedeListesPCD'></a>RequestPrdList - Demande de Listes (PCD) ## 7. <a name='RequestPRDList-DemandedeListes RequestPCD'></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éseau. Chaque PCD 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éseau. Chaque RequestPCD liste des `Item` d'un même type, par exemple les `ItemProcess`, les `ItemMember`, les `ItemPeer`, les `ItemPayment`, etc.
### Création et envoi
Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDList`.
## 8. <a name='RequestPrdMessage-EnvoideMessages'></a>RequestPrdMessage - Envoi de Messages ### Réception
Le RequestPrdMessage facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats. La réception d'un `RequestPRDList` suit plusieurs étapes :
1. Traitements des RequestPRD
2.
## 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.
Permet la communication directe et sécurisée au sein du réseau, supportant des échanges d'informations critiques ou des notifications entre parties. Permet la communication directe et sécurisée au sein du réseau, supportant des échanges d'informations critiques ou des notifications entre parties.
Les `PRDMessage` répondent aux `PRDMessage`. Les `RequestPRDMessage` répondent aux `RequestPRDMessage`.
## 9. <a name='RequestPrdUpdate-MisesJourdePCD'></a>RequestPrdUpdate - Mises à Jour de PCD ### Création et envoi
`RequestPrdUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `PCD`. Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDMessage`.
Basé sur le `RequestPrd`. avec des additions pour spécifier les modifications demandées, y compris de nouveaux attributs ou valeurs à mettre à jour : ### Réception
## 9. <a name='RequestPRDUpdate-MisesJourde RequestPCD'></a>RequestPRDUpdate - Mises à Jour de RequestPCD
`RequestPRDUpdate` est conçu pour demander des mises à jour des listes via des nouvelles versions de `RequestPCD`.
Basé sur le `RequestPRD`. avec des additions pour spécifier les modifications demandées, y compris de nouveaux attributs ou valeurs à mettre à jour :
Essentiel pour les utilisateurs ou les processus nécessitant de mettre à jour des informations contractuelles ou des attributs d'items, assurant la pertinence et l'actualité des données dans le système. Essentiel pour les utilisateurs ou les processus nécessitant de mettre à jour des informations contractuelles ou des attributs d'items, assurant la pertinence et l'actualité des données dans le système.
Par exemple, mettre à jour la liste des membres permet d'ajouter de nouveaux utilisateurs sur un `process`, la mise à jour de la liste des `process` permettra de leur affecter un nouveau role. Par exemple, mettre à jour la liste des membres permet d'ajouter de nouveaux utilisateurs sur un `process`, la mise à jour de la liste des `process` permettra de leur affecter un nouveau role.
Les `PRDUpdate` signalent au réseau via l'attribut `pcd_new_version_hash` les nouvelles version des PCD. Les `RequestPRDUpdate` signalent au réseau via l'attribut `RequestPCD_new_version_hash` les nouvelles version des RequestPCD.
Les `PRDUpdate` signalent de façon confidentielle : ### Création et envoi
* soient des conditions ad'hoc déjà remplies via l'attribut `payment_pcd_hash_list`, `cap_pcd_hash_list`, `deposit_pcd_hash_list`, `commitment_pcd_hash_list` pour les paiements et preuves ad'hoc éventuellements associés aux PCD de la nouvelle version. Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDUpdate`.
* soient des appels pour recevoir les moyens de satisfaire ces conditions via les attributs `ask_payment_method`, `ask_deposit_method`, `ask_commitment_method`.
## 10. <a name='RequestPrdConfirm-ConfirmationdeRception'></a>RequestPrdConfirm - Confirmation de Réception ### 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.
Les `PRDList`, `PRDUpdate`, `PRDMessage`, `PRDResponse` et `PRDKeyHello` reçoivent systématiquement un `PRDConfirm` depuis leur réception par le destinataire.
`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 PRDConfirm. ## 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.
Les `RequestPRDList`, `RequestPRDUpdate`, `RequestPRDMessage`, `RequestPRDResponse` et `RequestPRDKeyHello` reçoivent systématiquement un `RequestPRDConfirm` depuis leur réception par le destinataire.
`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.
Crucial pour les processus qui nécessitent une confirmation explicite de réception ou d'acceptation, comme la finalisation d'une transaction ou la validation d'un changement d'état dans un contrat. Crucial pour les processus qui nécessitent une confirmation explicite de réception ou d'acceptation, comme la finalisation d'une transaction ou la validation d'un changement d'état dans un contrat.
## 11. <a name='RequestPrdResponse-RpondreuneDemande'></a>RequestPrdResponse - Répondre à une Demande ### Création et envoi
Le `PrdResponse` permet de répondre spécifiquement à des PRD reçus, facilitant un échange interactif d'informations ou de décisions entre les parties. Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDConfirm`.
Les `PRDResponse` répondent aux `PRDList`, `PRDUpdate`, `PRDKeyBackup` et `PRDKeyHello`. ### Réception
## 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.
Les `RequestPRDResponse` répondent aux `RequestPRDList`, `RequestPRDUpdate`, `RequestPRDKeyBackup` et `RequestPRDKeyHello`.
Utilisé pour fournir des feedbacks, des confirmations, ou des instructions supplémentaires en réponse à des demandes initiales, supportant une communication bidirectionnelle sécurisée et vérifiable. Utilisé pour fournir des feedbacks, des confirmations, ou des instructions supplémentaires en réponse à des demandes initiales, supportant une communication bidirectionnelle sécurisée et vérifiable.
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.
## 12. <a name='RequestPrdKeyHelloBakcup'></a>RequestPrdKeyHelloBakcup ### Création et envoi
Le RequestPrdKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` . Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDResponse`.
## 13. <a name='RequestPrdKeyHello-changedeClsetdIdentits'></a>RequestPrdKeyHello - Échange de Clés et d'Identités ### Réception
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. ## 12. <a name='RequestPRDKeyHelloBakcup'></a>RequestPRDKeyHelloBakcup
Le RequestPRDKeyHelloBakcup permet de demander la stockage de nouveaux shards associés à une `pre-id` .
### Création et envoi
Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDRRequestPRDKeyHelloBakcupesponse`.
### Réception
## 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.
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.
## 14. <a name='GestionetchangedesDocuments'></a>Gestion et Échange des Documents ### Création et envoi
### 14.1. <a name='CrationetDistribution'></a>Création et Distribution Traitements des RequestPRD, avec le `type_request` spécifique à `RequestPRDKeyHello`.
Procédure de création des PCD et PRD, leur chiffrement, et les mécanismes de distribution sécurisée à travers le réseau 4NK. ### Réception
### 14.2. <a name='ValidationetMiseJour'></a>Validation et Mise à Jour
Processus de validation des informations contenues dans les PCD et PRD, ainsi que les procédures de mise à jour et de versioning des documents.
## 15. <a name='ExemplesdeCode'></a>Exemples de Code ## 15. <a name='ExemplesdeCode'></a>Exemples de Code
## 16. <a name='Todo'></a>Todo ## 16. <a name='Todo'></a>Todo
* [ ] Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels. * [ ] Extraits de code illustrant l'utilisation des RequestPCD et RequestPRD dans des scénarios réels.
* [ ] Diagrammes de séquences * [ ] Diagrammes de séquences

View File

@ -34,7 +34,7 @@
## 1. <a name='Objectif'></a>Objectif ## 1. <a name='Objectif'></a>Objectif
Cette section vise à présenter en détail les Documents de Contrat Portable (PCD) et les Documents de Demande Portable (PRD), qui constituent les piliers du système 4NK. Essentiels pour sécuriser les transactions de données et gérer les identités numériques, les PCD et PRD assurent l'intégrité et la confidentialité au cœur d'un réseau décentralisé. Cette section vise à présenter en détail les Documents de Contrat Portable ( RequestPCD) et les Documents de Demande Portable ( RequestPRD), qui constituent les piliers du système 4NK. Essentiels pour sécuriser les transactions de données et gérer les identités numériques, les RequestPCD et RequestPRD assurent l'intégrité et la confidentialité au cœur d'un réseau décentralisé.
## 2. <a name='Porte'></a>Portée ## 2. <a name='Porte'></a>Portée
@ -144,4 +144,4 @@ L'ItemProcess et ItemProcessPublicAttributeGroup offrent un cadre pour l'intégr
## 9. <a name='ExemplesdeCode'></a>Exemples de Code ## 9. <a name='ExemplesdeCode'></a>Exemples de Code
Extraits de code illustrant l'utilisation des PCD et PRD dans des scénarios réels. Extraits de code illustrant l'utilisation des RequestPCD et RequestPRD dans des scénarios réels.

View File

@ -38,7 +38,7 @@ Les parties prenantes ont tous les moyens organisationnels dans les process, pou
## 3. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring ## 3. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring
Tous les utilisateurs reçoivent les mêmes flux qu'ils se relaient et se restituent au démarrage, tous les flux ont une empreinte horodatée sur une timechain et peuvent être demandés unitairement entre parties, avec le même niveau de confidentialité par rôles. Les PCD sont les listes à jour de l'état de validation de tous les éléments échangés, et les PRD sont toutes les signatures échangées sur les flux; en mémoire côté utilisateur, par "session" sur un nœud, pour un process (possible de segmenter par zones et services). Tous les utilisateurs reçoivent les mêmes flux qu'ils se relaient et se restituent au démarrage, tous les flux ont une empreinte horodatée sur une timechain et peuvent être demandés unitairement entre parties, avec le même niveau de confidentialité par rôles. Les RequestPCD sont les listes à jour de l'état de validation de tous les éléments échangés, et les RequestPRD sont toutes les signatures échangées sur les flux; en mémoire côté utilisateur, par "session" sur un nœud, pour un process (possible de segmenter par zones et services).
Le monitoring comme la journalisation, ne sont pas possibles et pas pertinents sur les relais qui ne sont pas critiques unitairement, tous les flux sont fongibles, chiffrés, anonymes, et peuvent passer par des relais non révélés. Cependant, l'optimisation des listes de pairs et de contrats, pourrait passer par un système de réputation qui nécessitera un historique. À ce stade, la gestion "qualitative" et "quantitative" des relais et des contrats est gérée en mémoire, non persistée et restaurée par chaque connexion à un nouveau pair. Le monitoring comme la journalisation, ne sont pas possibles et pas pertinents sur les relais qui ne sont pas critiques unitairement, tous les flux sont fongibles, chiffrés, anonymes, et peuvent passer par des relais non révélés. Cependant, l'optimisation des listes de pairs et de contrats, pourrait passer par un système de réputation qui nécessitera un historique. À ce stade, la gestion "qualitative" et "quantitative" des relais et des contrats est gérée en mémoire, non persistée et restaurée par chaque connexion à un nouveau pair.

View File

@ -6,7 +6,7 @@
* 2.3. [ConditionDeposit](#ConditionDeposit) * 2.3. [ConditionDeposit](#ConditionDeposit)
* 2.4. [ConditionOrchestration](#ConditionOrchestration) * 2.4. [ConditionOrchestration](#ConditionOrchestration)
* 2.5. [ConditionPayment](#ConditionPayment) * 2.5. [ConditionPayment](#ConditionPayment)
* 2.6. [ConditionPrdAddressSet](#ConditionPrdAddressSet) * 2.6. [Condition RequestPRDAddressSet](#Condition RequestPRDAddressSet)
* 2.7. [ConditionPublish](#ConditionPublish) * 2.7. [ConditionPublish](#ConditionPublish)
* 3. [Methods](#Methods) * 3. [Methods](#Methods)
* 3.1. [DepositMethod](#DepositMethod) * 3.1. [DepositMethod](#DepositMethod)
@ -56,22 +56,22 @@
* 8.4. [Amount](#Amount) * 8.4. [Amount](#Amount)
* 8.5. [Number](#Number) * 8.5. [Number](#Number)
* 9. [Request](#Request) * 9. [Request](#Request)
* 10. [PCD](#PCD) * 10. [ RequestPCD](# RequestPCD)
* 10.1. [Pagination](#Pagination) * 10.1. [Pagination](#Pagination)
* 10.2. [PcdItemEncAttributePublic](#PcdItemEncAttributePublic) * 10.2. [ RequestPCDItemEncAttributePublic](# RequestPCDItemEncAttributePublic)
* 10.3. [PcdItemEncAttributeRoleConfidential](#PcdItemEncAttributeRoleConfidential) * 10.3. [ RequestPCDItemEncAttributeRoleConfidential](# RequestPCDItemEncAttributeRoleConfidential)
* 10.4. [PcdItemEncAttributePrivate](#PcdItemEncAttributePrivate) * 10.4. [ RequestPCDItemEncAttributePrivate](# RequestPCDItemEncAttributePrivate)
* 10.5. [PcdItemGenericEnc](#PcdItemGenericEnc) * 10.5. [ RequestPCDItemGenericEnc](# RequestPCDItemGenericEnc)
* 10.6. [PcdItemEnc](#PcdItemEnc) * 10.6. [ RequestPCDItemEnc](# RequestPCDItemEnc)
* 11. [RequestPrd](#RequestPrd) * 11. [RequestPRD](#RequestPRD)
* 11.1. [RequestPrdResponse](#RequestPrdResponse) * 11.1. [RequestPRDResponse](#RequestPRDResponse)
* 11.2. [RequestPrdConfirm](#RequestPrdConfirm) * 11.2. [RequestPRDConfirm](#RequestPRDConfirm)
* 11.3. [RequestPrdKeyBackup](#RequestPrdKeyBackup) * 11.3. [RequestPRDKeyBackup](#RequestPRDKeyBackup)
* 11.4. [RequestPrdKeyHello](#RequestPrdKeyHello) * 11.4. [RequestPRDKeyHello](#RequestPRDKeyHello)
* 11.5. [RequestPrdList](#RequestPrdList) * 11.5. [RequestPRDList](#RequestPRDList)
* 11.6. [RequestPrdMessage](#RequestPrdMessage) * 11.6. [RequestPRDMessage](#RequestPRDMessage)
* 11.7. [RequestPrdResponse](#RequestPrdResponse-1) * 11.7. [RequestPRDResponse](#RequestPRDResponse-1)
* 11.8. [RequestPrdUpdate](#RequestPrdUpdate) * 11.8. [RequestPRDUpdate](#RequestPRDUpdate)
* 12. [Roles](#Roles) * 12. [Roles](#Roles)
* 12.1. [RolesGroup](#RolesGroup) * 12.1. [RolesGroup](#RolesGroup)
* 12.2. [RoleArtefact](#RoleArtefact) * 12.2. [RoleArtefact](#RoleArtefact)
@ -149,48 +149,48 @@ This struct outlines the conditions for payments, including the amount, payment
| payment_method | PaymentMode | | Specifies the payment method to be used. | | payment_method | PaymentMode | | Specifies the payment method to be used. |
| role_transaction | TransactionMode | | Specifies the transaction mode associated with this role. | | role_transaction | TransactionMode | | Specifies the transaction mode associated with this role. |
### 2.6. <a name='ConditionPrdAddressSet'></a>ConditionPrdAddressSet ### 2.6. <a name='Condition RequestPRDAddressSet'></a>Condition RequestPRDAddressSet
ConditionPrdAddressSet involves complex conditions based on PRD addresses, including quotas, values, and scores, to determine condition fulfillment. Condition RequestPRDAddressSet involves complex conditions based on RequestPRD addresses, including quotas, values, and scores, to determine condition fulfillment.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|---------------------------------------|-------------|--------|------------------------------------------------------------| |----------------------------------------------|-------------|--------|------------------------------------------------------------|
| from_role | String | | Identifies the originating role in the condition. | | from_role | String | | Identifies the originating role in the condition. |
| prd_sp_address_list | Vec<String> | | Lists addresses involved in the condition. | | RequestPRD_sp_address_list | Vec<String> | | Lists addresses involved in the condition. |
| prd_sp_address_required_list | Vec<String> | | Lists required addresses for the condition to be met. | | RequestPRD_sp_address_required_list | Vec<String> | | Lists required addresses for the condition to be met. |
| prd_sp_address_quota | i32 | | Specifies the quota of addresses for the condition. | | RequestPRD_sp_address_quota | i32 | | Specifies the quota of addresses for the condition. |
| prd_prd_value_ok_list | Vec<String> | | Lists the values that are considered acceptable. | | RequestPRD_ RequestPRD_value_ok_list | Vec<String> | | Lists the values that are considered acceptable. |
| prd_value_ko_list | Vec<String> | | Lists the values that are considered failures. | | RequestPRD_value_ko_list | Vec<String> | | Lists the values that are considered failures. |
| prd_value_none_list | Vec<String> | | Lists the values that are considered neutral or no-op. | | RequestPRD_value_none_list | Vec<String> | | Lists the values that are considered neutral or no-op. |
| prd_sp_address_value_min | i64 | | The minimum value for an address to be considered. | | RequestPRD_sp_address_value_min | i64 | | The minimum value for an address to be considered. |
| prd_sp_address_value_min_per | i64 | | The minimum percentage for the minimum address value. | | RequestPRD_sp_address_value_min_per | i64 | | The minimum percentage for the minimum address value. |
| prd_sp_address_value_min_ok | bool | | Indicates if the minimum address value is considered OK. | | RequestPRD_sp_address_value_min_ok | bool | | Indicates if the minimum address value is considered OK. |
| prd_sp_adddress_value_ok_min_per | i64 | | The minimum percentage for an address value to be OK. | | RequestPRD_sp_adddress_value_ok_min_per | i64 | | The minimum percentage for an address value to be OK. |
| prd_sp_address_value_ok_max | i64 | | The maximum value for an address to be considered OK. | | RequestPRD_sp_address_value_ok_max | i64 | | The maximum value for an address to be considered OK. |
| prd_sp_adderss_value_ko_max_per | i64 | | The maximum percentage for an address value to be KO. | | RequestPRD_sp_adderss_value_ko_max_per | i64 | | The maximum percentage for an address value to be KO. |
| prd_sp_address_value_none_max | i64 | | The maximum value for an address to be considered neutral. | | RequestPRD_sp_address_value_none_max | i64 | | The maximum value for an address to be considered neutral. |
| prd_sp_adderss_value_none_max_per | i64 | | The maximum percentage for a neutral address value. | | RequestPRD_sp_adderss_value_none_max_per | i64 | | The maximum percentage for a neutral address value. |
| prd_sp_address_score_min | i32 | | The minimum score for an address to be considered. | | RequestPRD_sp_address_score_min | i32 | | The minimum score for an address to be considered. |
| prd_sp_address_score_min_min_required | i32 | | The minimum required score for an address. | | RequestPRD_sp_address_score_min_min_required | i32 | | The minimum required score for an address. |
| prd_sp_address_score_min_min_ok | bool | | Indicates if the minimum score is considered OK. | | RequestPRD_sp_address_score_min_min_ok | bool | | Indicates if the minimum score is considered OK. |
| prd_sp_address_score_min_min_per | i64 | | The minimum percentage for the minimum score. | | RequestPRD_sp_address_score_min_min_per | i64 | | The minimum percentage for the minimum score. |
| prd_value_auto_ok | bool | | Automatically consider values as OK. | | RequestPRD_value_auto_ok | bool | | Automatically consider values as OK. |
| prd_value_auto_ko | bool | | Automatically consider values as KO. | | RequestPRD_value_auto_ko | bool | | Automatically consider values as KO. |
| prd_value_auto_none | bool | | Automatically consider values as neutral or no-op. | | RequestPRD_value_auto_none | bool | | Automatically consider values as neutral or no-op. |
### 2.7. <a name='ConditionPublish'></a>ConditionPublish ### 2.7. <a name='ConditionPublish'></a>ConditionPublish
ConditionPublish sets the criteria for publishing actions, including data size limits, publication counts, and timeouts, to regulate content distribution. ConditionPublish sets the criteria for publishing actions, including data size limits, publication counts, and timeouts, to regulate content distribution.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-------------------------|--------|--------|---------------------------------------------------------------| |--------------------------------|--------|--------|---------------------------------------------------------------|
| pcd_data_size_max_unit | String | | Specifies the maximum unit size for published data. | | RequestPCD_data_size_max_unit | String | | Specifies the maximum unit size for published data. |
| pcd_data_size_max_total | i64 | | Specifies the total maximum data size allowed. | | RequestPCD_data_size_max_total | i64 | | Specifies the total maximum data size allowed. |
| pcd_number_min | i32 | | The minimum number of publications required. | | RequestPCD_number_min | i32 | | The minimum number of publications required. |
| pcd_number_max | i32 | | The maximum number of publications allowed. | | RequestPCD_number_max | i32 | | The maximum number of publications allowed. |
| pcd_amount_max_total | Amount | | The maximum total amount for publications. | | RequestPCD_amount_max_total | Amount | | The maximum total amount for publications. |
| prd_waiting_timeout | u64 | | The waiting timeout for a publication to be considered valid. | | RequestPRD_waiting_timeout | u64 | | The waiting timeout for a publication to be considered valid. |
| pcd_waiting_timeout | u64 | | The waiting timeout for the condition to be considered met. | | RequestPCD_waiting_timeout | u64 | | The waiting timeout for the condition to be considered met. |
## 3. <a name='Methods'></a>Methods ## 3. <a name='Methods'></a>Methods
@ -235,15 +235,15 @@ ItemArtefact associates an item with artefact-specific attributes, including pub
This struct groups public attributes related to commitments, such as goals and provider types, to publicly share commitment details. This struct groups public attributes related to commitments, such as goals and provider types, to publicly share commitment details.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|--------------------------|-------------|--------|--------------------------------------------------------------------------| |-----------------------------------|-------------|--------|-----------------------------------------------------------------------------------|
| for_sp_address_list | Vec<String> | | A list of service provider addresses related to this commitment. | | for_sp_address_list | Vec<String> | | A list of service provider addresses related to this commitment. |
| goal_list | Vec<String> | | A list of goals associated with this commitment. | | goal_list | Vec<String> | | A list of goals associated with this commitment. |
| provider_type | String | | The type of provider making the commitment. | | provider_type | String | | The type of provider making the commitment. |
| commitment_pcd_hash_list | Vec<String> | | A list of hashes for the commitment's PCD documents. | | commitment_ RequestPCD_hash_list | Vec<String> | | A list of hashes for the commitment's RequestPCD documents. |
| ref_item_hash_list | Vec<String> | | A list of reference hashes for items related to this commitment. | | ref_item_hash_list | Vec<String> | | A list of reference hashes for items related to this commitment. |
| ref_pcd_hash_list | Vec<String> | | A list of reference hashes for PCD documents related to this commitment. | | ref_ RequestPCD_hash_list | Vec<String> | | A list of reference hashes for RequestPCD documents related to this commitment. |
| payload_public_list | Vec<String> | | A list of public payloads associated with this commitment. | | payload_public_list | Vec<String> | | A list of public payloads associated with this commitment. |
### 4.3. <a name='ItemMemberPublicAttributeGroup'></a>ItemMemberPublicAttributeGroup ### 4.3. <a name='ItemMemberPublicAttributeGroup'></a>ItemMemberPublicAttributeGroup
@ -264,16 +264,16 @@ ItemMemberPublicAttributeGroup outlines public attributes for members, including
It details public attributes for deposits, including target addresses and goals, facilitating the understanding of deposit objectives. It details public attributes for deposits, including target addresses and goals, facilitating the understanding of deposit objectives.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|------------------------|-------------|--------|----------------------------------------------------------------| |----------------------------|-------------|--------|--------------------------------------------------------------------|
| for_sp_address_list | Vec<String> | | A list of service provider addresses targeted by this deposit. | | for_sp_address_list | Vec<String> | | A list of service provider addresses targeted by this deposit. |
| for_address_list | Vec<String> | | A list of addresses targeted by this deposit. | | for_address_list | Vec<String> | | A list of addresses targeted by this deposit. |
| goal_list | Vec<String> | | A list of goals associated with this deposit. | | goal_list | Vec<String> | | A list of goals associated with this deposit. |
| provider_type | String | | The type of provider making the deposit. | | provider_type | String | | The type of provider making the deposit. |
| ref_item_hash_list | Vec<String> | | A list of item hashes referenced by this deposit. | | ref_item_hash_list | Vec<String> | | A list of item hashes referenced by this deposit. |
| ref_pcd_hash_list | Vec<String> | | A list of PCD document hashes referenced by this deposit. | | ref_ RequestPCD_hash_list | Vec<String> | | A list of RequestPCD document hashes referenced by this deposit. |
| payload_list_public | Vec<String> | | A list of public payloads associated with this deposit. | | payload_list_public | Vec<String> | | A list of public payloads associated with this deposit. |
| audit_code_list_public | Vec<String> | | A list of public audit codes associated with this deposit. | | audit_code_list_public | Vec<String> | | A list of public audit codes associated with this deposit. |
### 4.5. <a name='ItemCommitmentRoleConfidentialAttributeGroup'></a>ItemCommitmentRoleConfidentialAttributeGroup ### 4.5. <a name='ItemCommitmentRoleConfidentialAttributeGroup'></a>ItemCommitmentRoleConfidentialAttributeGroup
@ -347,19 +347,19 @@ This enumeration represents different types of items within a system, where each
This struct organizes public payment attributes, detailing aspects like service provider addresses and payment goals, for public knowledge. This struct organizes public payment attributes, detailing aspects like service provider addresses and payment goals, for public knowledge.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|--------------------------|-------------|--------|-----------------------------------------------------------------------| |-----------------------------------|-------------|--------|-----------------------------------------------------------------------|
| for_sp_address_list | Vec<String> | | A list of service provider addresses related to this payment. | | for_sp_address_list | Vec<String> | | A list of service provider addresses related to this payment. |
| goal_list | Vec<String> | | A list of goals associated with this payment. | | goal_list | Vec<String> | | A list of goals associated with this payment. |
| provider_type | String | | The type of provider making the payment. | | provider_type | String | | The type of provider making the payment. |
| commitment_pcd_hash_list | Vec<String> | | A list of hashes for the payment's commitment precondition documents. | | commitment_ RequestPCD_hash_list | Vec<String> | | A list of hashes for the payment's commitment precondition documents. |
| order_pcd_hash_list | Vec<String> | | A list of hashes for the payment's order precondition documents. | | order_ RequestPCD_hash_list | Vec<String> | | A list of hashes for the payment's order precondition documents. |
| invoice_pcd_hash_list | Vec<String> | | A list of hashes for the payment's invoice precondition documents. | | invoice_ RequestPCD_hash_list | Vec<String> | | A list of hashes for the payment's invoice precondition documents. |
| pay_pcd_hash_list | Vec<String> | | A list of hashes for the payment precondition documents. | | pay_ RequestPCD_hash_list | Vec<String> | | A list of hashes for the payment precondition documents. |
| ref_item_hash_list | Vec<String> | | A list of item hashes referenced by this payment. | | ref_item_hash_list | Vec<String> | | A list of item hashes referenced by this payment. |
| ref_pcd_hash_list | Vec<String> | | A list of precondition document hashes referenced by this payment. | | ref_ RequestPCD_hash_list | Vec<String> | | A list of precondition document hashes referenced by this payment. |
| payload_list_public | Vec<String> | | A list of public payloads associated with this payment. | | payload_list_public | Vec<String> | | A list of public payloads associated with this payment. |
| audit_code_list_public | Vec<String> | | A list of public audit codes associated with this payment. | | audit_code_list_public | Vec<String> | | A list of public audit codes associated with this payment. |
### 4.13. <a name='ItemPaymentRoleConfidentialAttributeGroup'></a>ItemPaymentRoleConfidentialAttributeGroup ### 4.13. <a name='ItemPaymentRoleConfidentialAttributeGroup'></a>ItemPaymentRoleConfidentialAttributeGroup
@ -448,16 +448,16 @@ This struct details public attributes related to processes, like roles groups, t
The Item struct serves as a foundational element, detailing the basic structure of an item with attributes like UUID, version, and type, central to item management in the system. The Item struct serves as a foundational element, detailing the basic structure of an item with attributes like UUID, version, and type, central to item management in the system.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------------------|--------------------------|--------|---------------------------------------------------------------------------| |------------------------------------|--------------------------|--------|---------------------------------------------------------------------------|
| uuid | String | | A unique identifier for the item. | | uuid | String | | A unique identifier for the item. |
| version | i64 | | The version of the item. | | version | i64 | | The version of the item. |
| item_type | String | | The type of the item. `type` is a reserved keyword in Rust, renamed here. | | item_type | String | | The type of the item. `type` is a reserved keyword in Rust, renamed here. |
| name | String | | The name of the item. | | name | String | | The name of the item. |
| pagination_number_per_pcd | u32 | | The pagination number per Portable Contract Document (PCD). | | pagination_number_per_ RequestPCD | u32 | | The pagination number per Portable Contract Document ( RequestPCD). |
| metadata_contract_public | MetadataContractPublic | | Public metadata contract associated with the item. | | metadata_contract_public | MetadataContractPublic | | Public metadata contract associated with the item. |
| metadata_role_confidential | MetadataRoleConfidential | | Role-specific confidential metadata associated with the item. | | metadata_role_confidential | MetadataRoleConfidential | | Role-specific confidential metadata associated with the item. |
| metadata_private | MetadataPrivate | | Private metadata associated with the item. | | metadata_private | MetadataPrivate | | Private metadata associated with the item. |
## 5. <a name='Encryption'></a>Encryption ## 5. <a name='Encryption'></a>Encryption
@ -677,27 +677,27 @@ Number provides a numeric value and its unit, supporting a wide range of quantit
Defines a general request structure within the system, encapsulating details about the requested item, its type, version, and associated process and document references. Defines a general request structure within the system, encapsulating details about the requested item, its type, version, and associated process and document references.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|---------------------|--------|--------|--------------------------------------------------------------------------------------------| |---------------------------|--------|--------|--------------------------------------------------------------------------------------------|
| item_name | String | Yes | Optionally specifies the name of the item being requested. | | item_name | String | Yes | Optionally specifies the name of the item being requested. |
| request_type | String | | Specifies the type of request. `type` is a reserved keyword in Rust, hence `request_type`. | | request_type | String | | Specifies the type of request. `type` is a reserved keyword in Rust, hence `request_type`. |
| version | i64 | | Specifies the version of the item or process being requested. | | version | i64 | | Specifies the version of the item or process being requested. |
| process_hash | String | | The hash of the process associated with the request. | | process_hash | String | | The hash of the process associated with the request. |
| pcd_reference_hash | String | Yes | Optionally specifies the hash of PCD related to the request. | | RequestPCD_reference_hash | String | Yes | Optionally specifies the hash of RequestPCD related to the request. |
| pcd_origin_hash | String | Yes | Optional hash of the originating PCD. | | RequestPCD_origin_hash | String | Yes | Optional hash of the originating RequestPCD. |
| prd_reference_hash | String | Yes | Optionally specifies the hash of PRD related to the request. | | RequestPRD_reference_hash | String | Yes | Optionally specifies the hash of RequestPRD related to the request. |
| prd_origin_hash | String | Yes | Optional hash of the originating PRD. | | RequestPRD_origin_hash | String | Yes | Optional hash of the originating RequestPRD. |
| item_reference_hash | String | Yes | Optionally specifies the hash of the item related to the request. | | item_reference_hash | String | Yes | Optionally specifies the hash of the item related to the request. |
## 10. <a name='PCD'></a>PCD ## 10. <a name=' RequestPCD'></a> RequestPCD
The RequestPcd struct integrates a request with a list of generic encrypted items and pagination details, facilitating the handling of encrypted PCD requests within the system. The RequestPCD struct integrates a request with a list of generic encrypted items and pagination details, facilitating the handling of encrypted RequestPCD requests within the system.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|------------------------|--------|-------------------------------------------------------------------| |----------------|---------------------------------|--------|-------------------------------------------------------------------|
| request | Request | | The request, assuming `Request` is a predefined struct. | | request | Request | | The request, assuming `Request` is a predefined struct. |
| item_list | Vec<PcdItemGenericEnc> | | List of generic encrypted items. | | item_list | Vec< RequestPCDItemGenericEnc> | | List of generic encrypted items. |
| pagination | Pagination | Yes | Pagination details, assuming `Pagination` is a predefined struct. | | pagination | Pagination | Yes | Pagination details, assuming `Pagination` is a predefined struct. |
### 10.1. <a name='Pagination'></a>Pagination ### 10.1. <a name='Pagination'></a>Pagination
@ -709,18 +709,18 @@ The Pagination struct is essential for managing large datasets, detailing the pa
| number | usize | | Le nombre d'éléments par page. | | number | usize | | Le nombre d'éléments par page. |
| page_index | usize | | L'indice de la page actuelle pour la pagination. | | page_index | usize | | L'indice de la page actuelle pour la pagination. |
### 10.2. <a name='PcdItemEncAttributePublic'></a>PcdItemEncAttributePublic ### 10.2. <a name=' RequestPCDItemEncAttributePublic'></a> RequestPCDItemEncAttributePublic
This struct outlines public encrypted attributes for PCD items, ensuring the secure transmission of public attribute data. This struct outlines public encrypted attributes for RequestPCD items, ensuring the secure transmission of public attribute data.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|--------|--------|---------------------------------------------------| |----------------|--------|--------|---------------------------------------------------|
| attribute_name | String | | The name of the attribute. | | attribute_name | String | | The name of the attribute. |
| data_enc | String | | The encrypted data associated with the attribute. | | data_enc | String | | The encrypted data associated with the attribute. |
### 10.3. <a name='PcdItemEncAttributeRoleConfidential'></a>PcdItemEncAttributeRoleConfidential ### 10.3. <a name=' RequestPCDItemEncAttributeRoleConfidential'></a> RequestPCDItemEncAttributeRoleConfidential
PcdItemEncAttributeRoleConfidential deals with role-specific confidential encrypted attributes, securing sensitive data while allowing role-based access. RequestPCDItemEncAttributeRoleConfidential deals with role-specific confidential encrypted attributes, securing sensitive data while allowing role-based access.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|---------------|--------|---------------------------------------------------| |----------------|---------------|--------|---------------------------------------------------|
@ -728,145 +728,145 @@ PcdItemEncAttributeRoleConfidential deals with role-specific confidential encryp
| data_enc | String | Yes | The encrypted data associated with the attribute. | | data_enc | String | Yes | The encrypted data associated with the attribute. |
| key | KeyEncryption | Yes | The key used for encrypting the data. | | key | KeyEncryption | Yes | The key used for encrypting the data. |
### 10.4. <a name='PcdItemEncAttributePrivate'></a>PcdItemEncAttributePrivate ### 10.4. <a name=' RequestPCDItemEncAttributePrivate'></a> RequestPCDItemEncAttributePrivate
It specifies private encrypted attributes for PCD items, protecting the most sensitive information with encryption. It specifies private encrypted attributes for RequestPCD items, protecting the most sensitive information with encryption.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|--------|--------|---------------------------------------------------------| |----------------|--------|--------|---------------------------------------------------------|
| attribute_name | String | | The name of the attribute. | | attribute_name | String | | The name of the attribute. |
| data_enc | String | Yes | The encrypted data associated with this attribute name. | | data_enc | String | Yes | The encrypted data associated with this attribute name. |
### 10.5. <a name='PcdItemGenericEnc'></a>PcdItemGenericEnc ### 10.5. <a name=' RequestPCDItemGenericEnc'></a> RequestPCDItemGenericEnc
PcdItemGenericEnc encompasses encrypted items with optional lists of public, role-confidential, and private encrypted attributes, offering a flexible encryption model for diverse data types. RequestPCDItemGenericEnc encompasses encrypted items with optional lists of public, role-confidential, and private encrypted attributes, offering a flexible encryption model for diverse data types.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------------------|------------------------------------------|--------|----------------------------------------------------------| |------------------------------------------------------|---------------------------------------------------|--------|----------------------------------------------------------|
| item_enc | PcdItemEnc | | The encrypted item. | | item_enc | RequestPCDItemEnc | | The encrypted item. |
| pcd_item_enc_attribute_public_list | Vec<PcdItemEncAttributePublic> | Yes | Optional list of public encrypted attributes. | | RequestPCD_item_enc_attribute_public_list | Vec< RequestPCDItemEncAttributePublic> | Yes | Optional list of public encrypted attributes. |
| pcd_item_enc_attribute_role_confidential_list | Vec<PcdItemEncAttributeRoleConfidential> | Yes | Optional list of role-confidential encrypted attributes. | | RequestPCD_item_enc_attribute_role_confidential_list | Vec< RequestPCDItemEncAttributeRoleConfidential> | Yes | Optional list of role-confidential encrypted attributes. |
| pcd_item_enc_attribute_private_list | Vec<PcdItemEncAttributePrivate> | Yes | Optional list of private encrypted attributes. | | RequestPCD_item_enc_attribute_private_list | Vec< RequestPCDItemEncAttributePrivate> | Yes | Optional list of private encrypted attributes. |
### 10.6. <a name='PcdItemEnc'></a>PcdItemEnc ### 10.6. <a name=' RequestPCDItemEnc'></a> RequestPCDItemEnc
The PcdItemEnc struct encapsulates encrypted PCD items, detailing the version, type, and name of the item, alongside encrypted attributes segregated into public, role-confidential, and private categories, ensuring comprehensive encryption coverage. The RequestPCDItemEnc struct encapsulates encrypted RequestPCD items, detailing the version, type, and name of the item, alongside encrypted attributes segregated into public, role-confidential, and private categories, ensuring comprehensive encryption coverage.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------------------|------------------------------------------|--------|-------------------------------------------------| |------------------------------------------------------|---------------------------------------------------|--------|-------------------------------------------------|
| version | i64 | | The version of the item. | | version | i64 | | The version of the item. |
| item_type | String | | The type of the item. | | item_type | String | | The type of the item. |
| name | String | | The name of the item. | | name | String | | The name of the item. |
| pagination_number_per_pcd | u32 | | The pagination number per PCD. | | pagination_number_per_ RequestPCD | u32 | | The pagination number per RequestPCD. |
| pcd_item_enc_attribute_public_list | Vec<PcdItemEncAttributePublic> | | List of public encrypted attributes. | | RequestPCD_item_enc_attribute_public_list | Vec< RequestPCDItemEncAttributePublic> | | List of public encrypted attributes. |
| pcd_item_enc_attribute_role_confidential_list | Vec<PcdItemEncAttributeRoleConfidential> | | List of role-confidential encrypted attributes. | | RequestPCD_item_enc_attribute_role_confidential_list | Vec< RequestPCDItemEncAttributeRoleConfidential> | | List of role-confidential encrypted attributes. |
| pcd_item_enc_attribute_private_list | Vec<PcdItemEncAttributePrivate> | | List of private encrypted attributes. | | RequestPCD_item_enc_attribute_private_list | Vec< RequestPCDItemEncAttributePrivate> | | List of private encrypted attributes. |
## 11. <a name='RequestPrd'></a>RequestPrd ## 11. <a name='RequestPRD'></a>RequestPRD
Encapsulates a detailed request within the system, focusing on the interaction with Portable Request Documents (PRD) and specifying various levels of message confidentiality and intended service provider (SP) communication details. Encapsulates a detailed request within the system, focusing on the interaction with Portable Request Documents ( RequestPRD) and specifying various levels of message confidentiality and intended service provider (SP) communication details.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|------------------------------------------------------|-------------|--------|----------------------------------------------------------------------------------------| |-------------------------------------------------------------|-------------|--------|-------------------------------------------------------------------------------------------------|
| request | Request | | A predefined struct representing the basic request information. | | request | Request | | A predefined struct representing the basic request information. |
| sig_value | String | | Valeur associée à la signature | | sig_value | String | | Valeur associée à la signature |
| pcd_keys_role_confidential_list_enc_by_shared_secret | String | | Encrypted list of PCD keys for role-confidential data, encrypted with a shared secret. | | RequestPCD_keys_role_confidential_list_enc_by_shared_secret | String | | Encrypted list of RequestPCD keys for role-confidential data, encrypted with a shared secret. |
| message_public | String | Yes | Optionally specifies a public message associated with the request. | | message_public | String | Yes | Optionally specifies a public message associated with the request. |
| message_confidential | String | Yes | Optionally specifies a confidential message associated with the request. | | message_confidential | String | Yes | Optionally specifies a confidential message associated with the request. |
| message_private | String | Yes | Optionally specifies a private message associated with the request. | | message_private | String | Yes | Optionally specifies a private message associated with the request. |
| sp_address_to | String | | The service provider address to which the request is directed. | | sp_address_to | String | | The service provider address to which the request is directed. |
| sp_address_from | String | | The service provider address from which the request originates. | | sp_address_from | String | | The service provider address from which the request originates. |
| sp_address_reply | String | | The service provider address for replies to the request. | | sp_address_reply | String | | The service provider address for replies to the request. |
| timestamp_declared | u64 | | A Unix timestamp indicating when the request was declared. | | timestamp_declared | u64 | | A Unix timestamp indicating when the request was declared. |
| role_name_from | String | | The name of the role from which the request originates. | | role_name_from | String | | The name of the role from which the request originates. |
| role_name_to | String | | The name of the role to which the request is directed. | | role_name_to | String | | The name of the role to which the request is directed. |
| payment_method_enc_by_shared_secret | String> | Yes | Encrypted payment method, encrypted with a shared secret. | | payment_method_enc_by_shared_secret | String> | Yes | Encrypted payment method, encrypted with a shared secret. |
| deposit_method_enc_by_shared_secret | String> | Yes | Encrypted deposit method, encrypted with a shared secret. | | deposit_method_enc_by_shared_secret | String> | Yes | Encrypted deposit method, encrypted with a shared secret. |
| commitment_method_enc_by_shared_secret | String> | Yes | Encrypted commitment method, encrypted with a shared secret. | | commitment_method_enc_by_shared_secret | String> | Yes | Encrypted commitment method, encrypted with a shared secret. |
| payment_pcd_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for payment-related PCDs. | | payment_ RequestPCD_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for payment-related RequestPCDs. |
| cap_pcd_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for capability-related PCDs. | | cap_ RequestPCD_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for capability-related RequestPCDs. |
| deposit_pcd_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for deposit-related PCDs. | | deposit_ RequestPCD_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for deposit-related RequestPCDs. |
| commitment_pcd_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for commitment-related PCDs. | | commitment_ RequestPCD_hash_list_enc_by_shared_secret | Vec<String> | Yes | A list of hashes for commitment-related RequestPCDs. |
| ask_payment_method_enc_by_shared_secret | String> | Yes | The requested payment method. | | ask_payment_method_enc_by_shared_secret | String> | Yes | The requested payment method. |
| ask_deposit_method_enc_by_shared_secret | String> | Yes | The requested deposit method. | | ask_deposit_method_enc_by_shared_secret | String> | Yes | The requested deposit method. |
| ask_commitment_method_enc_by_shared_secret | String> | Yes | The requested commitment method. | | ask_commitment_method_enc_by_shared_secret | String> | Yes | The requested commitment method. |
| certif_key_enc_by_shared_secret | String> | Yes | Encrypted certification key, encrypted with a shared secret. | | certif_key_enc_by_shared_secret | String> | Yes | Encrypted certification key, encrypted with a shared secret. |
| device_footprint_enc_by_sp_shared_secret | String | | The device footprint encrypted by a service provider's shared secret. | | device_footprint_enc_by_sp_shared_secret | String | | The device footprint encrypted by a service provider's shared secret. |
### 11.1. <a name='RequestPrdResponse'></a>RequestPrdResponse ### 11.1. <a name='RequestPRDResponse'></a>RequestPRDResponse
RequestPrd and its variations (Confirm, KeyBackup, KeyHello, List, Message, Response, Update) represent different aspects and actions related to Portable Request Documents (PRD), covering everything from confirmation to updates, key management, and messaging, essential for managing and processing PRDs securely and efficiently. RequestPRD and its variations (Confirm, KeyBackup, KeyHello, List, Message, Response, Update) represent different aspects and actions related to Portable Request Documents ( RequestPRD), covering everything from confirmation to updates, key management, and messaging, essential for managing and processing RequestPRDs securely and efficiently.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------------|---------------|--------|-----------------------------------------------------------------------------| |-----------------------------------------|---------------|--------|-----------------------------------------------------------------------------|
| requestPrd | RequestRD | | Represents a Request. | | RequestPRD | RequestRD | | Represents a Request. |
| sig_value | String | | The signature value for the response. | | sig_value | String | | The signature value for the response. |
| pcd_origin_hash | String | Yes | Optional hash of the originating PCD. | | RequestPCD_origin_hash | String | Yes | Optional hash of the originating RequestPCD. |
| shared_secret_key | KeyEncryption | Yes | Optional encryption key used for shared secrets. | | shared_secret_key | KeyEncryption | Yes | Optional encryption key used for shared secrets. |
| pcd_new_version_hash | String | | The hash of the new version of the PCD. | | RequestPCD_new_version_hash | String | | The hash of the new version of the RequestPCD. |
| part_1_enc_hash_enc_by_sp_shared_secret | String | Yes | The first part of the hash encrypted by a service provider's shared secret. | | part_1_enc_hash_enc_by_sp_shared_secret | String | Yes | The first part of the hash encrypted by a service provider's shared secret. |
| shard_enc_by_sp_shared_secret | String | Yes | The shard encrypted by a service provider's shared secret. | | shard_enc_by_sp_shared_secret | String | Yes | The shard encrypted by a service provider's shared secret. |
### 11.2. <a name='RequestPrdConfirm'></a>RequestPrdConfirm ### 11.2. <a name='RequestPRDConfirm'></a>RequestPRDConfirm
The RequestPrdConfirm struct is designed for confirming actions or requests within the system, utilizing a Portable Request Document (PRD) alongside an encrypted confirmation code, ensuring secure acknowledgment of operations. The RequestPRDConfirm struct is designed for confirming actions or requests within the system, utilizing a Portable Request Document ( RequestPRD) alongside an encrypted confirmation code, ensuring secure acknowledgment of operations.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------|------------|--------|-----------------------------------------------------| |-----------------------------------|------------|--------|-------------------------------------------------------|
| prd | RequestPrd | | The PRD (Portable Request Document) request. | | RequestPRD | RequestPRD | | The RequestPRD (Portable Request Document) request. |
| code_confirm_enc_by_shared_secret | String | Yes | The confirmation code encrypted by a shared secret. | | code_confirm_enc_by_shared_secret | String | Yes | The confirmation code encrypted by a shared secret. |
### 11.3. <a name='RequestPrdKeyBackup'></a>RequestPrdKeyBackup ### 11.3. <a name='RequestPRDKeyBackup'></a>RequestPRDKeyBackup
RequestPrdKeyBackup focuses on backup functionalities for PRD keys, incorporating device footprint and shard information, encrypted for security, facilitating the safe backup and recovery of crucial cryptographic keys. RequestPRDKeyBackup focuses on backup functionalities for RequestPRD keys, incorporating device footprint and shard information, encrypted for security, facilitating the safe backup and recovery of crucial cryptographic keys.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------------|------------|--------|-----------------------------------------------------------------------------| |-----------------------------------------|------------|--------|-----------------------------------------------------------------------------|
| prd | RequestPrd | | The PRD (Portable Request Document) request. | | RequestPRD | RequestPRD | | The RequestPRD (Portable Request Document) request. |
| part_1_enc_hash_enc_by_sp_shared_secret | String | | The first part of the hash encrypted by a service provider's shared secret. | | part_1_enc_hash_enc_by_sp_shared_secret | String | | The first part of the hash encrypted by a service provider's shared secret. |
| shard_enc_by_sp_shared_secret | String | | The shard encrypted by a service provider's shared secret. | | shard_enc_by_sp_shared_secret | String | | The shard encrypted by a service provider's shared secret. |
### 11.4. <a name='RequestPrdKeyHello'></a>RequestPrdKeyHello ### 11.4. <a name='RequestPRDKeyHello'></a>RequestPRDKeyHello
The RequestPrdKeyHello struct is employed for initiating cryptographic communications, specifically for sharing initial key information or for cryptographic introductions between entities, enhancing secure connections. The RequestPRDKeyHello struct is employed for initiating cryptographic communications, specifically for sharing initial key information or for cryptographic introductions between entities, enhancing secure connections.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|-----------------------------------------|------------|--------|----------------------------------------------------------------------------------| |-----------------------------------------|------------|--------|----------------------------------------------------------------------------------|
| prd | RequestPrd | | Represents a Portable Request Document (PRD). | | RequestPRD | RequestPRD | | Represents a Portable Request Document ( RequestPRD). |
| part_1_enc_hash_enc_by_sp_shared_secret | String | | The encrypted hash of part 1, encrypted by the service provider's shared secret. | | part_1_enc_hash_enc_by_sp_shared_secret | String | | The encrypted hash of part 1, encrypted by the service provider's shared secret. |
### 11.5. <a name='RequestPrdList'></a>RequestPrdList ### 11.5. <a name='RequestPRDList'></a>RequestPRDList
RequestPrdList struct is utilized for listing or querying PRDs, aiding in the retrieval or enumeration of Portable Request Documents within the system, streamlining the management and access of PRDs. RequestPRDList struct is utilized for listing or querying RequestPRDs, aiding in the retrieval or enumeration of Portable Request Documents within the system, streamlining the management and access of RequestPRDs.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|------------|--------|-----------------------------------------| |----------------|------------|--------|-----------------------------------------|
| prd | RequestPrd | | Represents a Portable Request Document. | | RequestPRD | RequestPRD | | Represents a Portable Request Document. |
### 11.6. <a name='RequestPrdMessage'></a>RequestPrdMessage ### 11.6. <a name='RequestPRDMessage'></a>RequestPRDMessage
The RequestPrdMessage struct serves the purpose of encapsulating messages within PRDs, allowing for secure and structured communication of information wrapped in a Portable Request Document. The RequestPRDMessage struct serves the purpose of encapsulating messages within RequestPRDs, allowing for secure and structured communication of information wrapped in a Portable Request Document.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|------------|--------|-----------------------------------------| |----------------|------------|--------|-----------------------------------------|
| prd | RequestPrd | | Represents a Portable Request Document. | | RequestPRD | RequestPRD | | Represents a Portable Request Document. |
### 11.7. <a name='RequestPrdResponse-1'></a>RequestPrdResponse ### 11.7. <a name='RequestPRDResponse-1'></a>RequestPRDResponse
RequestPrdResponse is designed for responding to PRD requests, including the original PRD, signature for verification, and optional encrypted methods, ensuring a secure and verifiable response mechanism. RequestPRDResponse is designed for responding to RequestPRD requests, including the original RequestPRD, signature for verification, and optional encrypted methods, ensuring a secure and verifiable response mechanism.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|------------|--------|-----------------------------------------| |----------------|------------|--------|-----------------------------------------|
| prd | RequestPrd | | Represents a Portable Request Document. | | RequestPRD | RequestPRD | | Represents a Portable Request Document. |
| sig_value | String | | The signature value for the response. | | sig_value | String | | The signature value for the response. |
### 11.8. <a name='RequestPrdUpdate'></a>RequestPrdUpdate ### 11.8. <a name='RequestPRDUpdate'></a>RequestPRDUpdate
RequestPrdUpdate struct facilitates the updating of PRDs, incorporating new version hashes and lists of related PCD hashes, alongside requested methods for payments, deposits, and commitments, ensuring PRDs remain current and relevant. RequestPRDUpdate struct facilitates the updating of RequestPRDs, incorporating new version hashes and lists of related RequestPCD hashes, alongside requested methods for payments, deposits, and commitments, ensuring RequestPRDs remain current and relevant.
| Attribute Name | Type | Option | Description | | Attribute Name | Type | Option | Description |
|----------------|------------|--------|-----------------------------------------| |----------------|------------|--------|-----------------------------------------|
| prd | RequestPrd | | Represents a Portable Request Document. | | RequestPRD | RequestPRD | | Represents a Portable Request Document. |
## 12. <a name='Roles'></a>Roles ## 12. <a name='Roles'></a>Roles

View File

@ -18,15 +18,15 @@ Voir [Doc_references.md](Doc_references.md).
* **4NK**: Système décentralisé innovant basé sur les principes du web 5, centré sur la sécurité des données et l'identité numérique. * **4NK**: Système décentralisé innovant basé sur les principes du web 5, centré sur la sécurité des données et l'identité numérique.
* **Portable Contract Document (PCD)**: Format JSON chiffré destiné à contenir les données relatives aux accords entre parties. * **Portable Contract Document ( RequestPCD)**: Format JSON chiffré destiné à contenir les données relatives aux accords entre parties.
* **Portable Request Document (PRD)**: Format JSON chiffré contenant les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des PCD. * **Portable Request Document ( RequestPRD)**: Format JSON chiffré contenant les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des RequestPCD.
* **Peer**: Terme générique pour représenter un nœud du réseau, pouvant avoir diverses fonctions. * **Peer**: Terme générique pour représenter un nœud du réseau, pouvant avoir diverses fonctions.
* **Relay**: Un serveur web socket qui relaie en peer to peer les messages entre les autres pairs du réseau de relais et avec les clients connectés. * **Relay**: Un serveur web socket qui relaie en peer to peer les messages entre les autres pairs du réseau de relais et avec les clients connectés.
* **Message**: Enveloppe commune au PRD et PCD lorsqu'ils sont transmis au relais. * **Message**: Enveloppe commune au RequestPRD et RequestPCD lorsqu'ils sont transmis au relais.
* **Process**: Contrat off-chain définissant des conditions d'affichage, légales, de validation cryptographique et de rémunération des signatures. * **Process**: Contrat off-chain définissant des conditions d'affichage, légales, de validation cryptographique et de rémunération des signatures.
@ -42,7 +42,7 @@ Voir [Doc_references.md](Doc_references.md).
* **Third parties**: Adresses Silent Payment complétant un `member` pour reconnaître d'autres dispositifs du `member`. * **Third parties**: Adresses Silent Payment complétant un `member` pour reconnaître d'autres dispositifs du `member`.
* **KeyConfidential**: Clé AES-GCM-256 du Diffie-Hellman de la transaction Silent Payment correspondant à un PRD. * **KeyConfidential**: Clé AES-GCM-256 du Diffie-Hellman de la transaction Silent Payment correspondant à un RequestPRD.
* **ProcessKey**: la clé publique de chiffrement public d'un process (dans un `ItemProcess`, dans son attribut `Item`, dans son attribut `metadata_contract_public`, dans son attribut `meta_data`, dans son attribut `key_list` au premier élément). * **ProcessKey**: la clé publique de chiffrement public d'un process (dans un `ItemProcess`, dans son attribut `Item`, dans son attribut `metadata_contract_public`, dans son attribut `meta_data`, dans son attribut `key_list` au premier élément).
@ -78,6 +78,6 @@ Voir [Doc_references.md](Doc_references.md).
## 4. <a name='Data'></a>Data ## 4. <a name='Data'></a>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 membres d'un process et avec son identité `member` récupérée, 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 membres d'un process et avec son identité `member` récupérée, l'objet member et les RequestPCD et RequestPRD 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. * **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 RequestPCD et RequestPRD, dans les navigateurs web.

View File

@ -4,7 +4,7 @@
* 3. [Mot de passe](#Motdepasse) * 3. [Mot de passe](#Motdepasse)
* 4. [Cache](#Cache) * 4. [Cache](#Cache)
* 5. [Chiffrement des communications](#Chiffrementdescommunications) * 5. [Chiffrement des communications](#Chiffrementdescommunications)
* 6. [Confidentialité des PCD et PRD](#ConfidentialitdesPCDetPRD) * 6. [Confidentialité des RequestPCD et RequestPRD](#Confidentialitdes RequestPCDet RequestPRD)
* 7. [Confidentialité des messages sur les relais](#Confidentialitdesmessagessurlesrelais) * 7. [Confidentialité des messages sur les relais](#Confidentialitdesmessagessurlesrelais)
* 8. [Clé de chiffrement robuste](#Cldechiffrementrobuste) * 8. [Clé de chiffrement robuste](#Cldechiffrementrobuste)
* 8.1. [Résistance aux attaques cryptanalytiques](#Rsistanceauxattaquescryptanalytiques) * 8.1. [Résistance aux attaques cryptanalytiques](#Rsistanceauxattaquescryptanalytiques)
@ -65,29 +65,29 @@ Stockage sécurisé du cache par un chiffrement par le mot de passe.
Le chiffrement du transport des données se fait par TLS entre les clients et le noeuds entrants pour palier aux restrictions sur les flux non TLS par les navigateurs et les applications mobiles. Le chiffrement du transport des données se fait par TLS entre les clients et le noeuds entrants pour palier aux restrictions sur les flux non TLS par les navigateurs et les applications mobiles.
Néanmoins tous les messages chiffrent les PCD et PRD avec une clé de chiffrement conforme aux exigences suivantes et échangée dans le Diffie-Hellman de la transaction SP, en parallèle donc des flux PCD et PRD. Ces clés ne sont accessibles donc qu'avec la clé privée du destinataire ou de l'émetteur, qui ne sont jamais partagées. Néanmoins tous les messages chiffrent les RequestPCD et RequestPRD avec une clé de chiffrement conforme aux exigences suivantes et échangée dans le Diffie-Hellman de la transaction SP, en parallèle donc des flux RequestPCD et RequestPRD. Ces clés ne sont accessibles donc qu'avec la clé privée du destinataire ou de l'émetteur, qui ne sont jamais partagées.
## 6. <a name='ConfidentialitdesPCDetPRD'></a>Confidentialité des PCD et PRD ## 6. <a name='Confidentialitdes RequestPCDet RequestPRD'></a>Confidentialité des RequestPCD et RequestPRD
Le stockage chiffré de cache est un chiffrement symétrique conformément aux exigences suivantes. Le stockage chiffré de cache est un chiffrement symétrique conformément aux exigences suivantes.
Le chiffrement des PCD est un chiffrement symétrique conformément aux exigences suivantes. Le chiffrement des clés de chiffrement dans les PRD est un chiffrement symétrique conformément aux exigences suivantes selon : Le chiffrement des RequestPCD est un chiffrement symétrique conformément aux exigences suivantes. Le chiffrement des clés de chiffrement dans les RequestPRD est un chiffrement symétrique conformément aux exigences suivantes selon :
* **Données publiques**: un chiffrement symétrique conformément aux exigences suivantes depuis la `ProcessKey`. Tout le monde peut donc déchiffrer. * **Données publiques**: un chiffrement symétrique conformément aux exigences suivantes depuis la `ProcessKey`. Tout le monde peut donc déchiffrer.
* **Données confidentielles avec les membres d'un `role` d'un `process` dans les PCD**: un chiffrement symétrique conformément aux exigences suivantes depuis une clé de chiffrement générée à la volée par champs par items d'une liste d'un PCD. * **Données confidentielles avec les membres d'un `role` d'un `process` dans les RequestPCD**: un chiffrement symétrique conformément aux exigences suivantes depuis une clé de chiffrement générée à la volée par champs par items d'une liste d'un RequestPCD.
* **Données confidentielles avec les membres d'un `role` d'un `process` dans les PRD**: un chiffrement symétrique conformément aux exigences suivantes depuis les clés de chiffrement AES-GCM-256 générée à la volée dans les PCD et alors transmises par le PRD, chiffrées par la `KeyConfiditial` d'une transaction `SP`. * **Données confidentielles avec les membres d'un `role` d'un `process` dans les RequestPRD**: un chiffrement symétrique conformément aux exigences suivantes depuis les clés de chiffrement AES-GCM-256 générée à la volée dans les RequestPCD et alors transmises par le RequestPRD, chiffrées par la `KeyConfiditial` d'une transaction `SP`.
* **Données privées**: un chiffrement symétrique conformément aux exigences suivantes depuis le chiffrement par la clé de spend de login (`recover`) du signet (voir Login - Specs). * **Données privées**: un chiffrement symétrique conformément aux exigences suivantes depuis le chiffrement par la clé de spend de login (`recover`) du signet (voir Login - Specs).
## 7. <a name='Confidentialitdesmessagessurlesrelais'></a>Confidentialité des messages sur les relais ## 7. <a name='Confidentialitdesmessagessurlesrelais'></a>Confidentialité des messages sur les relais
Les PCD et les PRD sont envoyés aux relais dans des enveloppes appelées `Message`. Les RequestPCD et les RequestPRD sont envoyés aux relais dans des enveloppes appelées `Message`.
Ces enveloppent communique les `PCD` et les `PRD` de façon chiffrée par la `ProcessKey`. Ainsi les messages sont rendus fongibles sur le réseau de relais. Ces enveloppent communique les `RequestPCD` et les `RequestPRD` de façon chiffrée par la `ProcessKey`. Ainsi les messages sont rendus fongibles sur le réseau de relais.
Tous les `PRD` (sauf les `PRDKeyBackup`), sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`. Tous les `RequestPRD` (sauf les `RequestPRDKeyBackup`), sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
Les relais peuvent déchiffrer les enveloppes avec la `ProcessKey`, le contenu étant chiffré en plus en fonction des niveaux de confidentialité. L'objectif du chiffrage des enveloppe est de donner, un temps, un coût et une complexité aux analyses systématiques des flux. Les relais peuvent déchiffrer les enveloppes avec la `ProcessKey`, le contenu étant chiffré en plus en fonction des niveaux de confidentialité. L'objectif du chiffrage des enveloppe est de donner, un temps, un coût et une complexité aux analyses systématiques des flux.

View File

@ -9,7 +9,7 @@ pub struct ConditionPublish {
pub pcd_number_min: i32, pub pcd_number_min: i32,
pub pcd_number_max: i32, pub pcd_number_max: i32,
pub pcd_amount_max_total: Amount, pub pcd_amount_max_total: Amount,
pub prd_waiting_timeout: u64, pub RequestPRD_waiting_timeout: u64,
pub pcd_waiting_timeout: u64, pub pcd_waiting_timeout: u64,
} }
@ -20,7 +20,7 @@ impl ConditionPublish {
pcd_number_min: i32, pcd_number_min: i32,
pcd_number_max: i32, pcd_number_max: i32,
pcd_amount_max_total: Amount, pcd_amount_max_total: Amount,
prd_waiting_timeout: u64, RequestPRD_waiting_timeout: u64,
pcd_waiting_timeout: u64, pcd_waiting_timeout: u64,
) -> Self { ) -> Self {
ConditionPublish { ConditionPublish {
@ -29,7 +29,7 @@ impl ConditionPublish {
pcd_number_min, pcd_number_min,
pcd_number_max, pcd_number_max,
pcd_amount_max_total, pcd_amount_max_total,
prd_waiting_timeout, RequestPRD_waiting_timeout,
pcd_waiting_timeout, pcd_waiting_timeout,
} }
} }
@ -40,7 +40,10 @@ impl ConditionPublish {
println!("PCD Number Min: {}", self.pcd_number_min); println!("PCD Number Min: {}", self.pcd_number_min);
println!("PCD Number Max: {}", self.pcd_number_max); println!("PCD Number Max: {}", self.pcd_number_max);
self.pcd_amount_max_total.display_info(); self.pcd_amount_max_total.display_info();
println!("PRD Waiting Timeout: {}", self.prd_waiting_timeout); println!(
" RequestPRD Waiting Timeout: {}",
self.RequestPRD_waiting_timeout
);
println!("PCD Waiting Timeout: {}", self.pcd_waiting_timeout); println!("PCD Waiting Timeout: {}", self.pcd_waiting_timeout);
} }
} }

View File

@ -11,7 +11,7 @@ use crate::models::{
shared_peer::SharedPeer, shared_process::SharedProcess, shared_peer::SharedPeer, shared_process::SharedProcess,
}; };
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, FromForm)] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ProcessRoleSpAddressGroup { pub struct ProcessRoleSpAddressGroup {
pub sp_address_list: Vec<String>, pub sp_address_list: Vec<String>,
pub role_name: String, pub role_name: String,
@ -30,7 +30,7 @@ impl ProcessRoleSpAddressGroup {
} }
} }
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, FromForm)] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PcdItemEncAttributeRoleConfidentialExportKey { pub struct PcdItemEncAttributeRoleConfidentialExportKey {
pub attribute_name: String, pub attribute_name: String,