definition Silent Payments Address added (doc)
This commit is contained in:
parent
b4b5c8bbdb
commit
739db56d15
@ -26,7 +26,7 @@ git push -uf origin main
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Invite team Members and collaborators](https://docs.gitlab.com/ee/user/project/Members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
|
@ -30,7 +30,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
|
||||
* 12.1.1. [Gestion de la clé servant à l'ID `spend_recover`](#GestiondelaclservantlIDspend_recover)
|
||||
* 12.1.2. [Backup de `Part2Enc`](#BackupdePart2Enc)
|
||||
* 12.1.3. [Onboarding](#Onboarding-1)
|
||||
* 12.2. [Member complété des champs du process sélectionné et mise à jour de la liste des membres du process](#Membercompltdeschampsduprocessslectionnetmisejourdelalistedesmembresduprocess)
|
||||
* 12.2. [Member complété des champs du process sélectionné et mise à jour de la liste des Members du process](#MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess)
|
||||
* 12.3. [Process complété de l'address SP de l'utilisateur et mise à jour de la liste des version du process](#ProcesscompltdeladdressSPdelutilisateuretmisejourdelalistedesversionduprocess)
|
||||
* 12.4. [Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)](#RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn)
|
||||
* 13. [Clés de révocation (`revoke`)](#Clsdervocationrevoke)
|
||||
@ -89,11 +89,11 @@ Voir [_Doc_references.md](_Doc_references.md).
|
||||
|
||||
## 7. <a name='Authentificationdesutilisateurs'></a>Authentification des utilisateurs
|
||||
|
||||
Les utilisateurs doivent pouvoir s'authentifier en utilisant un mot de passe et les données `exif` d'une image dite `recover` mise en cache dans IndexedDB (données chiffrées par le mot de passe cf. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)) pour les navigateurs et les applications mobiles, sinon chiffré de la même manière mais en mémoire pour tous autres dispositifs dont l'IoT et une partie venant de membres choisi par les gestionnaires des membres des `Process` .
|
||||
Les utilisateurs doivent pouvoir s'authentifier en utilisant un mot de passe et les données `exif` d'une image dite `recover` mise en cache dans IndexedDB (données chiffrées par le mot de passe cf. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)) pour les navigateurs et les applications mobiles, sinon chiffré de la même manière mais en mémoire pour tous autres dispositifs dont l'IoT et une partie venant de Members choisi par les gestionnaires des Members des `Process` .
|
||||
|
||||
Le système utilisera les clés cryptographiques de Bitcoin pour une authentification sécurisée via un HD Wallet transparent, intégrant le concept de Silent Payments pour éviter la réutilisation d'adresses. Les annuaires présents par rôles dans les contrats sont des listes d'adresses Silent Payments avec leurs `third parties` (autres device de confirmation des actions en `2FA`).
|
||||
|
||||
Les utilisateurs sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des identités. Par process, les identités appelées techniquement `member`.
|
||||
Les utilisateurs sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des identités. Par process, les identités appelées techniquement `Member`.
|
||||
|
||||
Chaque relais permet d'accéder à la liste des process, de créer, recomposer (`recover`) et révoquer (`revoke`) une identité, et de la compléter par `Process` dans lequel l'utilisateur a un rôle (`onboarding`).
|
||||
|
||||
@ -101,13 +101,13 @@ Chaque relais permet d'accéder à la liste des process, de créer, recomposer (
|
||||
|
||||
Le système offrira la possibilité de se connecter via des services tiers (tels que OAuth2, avec Google, GitHub, etc.), permettant une intégration fluide avec les écosystèmes existants sans dégrader l'expérience utilisateur.
|
||||
|
||||
Pour cela, les flux de 4NK agissent en "proxy" transparent devant les flux API des services concernés, et les tokens d'accès sont ajoutés aux données de `member`. En parrallèle des flux existant, les hash des requêtes API et de leurs réponses sont signés des clés des parties prenantes pour une vérification de la conformité des données par rapport aux `Process` 4NK.
|
||||
Pour cela, les flux de 4NK agissent en "proxy" transparent devant les flux API des services concernés, et les tokens d'accès sont ajoutés aux données de `Member`. En parrallèle des flux existant, les hash des requêtes API et de leurs réponses sont signés des clés des parties prenantes pour une vérification de la conformité des données par rapport aux `Process` 4NK.
|
||||
|
||||
## 9. <a name='Fonctionnalitdercuprationdemotdepasse'></a>Fonctionnalité de récupération de mot de passe
|
||||
|
||||
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 depuis une adresse de révocation `revoke`.
|
||||
|
||||
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 pour signaler aux autres membres de `Process` de ne plus prendre en compte les transactions venant de l'adresse silent payment actuelle du membre.
|
||||
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 pour signaler aux autres Members de `Process` de ne plus prendre en compte les transactions venant de l'adresse silent payment actuelle du Member.
|
||||
|
||||
## 10. <a name='Gestiondesessionbasesuruncache'></a>Gestion de session basée sur un cache
|
||||
|
||||
@ -173,7 +173,7 @@ Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Vo
|
||||
`Part2` est la partie distribuée :
|
||||
|
||||
* le mot de passe "hashé"
|
||||
* une seed de générée aléatoirement répartie par un Shamir Secret Sharing, chiffrée pour chaque partie par le mot de passe et distribuées en 1 pour 1 aux membres actuels du rôle de gestionnaire des membres.
|
||||
* une seed de générée aléatoirement répartie par un Shamir Secret Sharing, chiffrée pour chaque partie par le mot de passe et distribuées en 1 pour 1 aux Members actuels du rôle de gestionnaire des Members.
|
||||
|
||||
Encryption speudo code :
|
||||
|
||||
@ -186,33 +186,33 @@ imageLogin.addExif(part1_spend_recover_enc, random_seed1, random_seed2)
|
||||
pre_id=sha256(part1_spend_recover_enc, MDP, random_seed)
|
||||
```
|
||||
|
||||
2. Création d'un `PrdList` par membre (1 shard par membre) par `Prd` cf [PRD-PCD](PRD-PCD-Specs.md PRD-PCD) :
|
||||
2. Création d'un `PrdList` par Member (1 shard par Member) par `Prd` cf [PRD-PCD](PRD-PCD-Specs.md PRD-PCD) :
|
||||
|
||||
#### 12.1.2. <a name='BackupdePart2Enc'></a>Backup de `Part2Enc`
|
||||
|
||||
Les relais initialisent le SDK (Wasm) par défaut avec une liste `ProcessList` contenant `Process` choisi.
|
||||
|
||||
Chacun de des managers des 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 au `PrdList` envoyé.
|
||||
Chacun de des managers des Members sera responsable de d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `PrdResponse` en réponse au `PrdList` envoyé.
|
||||
|
||||
#### 12.1.3. <a name='Onboarding-1'></a>Onboarding
|
||||
|
||||
### 12.2. <a name='Membercompltdeschampsduprocessslectionnetmisejourdelalistedesmembresduprocess'></a>Member complété des champs du process sélectionné et mise à jour de la liste des membres du process
|
||||
### 12.2. <a name='MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess'></a>Member complété des champs du process sélectionné et mise à jour de la liste des Members du process
|
||||
|
||||
Le role `member` de `Process` sélectionné contient un `Item` avec des `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` contenant chacun une `render_template_list` dont le premier élément du tableau est le formulaire de création de l'identité pour champs concernés (publiques ou confidentiels ou privés).
|
||||
Le role `Member` de `Process` sélectionné contient un `Item` avec des `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` contenant chacun une `render_template_list` dont le premier élément du tableau est le formulaire de création de l'identité pour champs concernés (publiques ou confidentiels ou privés).
|
||||
|
||||
Ces formulaires permettront de créé les champs attendus par `condition_attribute_encryption_list` dans le role `Member` de `Process` sélectionné, dans `Member` de l'utilisateur (champs dans `data` des attribut `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` correpsondants).
|
||||
|
||||
Une fois `Member` complété, il est ajouté à la liste des membres pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Member` du `Process` sélectionné via un `PrdUpdate`.
|
||||
Une fois `Member` complété, il est ajouté à la liste des Members pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Member` du `Process` sélectionné via un `PrdUpdate`.
|
||||
|
||||
### 12.3. <a name='ProcesscompltdeladdressSPdelutilisateuretmisejourdelalistedesversionduprocess'></a>Process complété de l'address SP de l'utilisateur et mise à jour de la liste des version du process
|
||||
|
||||
Pour le ou les roles sélectionnés, l'attribut `request_prd_sp_address_list` de `condition_prd_address_set_list` est complété par l'adresse SP de l'utilisateur.
|
||||
|
||||
Une fois `Process` complété, il est ajouté à la liste des membres pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Process` du `Process` sélectionné via un `PrdUpdate`.
|
||||
Une fois `Process` complété, il est ajouté à la liste des Members pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Process` du `Process` sélectionné via un `PrdUpdate`.
|
||||
|
||||
### 12.4. <a name='RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn'></a>Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)
|
||||
|
||||
Envoi d'un `PrdList` pour chaque membre de chaque rôle du process sélectionné.
|
||||
Envoi d'un `PrdList` pour chaque Member de chaque rôle du process sélectionné.
|
||||
|
||||
## 13. <a name='Clsdervocationrevoke'></a>Clés de révocation (`revoke`)
|
||||
|
||||
@ -224,30 +224,30 @@ L'envoi d'une révocation est identique à la création d'une nouvelle adresse v
|
||||
|
||||
Au moment de l'update de `Member` il est possible de charger des addresses SP de third parties pour lesquelles l'utilisateur a un rôle dans un `Process`. Ces adresses sont ajoutées avec les labels et éventuellement les empreintes des dispositifs correspondants dans l'objet `Member`.
|
||||
|
||||
Les clés privées associées sont générées lors de l'update d'un 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 Member, à la validation de l'update il est possible de télécharger des images correspondantes (clés + hash du process) dans une interface 2FA.
|
||||
|
||||
Lorsqu'une transaction est reçue sur l'application de 2FA, celle-ci demande de confirmer ou non. Si il y a une confirmation dans l'interface alors une transaction SP est envoyée au dispositif initial, en dépensant l'UTXO reçue et avec les mêmes Hash dans les outputs que la transaction reçue afin que le dispositif initial puisse collecter les `Prd` concernés.
|
||||
|
||||
## 15. <a name='Connexionsavecuneidentitcrerecover'></a>Connexions avec une identité crée (`recover`)
|
||||
|
||||
Pour recrééer sa clé privée et envoyer un `PrdList` à 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 `PrdList` à chaque Member du rôle `Member` du process, il faut réaliser les opérations suivantes :
|
||||
|
||||
1. Récupération de Part1Enc en cache
|
||||
2. Création de la `pre_id` avec le mot de passe
|
||||
|
||||
Puis depuis la liste des membres du process, pour chacun des membres :
|
||||
Puis depuis la liste des Members du process, pour chacun des Members :
|
||||
|
||||
1. Création de `PrdList` à destination du membre 1.
|
||||
2. Création de `Message` du `PrdList` à destination du membre.
|
||||
3. Envoi de la transaction SP du `Message` du `PrdList` à destination du membre avec la `pre_id`.
|
||||
4. Envoi du `Message` du `PrdList` à destination du membre.
|
||||
1. Création de `PrdList` à destination du Member 1.
|
||||
2. Création de `Message` du `PrdList` à destination du Member.
|
||||
3. Envoi de la transaction SP du `Message` du `PrdList` à destination du Member avec la `pre_id`.
|
||||
4. Envoi du `Message` du `PrdList` à destination du Member.
|
||||
5. Attente de la validation (`PrdResponse`) du `PrdUpdate`.
|
||||
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PrdResponse`.
|
||||
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
|
||||
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_confidential` des `PrdResponse` de chaque member du `Role` `Member`du `Process`.
|
||||
6.2. Déchiffrement par secret partagé de chaque shard reçu dans `id_shard_info_confidential` des `PrdResponse` de chaque Member du `Role` `Member`du `Process`.
|
||||
6.3. Recomposition de `Part2Enc` et déchiffrement par le mot de passe
|
||||
6.4. Concaténation de `Part1` et `Part2`
|
||||
7. Réception des flux PCD et PRDResponse des gestionnaires des membres
|
||||
7. Réception des flux PCD et PRDResponse des gestionnaires des Members
|
||||
|
||||
## 16. <a name='ExemplesdeCode'></a>Exemples de Code
|
||||
|
||||
|
@ -192,7 +192,7 @@ Pour discuter avec les relais du réseau et faire relayer des `Pcd` et des `Prd`
|
||||
|
||||
L'utilisateur envoie un message de type `MessageConnect` à chaque relais pour se connecter. Ensuite, il peut envoyer des `Message` à chacun des quatre relais connectés et recevoir des `Message` de leur part.
|
||||
|
||||
Il y a des doublons de messages pour chaque relais, à la fois envoyés et reçus. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de membres par un système de réputation calculable de manière autonome en rapport à sa propre expérience. L'arbitrage repose sur une réponse devant satisfaire au moins 80% de la même réponse que celle des relais connectés pour le même message. Les valeurs des arbitrages sont stockées dans le cache.
|
||||
Il y a des doublons de messages pour chaque relais, à la fois envoyés et reçus. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de Members par un système de réputation calculable de manière autonome en rapport à sa propre expérience. L'arbitrage repose sur une réponse devant satisfaire au moins 80% de la même réponse que celle des relais connectés pour le même message. Les valeurs des arbitrages sont stockées dans le cache.
|
||||
|
||||
Pour se connecter, l'utilisateur récupère leurs caractéristiques depuis la liste de relais partagée `PeerList` du SDK (Wasm) et depuis les listes de relais non partagées `private` et `public` du cache.
|
||||
|
||||
|
@ -91,7 +91,7 @@ Les `Prd` sont des demandes d'actions ou des réponses à ces demandes, interagi
|
||||
* `PrdConfirm` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm` eux-mêmes).
|
||||
* `PrdResponse` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm`, `PrdResponse` eux-mêmes). Dans le cas d'une réponse à un `PrdList` ou d'un `PrdUpdate`, le `PrdResponse` doit obligatoirement être accompagné d'un `Pcd`.
|
||||
|
||||
Selon le type de `Prd`, les demandes peuvent s'adresser à tous les membres de `Process`, aux gestionnaires du type d'`Item` concerné ou simplement à l'émetteur, selon :
|
||||
Selon le type de `Prd`, les demandes peuvent s'adresser à tous les Members de `Process`, aux gestionnaires du type d'`Item` concerné ou simplement à l'émetteur, selon :
|
||||
|
||||
* `PrdList` : Envoyé aux gestionnaires du type d'`Item` concerné.
|
||||
* `PrdMessage`, avec 2 cas de figure :
|
||||
@ -101,7 +101,7 @@ Selon le type de `Prd`, les demandes peuvent s'adresser à tous les membres de `
|
||||
* `PrdConfirm` : Envoyé à l'émetteur du `Prd` associé.
|
||||
* `PrdResponse`, avec 2 cas de figure :
|
||||
* Réponse à un `PrdList` : envoyée à l'émetteur du `PrdList`.
|
||||
* Réponse à un `PrdUpdate` : envoyée à tous les membres et à l'émetteur du `PrdUpdate`.
|
||||
* Réponse à un `PrdUpdate` : envoyée à tous les Members et à l'émetteur du `PrdUpdate`.
|
||||
|
||||
Les traitements pour l'envoi des `Prd` varient selon leur type, principalement autour des aspects suivants :
|
||||
|
||||
@ -109,7 +109,7 @@ Les traitements pour l'envoi des `Prd` varient selon leur type, principalement a
|
||||
* **Notification user** : Nécessité de notifier l'utilisateur courant, ou non.
|
||||
* **`transaction SP` + `PrdMessage`** : Envoi d'une `transaction SP` dans un `PrdMessage`, ou non.
|
||||
* **`Pcd` to send** : Envoi d'un `Pcd` en complément du `Prd`.
|
||||
* **`request_type` send to** : Membres qui recevront les `transaction SP` et les `PrdMessage` correspondants, avec les clés de déchiffrement pour les champs confidentiels.
|
||||
* **`request_type` send to** : Members qui recevront les `transaction SP` et les `PrdMessage` correspondants, avec les clés de déchiffrement pour les champs confidentiels.
|
||||
* **`Pcd` reply waiting** : Attente d'un `Pcd` en retour, ou non.
|
||||
* **`PrdResponse` reply waiting** : Attente d'un ou de plusieurs `PrdResponse` en retour, ou non.
|
||||
* **`PrdConfirm` reply waiting** : Attente d'un `PrdConfirm` en retour, ou non.
|
||||
@ -118,9 +118,9 @@ Ce qui est résumé pour l'envoi :
|
||||
|
||||
| `request_type` | Notification user | `transaction SP` + `PrdMessage` | `Pcd` to send | `request_type` send to | `Pcd` reply waiting | `PrdResponse` reply waiting | `PrdConfirm` reply waiting |
|
||||
|----------------------|-----------------------------------------------------------------------------------|----------------------------------------|----------------------|-----------------------------------------------------------------|----------------------------|------------------------------------|-----------------------------------|
|
||||
| `PrdList` | No | Yes | No | all the members of the `item_name` `Role` into to `Process` | Yes | Yes | Yes |
|
||||
| `PrdUpdate` | waiting `sig_value` | Yes | Yes | all the members of all `Role` into to `Process` | No | Yes | Yes |
|
||||
| `PrdMessage` | waiting `sig_value` + `message_public`, `message_confidential`, `message_private` | if no `raw_transaction_list` | No | a member of the `Process` | No | No | if no `raw_transaction_list` |
|
||||
| `PrdList` | No | Yes | No | all the Members of the `item_name` `Role` into to `Process` | Yes | Yes | Yes |
|
||||
| `PrdUpdate` | waiting `sig_value` | Yes | Yes | all the Members of all `Role` into to `Process` | No | Yes | Yes |
|
||||
| `PrdMessage` | waiting `sig_value` + `message_public`, `message_confidential`, `message_private` | if no `raw_transaction_list` | No | a Member of the `Process` | No | No | if no `raw_transaction_list` |
|
||||
| `PrdResponse` | waiting `sig_value` | Yes | No | See Received | No | No | Yes |
|
||||
| `PrdConfirm` | (option) Waiting `code_confirm_confidential` | Yes | No | See Received | No | No | No |
|
||||
|
||||
@ -136,8 +136,8 @@ Ce qui est résumé Pour la réception :
|
||||
|
||||
| `request_type` | Notification user | `PrdConfirm` to send | `Pcd` to send | `PrdResponse` to send | `PrdResponse` reply waiting | `PrdConfirm` reply waiting (from `PrdResponse` send ) |
|
||||
|----------------------|-----------------------------------|------------------------------|----------------------|-----------------------------------------------------------------|------------------------------------|---------------------------------------------------------------------|
|
||||
| `PrdList` | No | Yes | Yes | all the members of the `item_name` `Role` into to `Process` | No | Yes |
|
||||
| `PrdUpdate` | Prd | Yes | No | all the members of all `Role` into to `Process` | Yes (other members) | Yes |
|
||||
| `PrdList` | No | Yes | Yes | all the Members of the `item_name` `Role` into to `Process` | No | Yes |
|
||||
| `PrdUpdate` | Prd | Yes | No | all the Members of all `Role` into to `Process` | Yes (other Members) | Yes |
|
||||
| `PrdMessage` | Waiting `PrdMessage` reply | if no `raw_transaction_list` | No | No | No | No |
|
||||
| `PrdResponse` | Prd | Yes | No | No | No | No |
|
||||
| `PrdConfirm` | Prd | No | No | No | No | No |
|
||||
@ -152,16 +152,16 @@ Les `Metadata` des `Item` des `Pcd` et les attributs des `Pcd` et `Prd` sont chi
|
||||
|
||||
* **Données publiques** : Utilisent un chiffrement symétrique basé sur la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)). Ces données sont ainsi accessibles à tous pour le déchiffrement.
|
||||
|
||||
* **Données confidentielles destinées aux membres d'un `role` spécifique d'un `Process` dans les Pcd** : Le chiffrement est réalisé symétriquement à partir d'une clé de chiffrement générée à la volée pour chaque champ et pour chaque item d'une liste d'un `Pcd`. Ces clés seront ensuite ajoutées aux `Prd` dans l'attribut `Pcd_keys_role_confidential_list_confidential`; lui même alors chiffré par la `KeyConfidential`.
|
||||
* **Données confidentielles destinées aux Members d'un `role` spécifique d'un `Process` dans les Pcd** : Le chiffrement est réalisé symétriquement à partir d'une clé de chiffrement générée à la volée pour chaque champ et pour chaque item d'une liste d'un `Pcd`. Ces clés seront ensuite ajoutées aux `Prd` dans l'attribut `Pcd_keys_role_confidential_list_confidential`; lui même alors chiffré par la `KeyConfidential`.
|
||||
|
||||
* **Données confidentielles destinées aux membres d'un `role` spécifique d'un `Process` dans les Prd** : Utilisent un chiffrement symétrique basé sur les clés de chiffrement AES-GCM-256, générées à la volée dans les `Pcd` et transmises par le `Prd`, chiffrées par la `KeyConfidential` du Diffie-Hellman de la transaction Silent Payments associée à ce `Prd` (cf. [Specs-Definition](SpecsDefinition.md)) d'une transaction `SP`.
|
||||
* **Données confidentielles destinées aux Members d'un `role` spécifique d'un `Process` dans les Prd** : Utilisent un chiffrement symétrique basé sur les clés de chiffrement AES-GCM-256, générées à la volée dans les `Pcd` et transmises par le `Prd`, chiffrées par la `KeyConfidential` du Diffie-Hellman de la transaction Silent Payments associée à ce `Prd` (cf. [Specs-Definition](SpecsDefinition.md)) d'une transaction `SP`.
|
||||
|
||||
* **Données privées** : Chiffrées symétriquement en utilisant la clé de dépense de connexion (`recover`) du signet (voir Login - Specs).
|
||||
|
||||
Principaux champs des `Request` contenus dans les `Pcd` et `Prd` chiffrés :
|
||||
|
||||
* **`request_type`** : Type de requête : `Pcd`, `PrdList`, `PrdMessage`, `PrdUpdate`, `PrdConfirm`, `PrdResponse`.
|
||||
* **`item_name`** : Noms des items : `peer`, `member`, `process`, `Payments`, `deposit`, `commit`, et les `artefact` personnalisés.
|
||||
* **`item_name`** : Noms des items : `peer`, `Member`, `process`, `Payments`, `deposit`, `commit`, et les `artefact` personnalisés.
|
||||
* **`version`** : Version de la requête.
|
||||
* **`process_hash`** : Hash de `Process` concerné.
|
||||
* **`request_pcd_reference_hash`** : Hash du `Pcd` auquel le `Prd` fait référence.
|
||||
@ -174,7 +174,7 @@ Principaux champs des `Request` contenus dans les `Pcd` et `Prd` chiffrés :
|
||||
|
||||
Les Portable Contract Documents (`Pcd`) sont des documents au format `JSON` encapsulant des listes versionnées d'`Item`, dont les attributs sont chiffsrés selon trois niveaux de confidentialité : public, par rôles spécifiques, ou privé. (cf. [Specs-Security.md](Specs-Security.md)).
|
||||
|
||||
Les `Item` échangés via les `Pcd` sont soumis à une vérification par les `PrdResponse` dans le but de contrôler la validité de ces données et leur conformité avec les `Process` et les `member` du `Role` concerné.
|
||||
Les `Item` échangés via les `Pcd` sont soumis à une vérification par les `PrdResponse` dans le but de contrôler la validité de ces données et leur conformité avec les `Process` et les `Member` du `Role` concerné.
|
||||
|
||||
Principaux champs des `Pcd` :
|
||||
|
||||
@ -251,7 +251,7 @@ Schéma de finalisation de la réception d'un `Pcd` :
|
||||
|
||||
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_confidential`. Ils sont utilisés pour solliciter des actions spécifiques, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
|
||||
|
||||
Les clés permettant le chiffrement des attributs confidentiels par rôles des `Item` dans les `Pcd` sont elles-mêmes chiffrées dans les `Prd` au moyen du chiffrement du `Prd` par la clé `KeyConfidential` d'une `transaction SP` (cf. [Specs-Security.md](Specs-Security.md)). Ces clés sont uniquement distribuées aux `members` concernés par les `Item` des `Pcd` (rôles dans les `Process`).
|
||||
Les clés permettant le chiffrement des attributs confidentiels par rôles des `Item` dans les `Pcd` sont elles-mêmes chiffrées dans les `Prd` au moyen du chiffrement du `Prd` par la clé `KeyConfidential` d'une `transaction SP` (cf. [Specs-Security.md](Specs-Security.md)). Ces clés sont uniquement distribuées aux `Members` concernés par les `Item` des `Pcd` (rôles dans les `Process`).
|
||||
|
||||
Les `Prd` se déclinent en plusieurs types, tels que `PrdList`, `PrdMessage`, `PrdUpdate`, etc., correspondant à différentes actions comme l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
|
||||
|
||||
@ -322,7 +322,7 @@ Schéma de finalisation de la réception d'un `Prd` :
|
||||
|
||||
## 11. <a name='PrdList-DemandedeListes'></a>PrdList - Demande de Listes
|
||||
|
||||
Utile pour les utilisateurs souhaitant 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, tels que les `Process`, les `Member`, les `Peer`, les `Payments`, etc.
|
||||
Utile pour les utilisateurs souhaitant consulter ou explorer des listes de contrats, de Members, ou d'autres items dans le réseau. Chaque `Pcd` liste des `Item` d'un même type, tels que les `Process`, les `Member`, les `Peer`, les `Payments`, etc.
|
||||
|
||||
Workflow:
|
||||
|
||||
@ -338,7 +338,7 @@ Principaux champs des `PrdList` :
|
||||
|
||||
Dans le cas d'une création de compte :
|
||||
|
||||
* **`item_member_enc_by_sp_shared_secret`** : Nouvel `Member` temporaire,chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
|
||||
* **`item_Member_enc_by_sp_shared_secret`** : Nouvel `Member` temporaire,chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
|
||||
|
||||
`Member` temporaire contient les métadonnées de type `Metadata` suivantes :
|
||||
|
||||
@ -402,7 +402,7 @@ Basé sur le `Prd`, avec des ajouts pour spécifier les modifications demandées
|
||||
|
||||
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, la mise à jour de la liste des membres permet d'ajouter de nouveaux utilisateurs à un `Process`, et la mise à jour de la liste des `Process` permet de leur affecter un nouveau `Role`.
|
||||
Par exemple, la mise à jour de la liste des Members permet d'ajouter de nouveaux utilisateurs à un `Process`, et la mise à jour de la liste des `Process` permet de leur affecter un nouveau `Role`.
|
||||
|
||||
Les `PrdUpdate` signalent au réseau, via l'attribut `Pcd_new_version_hash`, les nouvelles versions des `Pcd`.
|
||||
|
||||
|
@ -83,7 +83,7 @@ La structure RolesGroup est essentielle pour définir et gérer les groupes de r
|
||||
#### 7.1.1. <a name='CompositionetFonction'></a>Composition et Fonction
|
||||
|
||||
* **role_peer**: Définit le rôle des pairs dans le réseau, responsables de la facilitation des communications et des transactions.
|
||||
* **role_member**: Spécifie le rôle des membres, ou utilisateurs, qui participent activement dans les processus et les interactions.
|
||||
* **role_Member**: Spécifie le rôle des Members, ou utilisateurs, qui participent activement dans les processus et les interactions.
|
||||
* **role_process**: Représente les entités chargées de définir et de gérer les processus au sein du système.
|
||||
* **role_artefact_list**: Une liste de rôles d'artefacts, permettant la personnalisation et l'extension des fonctionnalités et des interactions au-delà des rôles standards.
|
||||
|
||||
@ -167,14 +167,14 @@ L'Process et ProcessPublicAttributeGroup offrent un cadre pour l'intégration et
|
||||
|
||||
A l'issue d'un délai `validation_timeout` par `Role` et par * `request_prd_type`, les `PrdRequest` sont collectés afin de vérifier les conditions de validation par roles sont définies en fonction des critères suivants :
|
||||
|
||||
Les membres concernés sont identifiés par leurs `adresse SP`.
|
||||
Les Members concernés sont identifiés par leurs `adresse SP`.
|
||||
|
||||
### 11.1. <a name='Participants'></a> Participants
|
||||
|
||||
* `request_prd_sp_address_list`: Liste des `adresse SP` (cumulatif avec `from_role`)
|
||||
* `request_prd_sp_address_required_list`: Liste des `adresse SP` requises (toutes valeurs confondues)
|
||||
* `request_prd_sp_address_quota`: Quota minmum de `adresse SP` participantes (toutes valeurs confondues)
|
||||
* `request_prd_sp_address_score_min`: Score minimal des membres participants (toutes valeurs confondues)
|
||||
* `request_prd_sp_address_score_min`: Score minimal des Members participants (toutes valeurs confondues)
|
||||
|
||||
### 11.2. <a name='Valeursdessignaturessig_value'></a> Valeurs des signatures (`sig_value`)
|
||||
|
||||
@ -199,8 +199,8 @@ Les membres concernés sont identifiés par leurs `adresse SP`.
|
||||
|
||||
### 11.4. <a name='Minimumsetmaximumsdescores'></a>Minimums et maximums de scores
|
||||
|
||||
* (option)`request_prd_sp_address_score_min_min_ok`: Nombre de membres avec un score minimum et une valeur valant pour "OK"
|
||||
* (option)`request_prd_sp_address_score_min_min_per`:: Pourcentage de membres avec un score minimum et une valeur valant pour "OK"
|
||||
* (option)`request_prd_sp_address_score_min_min_ok`: Nombre de Members avec un score minimum et une valeur valant pour "OK"
|
||||
* (option)`request_prd_sp_address_score_min_min_per`:: Pourcentage de Members avec un score minimum et une valeur valant pour "OK"
|
||||
|
||||
* (option)`request_prd_sp_address_value_min`: Valeur minimal valant pour "OK" (cas de nombres)
|
||||
* (option) `from_role` : `address SP` de ce `Role` (pour éviter de dupliquer les `addresse SP`)
|
||||
|
@ -15,7 +15,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
|
||||
* 6. [Interface Client Web](#InterfaceClientWeb)
|
||||
* 6.1. [Structure HTML de Base](#StructureHTMLdeBase)
|
||||
* 6.2. [Page de création d'une identité numérique (create)](#Pagedecrationduneidentitnumriquecreate)
|
||||
* 6.2.1. [Page de sélection de `Process` et des membres en charge de renvoyer les shards de la clé `recover`](#PagedeslectiondelProcessetdesmembresenchargederenvoyerlesshardsdelaclrecover)
|
||||
* 6.2.1. [Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`](#PagedeslectiondelProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover)
|
||||
* 6.2.2. [Page d'enrolement dans un `Process` (`onboarding`)](#PagedenrolementdansunProcessonboarding)
|
||||
* 6.2.3. [Page de téléchargement des images de login des third parties](#Pagedetlchargementdesimagesdelogindesthirdparties)
|
||||
* 6.3. [Page de récupération d'une identité numérique (`recover`)](#Pagedercuprationduneidentitnumriquerecover)
|
||||
@ -110,7 +110,7 @@ Cadre HML commun aux pages des relais :
|
||||
|
||||
### 6.2. <a name='Pagedecrationduneidentitnumriquecreate'></a>Page de création d'une identité numérique (create)
|
||||
|
||||
#### 6.2.1. <a name='PagedeslectiondelProcessetdesmembresenchargederenvoyerlesshardsdelaclrecover'></a>Page de sélection de `Process` et des membres en charge de renvoyer les shards de la clé `recover`
|
||||
#### 6.2.1. <a name='PagedeslectiondelProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover'></a>Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`
|
||||
|
||||
#### 6.2.2. <a name='PagedenrolementdansunProcessonboarding'></a>Page d'enrolement dans un `Process` (`onboarding`)
|
||||
|
||||
|
@ -73,13 +73,13 @@ Pour des raison de confidentialité, le `Role` associé à `item_name` du `Prd`
|
||||
|
||||
Afin d'améliorer la rélisience du broadcast des transactions, la transaction est envoyée à la fois :
|
||||
|
||||
1. Dans un `PrdMessage` à un membre du rôle `member` du `Process` concerné et
|
||||
1. Dans un `PrdMessage` à un Member du rôle `Member` du `Process` concerné et
|
||||
2. Dans le `Message` du `PrdMessage` sur les relais
|
||||
|
||||
### 8.1. <a name='DansunPrdMessage'></a>Dans un `PrdMessage`
|
||||
|
||||
Dans l'attribut `raw_transaction_list` du `PrdMessage` associé à la transaction SP.
|
||||
La transaction sera broadcastée par les noeuds de signet du membre du `Role` `member` du `Process` concerné qui a reçu ce message, il devra alors avoir un noeud de signet pour le broadcast.
|
||||
La transaction sera broadcastée par les noeuds de signet du Member du `Role` `Member` du `Process` concerné qui a reçu ce message, il devra alors avoir un noeud de signet pour le broadcast.
|
||||
|
||||
### 8.2. <a name='DansunMessageduPrdMessage'></a>Dans un `Message` du `PrdMessage`
|
||||
|
||||
@ -94,7 +94,7 @@ Puis il ajoute le tweak data de la transaction Silent Payments, puis il envoie l
|
||||
Puis le relais relaient les transactions dans le format suivant :
|
||||
|
||||
* **raw_tx**: La transaction en hexadécimal
|
||||
* **pubkey**: La clé publique du membre qui a envoyé la transaction
|
||||
* **pubkey**: La clé publique du Member qui a envoyé la transaction
|
||||
|
||||
Le même procédé existe pour les blocs :
|
||||
|
||||
|
@ -250,13 +250,13 @@ Les processus doivent continuer malgré des "sous" traitements/threads en échec
|
||||
|
||||
Stratégie de gestion des erreurs et de reporting pour faciliter le débogage et améliorer la résilience du système.
|
||||
|
||||
Tous les flux sont reçus par autant de relais et de membres de même rôles. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de membres par un système de réputation calculable par chacun de façon autonome en rapport à sa propre expérience.
|
||||
Tous les flux sont reçus par autant de relais et de Members de même rôles. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de Members par un système de réputation calculable par chacun de façon autonome en rapport à sa propre expérience.
|
||||
|
||||
Les arrêts de la blockchain dans son ensemble n'entraînent pas d'interruption de service, car les horodatages sont non bloquants, l'impact est une diminution de la preuve le temps de "ré-ancrer" ce qui n'aurait pas pu l'être. L'arrêt de nœuds de la blockchain pourrait ralentir la propagation des informations dans les scénarios les plus critiques, sans impact majeur sur le fonctionnement.
|
||||
|
||||
Les arrêts des membres dans les `Process` dans leur ensemble n'entraînent pas d'interruption de service, les confirmations restent en attente, toujours relayées jusqu'au rétablissement des services. L'arrêt de membres des rôles critiques des `Process` pourrait empêcher le démarrage des services et pour les gestionnaires des membres, l'accès au réseau pour les utilisateurs n'ayant qu'un processus connu avec un rôle dedans. Cela n'entraîne pas une perte des données. Cette incapacité pourrait venir corrompre des signatures attendues dans un délai. Dans ce cas, le rôle "resolve" des `Process` est en charge de l'arbitrage pour la bonne restitution des actions.
|
||||
Les arrêts des Members dans les `Process` dans leur ensemble n'entraînent pas d'interruption de service, les confirmations restent en attente, toujours relayées jusqu'au rétablissement des services. L'arrêt de Members des rôles critiques des `Process` pourrait empêcher le démarrage des services et pour les gestionnaires des Members, l'accès au réseau pour les utilisateurs n'ayant qu'un processus connu avec un rôle dedans. Cela n'entraîne pas une perte des données. Cette incapacité pourrait venir corrompre des signatures attendues dans un délai. Dans ce cas, le rôle "resolve" des `Process` est en charge de l'arbitrage pour la bonne restitution des actions.
|
||||
|
||||
Les parties prenantes ont tous les moyens organisationnels dans les process, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des membres des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
|
||||
Les parties prenantes ont tous les moyens organisationnels dans les process, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des Members des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
|
||||
|
||||
## 7. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring
|
||||
|
||||
|
@ -468,7 +468,7 @@ Pseudo-code:
|
||||
|
||||
* **```Process(Process)```**: Contains an item of type Process, representing a process.
|
||||
* **```Peer(Peer)```**: Contains an item of type Peer, representing a peer.
|
||||
* **```Member(Member)```**: Contains an item of type Member, representing a member.
|
||||
* **```Member(Member)```**: Contains an item of type Member, representing a Member.
|
||||
* **```Payments(Payments)```**: Contains an item of type Payments, representing a Payments.
|
||||
* **```Deposit(Deposit)```**: Contains an item of type Deposit, representing a deposit.
|
||||
* **```Artefact(Artefact)```**: Contains an item of type Artefact, representing an artefact.
|
||||
@ -1298,7 +1298,7 @@ Pseudo-code:
|
||||
| Attribute Name | Type | Option |
|
||||
| ------------------------------------- | ---------------- | ------ |
|
||||
| `request_prd` | ```Prd``` | |
|
||||
| `item_member_enc_by_sp_shared_secret` | ```String``` | Yes |
|
||||
| `item_Member_enc_by_sp_shared_secret` | ```String``` | Yes |
|
||||
| `pagination_start` | ```Number``` | Yes |
|
||||
| `pagination_stop` | ```Number``` | Yes |
|
||||
| `sub_pagination_start` | ```Number``` | Yes |
|
||||
@ -1309,7 +1309,7 @@ Pseudo-code:
|
||||
```json
|
||||
{
|
||||
"request_prd": Prd,
|
||||
"item_member_enc_by_sp_shared_secret": "",
|
||||
"item_Member_enc_by_sp_shared_secret": "",
|
||||
"pagination_start": 0,
|
||||
"pagination_stop": 0,
|
||||
"sub_pagination_start": 0,
|
||||
@ -1663,7 +1663,7 @@ RolesGroup outlines a collection of roles.
|
||||
| Attribute Name | Type | Option |
|
||||
| -------------------- | ----------------------- | ------ |
|
||||
| `role_peer` | ```RolePeer``` | |
|
||||
| `role_member` | ```RoleMember``` | |
|
||||
| `role_Member` | ```RoleMember``` | |
|
||||
| `role_process` | ```RoleProcess``` | |
|
||||
| `role_artefact_list` | ```Vec<RoleArtefact>``` | |
|
||||
|
||||
@ -1672,7 +1672,7 @@ Pseudo-code:
|
||||
```json
|
||||
{
|
||||
"role_peer": RolePeer,
|
||||
"role_member": RoleMember,
|
||||
"role_Member": RoleMember,
|
||||
"role_process": RoleProcess,
|
||||
"role_artefact_list": []
|
||||
}
|
||||
@ -2086,7 +2086,7 @@ Pseudo-code:
|
||||
| Attribute Name | Type | Option |
|
||||
| -------------- | ----------------- | ------ |
|
||||
| `hash` | ```String``` | |
|
||||
| `members` | ```Vec<String>``` | |
|
||||
| `Members` | ```Vec<String>``` | |
|
||||
| `index` | ```usize``` | |
|
||||
|
||||
Pseudo-code:
|
||||
@ -2094,7 +2094,7 @@ Pseudo-code:
|
||||
```json
|
||||
{
|
||||
"hash": "",
|
||||
"members": [],
|
||||
"Members": [],
|
||||
"index": 0
|
||||
}
|
||||
```
|
||||
@ -2367,7 +2367,7 @@ Pseudo-code:
|
||||
| `ask_commit_method_decrypted` | ```String``` | |
|
||||
| `certif_key_decrypted` | ```String``` | |
|
||||
| `device_footprint_decrypted` | ```String``` | |
|
||||
| `item_member_decrypted` | ```String``` | |
|
||||
| `item_Member_decrypted` | ```String``` | |
|
||||
| `pre_id_sp_decrypted` | ```String``` | |
|
||||
|
||||
Pseudo-code:
|
||||
@ -2394,7 +2394,7 @@ Pseudo-code:
|
||||
"ask_commit_method_decrypted": "",
|
||||
"certif_key_decrypted": "",
|
||||
"device_footprint_decrypted": "",
|
||||
"item_member_decrypted": "",
|
||||
"item_Member_decrypted": "",
|
||||
"pre_id_sp_decrypted": ""
|
||||
}
|
||||
]
|
||||
|
@ -33,8 +33,6 @@ Voir [_Doc_references.md](_Doc_references.md).
|
||||
|
||||
* **Relay** : Serveurs ou noeuds spéciaux dans le réseau 4NK qui facilitent la communication peer-to-peer et la diffusion de transactions et de messages entre les utilisateurs et la blockchain. Les relais jouent un rôle crucial dans l'acheminement des informations et dans le maintien de la décentralisation du réseau.
|
||||
|
||||
* **Contract/Process** : Dans le contexte de 4NK, un contrat (souvent appelé smart contract) désigne un ensemble de règles codées et stockées et vérifiée côté client à la différence des principales blockchains. Ces règles automatisent l'exécution des accords et des transactions strictement par et entre les parties prenantes, garantissant l'intégrité et la transparence des interactions au sein de la plateforme Web 5.0. Ces contrats étant formulés dans objets `Process` avec une semantique explicite des attributs et des règles; les systèmes peuvent exploiter les contrats directement dans le système d'informatione et la notion de contrat est fusionnée avec celle processus.
|
||||
|
||||
* **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`)**: Un format `JSON` chiffré conçu pour contenir des listes d'éléments d'un type spécifique, attachées à un processus (`process_hash`) et soumises aux règles de validation décrites dans le rôle correspondant à ce type d'`Item` dans le `Process` (`item_type`).
|
||||
@ -60,21 +58,23 @@ Voir [_Doc_references.md](_Doc_references.md).
|
||||
|
||||
* **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.
|
||||
|
||||
* **Process**: Contrat off-chain définissant des conditions d'affichage, légales, de validation cryptographique et de rémunération des signatures au global et par `Role`.
|
||||
* **Process**: Contrat off-chain définissant des conditions d'affichage, légales, de validation cryptographique et de rémunération des signatures au global et par `Role`. Dans le contexte de 4NK, un contrat (souvent appelé smart contract) désigne un ensemble de règles codées et stockées et vérifiée côté client à la différence des principales blockchains. Ces règles automatisent l'exécution des accords et des transactions strictement par et entre les parties prenantes, garantissant l'intégrité et la transparence des interactions au sein de la plateforme Web 5.0. Ces contrats étant formulés dans objets `Process` avec une semantique explicite des attributs et des règles; les systèmes peuvent exploiter les contrats directement dans le système d'informatione et la notion de contrat est fusionnée avec celle processus.
|
||||
*
|
||||
* **Role**: Un `Role` décrit le type d'`Item` dans les listes (`PCD`) versionnées et gérées par ces `membre` identifiés par leur adresse silent payment. Le `Role` décrit aussi les conditions des conditions d'affichage, légales, de validation et chiffrement de ces listes. Parmi ces conditions, certaines actions peuvent requièrir d'autres `Item` de type `Payment`, `Commit` ou `Deposit` pour être validées; dans ces cas, ces objets sont eux même soumis à règle du `Role` correspondant.
|
||||
* **Role**: Un `Role` décrit le type d'`Item` dans les listes (`PCD`) versionnées et gérées par ces `Member` identifiés par leur adresse silent payment. Le `Role` décrit aussi les conditions des conditions d'affichage, légales, de validation et chiffrement de ces listes. Parmi ces conditions, certaines actions peuvent requièrir d'autres `Item` de type `Payment`, `Commit` ou `Deposit` pour être validées; dans ces cas, ces objets sont eux même soumis à règle du `Role` correspondant.
|
||||
|
||||
* **Silent Payments Address**: Adresse Bitcoin utilisée pour les transactions Silent Payments, permettant de recevoir et d'envoyer des fonds de manière confidentielle. C'est aussi l'identifiant des `Member` dans les `Process` tel un annuaire, et les flux.
|
||||
|
||||
* **Utilisateur**: Client connecté pouvant être un navigateur, une application mobile, un logiciel, ou un IoT, utilisé par un humain ou une machine.
|
||||
|
||||
* **Recover**: Action de recomposer une identité numérique (clés privées).
|
||||
|
||||
* **Revoke**: Action de révoquer des clés privées et d'en proposer de nouvelles (en cas de révocation, expirations, pertes ou vols). Une adresse de révocation est stockée dans les données exifs d'une image générée avec l'image de login. Cette image doit être conservée en sécurité car elle permet de dépenser un UTXO d'une`adresse SP` indiquée dans son `member` comme le signal pour les autres parties prenantes qu'une autre identité doit être prise en compte pour ce membre.
|
||||
* **Revoke**: Action de révoquer des clés privées et d'en proposer de nouvelles (en cas de révocation, expirations, pertes ou vols). Une adresse de révocation est stockée dans les données exifs d'une image générée avec l'image de login. Cette image doit être conservée en sécurité car elle permet de dépenser un UTXO d'une`adresse SP` indiquée dans son `Member` comme le signal pour les autres parties prenantes qu'une autre identité doit être prise en compte pour ce Member.
|
||||
|
||||
* **Onboard**: Action de demander un `rôle` dans un `Process` .
|
||||
|
||||
* **Member**: Une adresse Silent Payments, complétée de métadonnées, par `Process` et d'une adresse supplémentaire pour la révocation.
|
||||
|
||||
* **Third parties**:`adresse SP` complétant un `member` pour reconnaître d'autres dispositifs du `member`.
|
||||
* **Third parties**:`adresse SP` complétant un `Member` pour reconnaître d'autres dispositifs du `Member`.
|
||||
|
||||
* **Autres termes propres à 4nk**: voir Specs-Datas.md.
|
||||
|
||||
@ -108,7 +108,7 @@ Cette norme est aujourd'hui utilisée pour le hachage de mot de passe (associé
|
||||
|
||||
## 7. <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 Members 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.
|
||||
|
||||
* **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.
|
||||
|
||||
|
@ -86,9 +86,9 @@ Le chiffrement des `Pcd` est un chiffrement symétrique conformément aux exigen
|
||||
|
||||
* **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 Members 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 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 Members 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 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).
|
||||
|
||||
@ -190,7 +190,7 @@ La manière dont les clés sont générées, stockées, distribuées, révoquée
|
||||
|
||||
Les clés seront générées strictement par l'utilisateur et feront l'objet d'un traitement `MPC` avec un chiffrement des parties par le mot de passe connu de l'utilisateur seul et jamais stocké.
|
||||
|
||||
Les parties sont pour la moitié stockées dans le contexte utilisateur (chiffrées par le mot de passe) et pour une autre partie, chiffrées en morceaux (`Shamir Secret Sharing`) (chiffrés par le mot de passe) et distribuées par les membres choisis d'un `Process` choisi par le rôle des gestionnaires des listes de membres (`member`) en charge de restituer ces morceaux à la demande.
|
||||
Les parties sont pour la moitié stockées dans le contexte utilisateur (chiffrées par le mot de passe) et pour une autre partie, chiffrées en morceaux (`Shamir Secret Sharing`) (chiffrés par le mot de passe) et distribuées par les Members choisis d'un `Process` choisi par le rôle des gestionnaires des listes de Members (`Member`) en charge de restituer ces morceaux à la demande.
|
||||
|
||||
L'utilisateur seul peut détruire une clé de révocation (`revoke`) ou supprimer l'image de login qui contient la première partie de la clé de login, indispensable pour recomposer sa clé.
|
||||
|
||||
@ -200,13 +200,13 @@ Le temps de réponse doit être rapide pour les opérations de login. Ce temps s
|
||||
|
||||
## 15. <a name='Disponibilit'></a>Disponibilité
|
||||
|
||||
La haute disponibilité et la reprise après sinistre sont permises par la redondance des `relais` sans système central ou critique et robustes à la défaillance d'une partie des participants. C'est idem pour la redondance au sein des `membres` des gestionnaires des membres dans les `processus`, qui ont tous des actions égales et robustes à la défaillance d'une partie des participants.
|
||||
La haute disponibilité et la reprise après sinistre sont permises par la redondance des `relais` sans système central ou critique et robustes à la défaillance d'une partie des participants. C'est idem pour la redondance au sein des `Members` des gestionnaires des Members dans les `processus`, qui ont tous des actions égales et robustes à la défaillance d'une partie des participants.
|
||||
|
||||
En cas de perte, vol, corruption, ou expiration des clés, l'utilisateur peut de son initiative et en toute autonomie révoquer une identité et en générer une nouvelle.
|
||||
|
||||
## 16. <a name='volutivit'></a>Évolutivité
|
||||
|
||||
La capacité à gérer une augmentation du nombre d'`utilisateurs` est un équilibre arbitré par les parties prenantes, en fonction du besoin de `relais` et de `membres`. Les parties prenantes ont les moyens d'enrôler par eux-mêmes les relais et les membres par `rôles` et par `Process` .
|
||||
La capacité à gérer une augmentation du nombre d'`utilisateurs` est un équilibre arbitré par les parties prenantes, en fonction du besoin de `relais` et de `Members`. Les parties prenantes ont les moyens d'enrôler par eux-mêmes les relais et les Members par `rôles` et par `Process` .
|
||||
|
||||
## 17. <a name='AutresMesuresdescurit'></a>Autres Mesures de sécurité
|
||||
|
||||
|
@ -498,7 +498,7 @@
|
||||
<mxCell id="U1iS4aTrDNJz4kT7s3QN-311" value="Relay - side chain node required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1484.3200000000002" y="771.0000000000001" width="214.32" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-284" value="<b>`item_member_enc_by_sp_shared_secret`</b><br>(only for member managers)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-284" value="<b>`item_Member_enc_by_sp_shared_secret`</b><br>(only for Member managers)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1320" y="423" width="260" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-285" value="Members" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||
|
@ -51,7 +51,7 @@
|
||||
<mxPoint x="-843" y="525.8333333333335" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="204" value="PrdUpdate<br><b>member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="204" value="PrdUpdate<br><b>Member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1280.4914331962004" y="511" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="228" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
@ -133,7 +133,7 @@
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-316" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1545.7457165981" y="500.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-317" value="Pcd<br><b>member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-317" value="Pcd<br><b>Member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1527.4914331962004" y="510.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-318" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="228" edge="1">
|
||||
@ -551,7 +551,7 @@
|
||||
<mxPoint x="-1241" y="250" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-247" value="member managers" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-247" value="Member managers" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1288.72" y="309.99999999999994" width="100" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-252" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="W0tqueod3XqBArbf31HU-251" target="fIN9LJIhpEY6EGzNKIPz-350" edge="1">
|
||||
|
@ -564,7 +564,7 @@
|
||||
<mxPoint x="-777.25" y="391" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-1" value="<b>`pre_id_sp_confidential`</b><br style="border-color: var(--border-color);">(only for member managers)<b><br></b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-1" value="<b>`pre_id_sp_confidential`</b><br style="border-color: var(--border-color);">(only for Member managers)<b><br></b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1246.24" y="159.71" width="236.19" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-2" value="To all roles" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||
@ -666,7 +666,7 @@
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-33" value="<b style="border-color: var(--border-color); text-align: center;">KeyRecoverScan</b><br style="border-color: var(--border-color); font-weight: 400; text-align: center;"><span style="font-weight: normal;">Decrypt</span>" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
|
||||
<mxGeometry x="-396.9999999999999" y="13" width="149.75" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-35" value="PCD item_name=member<br>-&gt; Member (sp addess of the user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-35" value="PCD item_name=Member<br>-&gt; Member (sp addess of the user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="-558.03" y="148" width="250" height="30.71" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="I9sp5S672SgGMplcR-zX-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
|
File diff suppressed because one or more lines are too long
@ -286,7 +286,7 @@
|
||||
<mxCell id="473" value="Generate privates keys (<b>spend</b> &amp; scan) for signet recover<br><br>Generate privates keys (spend &amp; scan) for signet revoke<br><br>Generate privates keys (spend &amp; scan) for mainnet" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="5" vertex="1">
|
||||
<mxGeometry y="119" width="190" height="111" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="474" value="Split the signet recover spend key in 2 part (middle):<br><br>Part 1 : encrypted by the password, saved into the cache (indexedDB)<br><br>Part 2 : encrypted by the password,+ sharding<br>1 shard &lt;-&gt; 1 member" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="5" vertex="1">
|
||||
<mxCell id="474" value="Split the signet recover spend key in 2 part (middle):<br><br>Part 1 : encrypted by the password, saved into the cache (indexedDB)<br><br>Part 2 : encrypted by the password,+ sharding<br>1 shard &lt;-&gt; 1 Member" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="5" vertex="1">
|
||||
<mxGeometry y="278" width="190" height="111" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="8" value="" style="strokeWidth=1;shadow=0;dashed=0;align=center;html=1;shape=mxgraph.mockup.containers.browserWindow;rSize=0;strokeColor=#666666;strokeColor2=#008cff;strokeColor3=#c4c4c4;mainText=,;recursiveResize=0;" parent="1" vertex="1">
|
||||
@ -936,7 +936,7 @@
|
||||
<mxPoint x="610" y="1150" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="427" value="<div>Send a PRDList</div><div>to all members of all process selected<br></div><br>Reveived<br>PRDResponse +<br>PCD of Processes versions" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="427" value="<div>Send a PRDList</div><div>to all Members of all process selected<br></div><br>Reveived<br>PRDResponse +<br>PCD of Processes versions" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="570" y="690" width="120" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="430" value="" style="strokeWidth=1;shadow=0;dashed=0;align=center;html=1;shape=mxgraph.mockup.containers.browserWindow;rSize=0;strokeColor=#666666;strokeColor2=#008cff;strokeColor3=#c4c4c4;mainText=,;recursiveResize=0;" parent="1" vertex="1">
|
||||
@ -979,7 +979,7 @@
|
||||
<mxCell id="439" value="Processes" style="strokeWidth=1;shadow=0;dashed=0;align=center;html=1;shape=mxgraph.mockup.forms.anchor;fontSize=12;fontColor=#9999ff;align=left;spacingLeft=0;fontStyle=4;resizeWidth=1;" parent="433" vertex="1">
|
||||
<mxGeometry x="110" y="7.4789109698824205" width="50" height="25.210531400966183" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="450" value="Select all members of all process of the relay<br><div style="height: 216px;" class="module--translations-translatedtext js-module--translations-translatedtext is-placeholder">automatically </div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="433" vertex="1">
|
||||
<mxCell id="450" value="Select all Members of all process of the relay<br><div style="height: 216px;" class="module--translations-translatedtext js-module--translations-translatedtext is-placeholder">automatically </div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="433" vertex="1">
|
||||
<mxGeometry x="42" y="228" width="110" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="465" value="CREATE" style="strokeWidth=1;shadow=0;dashed=0;align=center;html=1;shape=mxgraph.mockup.forms.rrect;rSize=5;strokeColor=none;fontColor=#ffffff;fillColor=#66bbff;fontSize=16;fontStyle=1;" parent="433" vertex="1">
|
||||
@ -1000,16 +1000,16 @@
|
||||
<mxCell id="470" value="Select 1 process" style="text;whiteSpace=wrap;html=1;" parent="430" vertex="1">
|
||||
<mxGeometry x="351" y="319" width="119" height="31" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="460" value="Form template of the first contract selected<br>with member role (default)<br><br>fill all public fields into the template<br><br>The form is the first element into the public render_list of the member role" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="460" value="Form template of the first contract selected<br>with Member role (default)<br><br>fill all public fields into the template<br><br>The form is the first element into the public render_list of the Member role" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="1270" y="600" width="110" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="462" value="<div>Send a PRDUpdate and a PCD for a new version with the user Member object into the member list to the member list managers<br></div><div><br></div><div>Send a PRDUpdate and a PCD for a new version with the user sp address into the membrers into the process list to the process list managers<br></div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="462" value="<div>Send a PRDUpdate and a PCD for a new version with the user Member object into the Member list to the Member list managers<br></div><div><br></div><div>Send a PRDUpdate and a PCD for a new version with the user sp address into the Memberrs into the process list to the process list managers<br></div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="2027" y="806" width="130" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="463" value="Receive all the PRDResponses<br><br>Send to all the members to all the roles a PRDList<br><br>Received all the PCD updated with the PRDRespponses with the encryption keys for confidential fields" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="463" value="Receive all the PRDResponses<br><br>Send to all the Members to all the roles a PRDList<br><br>Received all the PCD updated with the PRDRespponses with the encryption keys for confidential fields" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="2600" y="480.5" width="130" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="464" value="Send to all the members to all the roles a PRDList<br><br>Received all the PCD updated with the PRDRespponses with the encryption keys for confidential fields<br><br><div>Member send shards into the PRDResponse&nbsp;</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="464" value="Send to all the Members to all the roles a PRDList<br><br>Received all the PCD updated with the PRDRespponses with the encryption keys for confidential fields<br><br><div>Member send shards into the PRDResponse&nbsp;</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="590" y="10" width="160" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
|
@ -726,7 +726,7 @@
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-305" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="1382.5" y="736" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-306" value="to Role member n" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-306" value="to Role Member n" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="1400" y="663" width="116" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="MqokN8DVP6Cu9g1BAX3J-307" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
|
||||
|
@ -165,7 +165,7 @@
|
||||
<mxCell id="jpdV1vV9o7sr3iGcI0SG-14" value="<span style="color: rgb(0, 0, 0);">PRDUpdate</span><br>TX_Sp" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||
<mxGeometry x="530" y="380.00432432432433" width="120" height="40.54054054054054" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="jpdV1vV9o7sr3iGcI0SG-22" value="All members" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||
<mxCell id="jpdV1vV9o7sr3iGcI0SG-22" value="All Members" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||
<mxGeometry x="920" y="259" width="120" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="LOf2kzUJCjnGt1oEqNkA-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="LOf2kzUJCjnGt1oEqNkA-4" target="jpdV1vV9o7sr3iGcI0SG-36" edge="1">
|
||||
|
@ -498,7 +498,7 @@
|
||||
<mxCell id="U1iS4aTrDNJz4kT7s3QN-311" value="Relay - side chain node required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1484.3200000000002" y="771.0000000000001" width="214.32" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-284" value="<b>`item_member_enc_by_sp_shared_secret`</b><br>(only for member managers)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-284" value="<b>`item_Member_enc_by_sp_shared_secret`</b><br>(only for Member managers)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1320" y="423" width="260" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="KGCLxLdSfCaxDo2TsfCf-285" value="Members" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||
|
@ -51,7 +51,7 @@
|
||||
<mxPoint x="-843" y="525.8333333333335" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="204" value="PrdUpdate<br><b>member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="204" value="PrdUpdate<br><b>Member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1280.4914331962004" y="511" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="228" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
@ -133,7 +133,7 @@
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-316" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1545.7457165981" y="500.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-317" value="Pcd<br><b>member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-317" value="Pcd<br><b>Member</b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1527.4914331962004" y="510.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fIN9LJIhpEY6EGzNKIPz-318" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="228" edge="1">
|
||||
@ -551,7 +551,7 @@
|
||||
<mxPoint x="-1241" y="250" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-247" value="member managers" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-247" value="Member managers" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1288.72" y="309.99999999999994" width="100" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="W0tqueod3XqBArbf31HU-252" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="W0tqueod3XqBArbf31HU-251" target="fIN9LJIhpEY6EGzNKIPz-350" edge="1">
|
||||
|
@ -564,7 +564,7 @@
|
||||
<mxPoint x="-777.25" y="391" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-1" value="<b>`pre_id_sp_confidential`</b><br style="border-color: var(--border-color);">(only for member managers)<b><br></b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-1" value="<b>`pre_id_sp_confidential`</b><br style="border-color: var(--border-color);">(only for Member managers)<b><br></b>" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="-1246.24" y="159.71" width="236.19" height="29" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-2" value="To all roles" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||
@ -666,7 +666,7 @@
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-33" value="<b style="border-color: var(--border-color); text-align: center;">KeyRecoverScan</b><br style="border-color: var(--border-color); font-weight: 400; text-align: center;"><span style="font-weight: normal;">Decrypt</span>" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
|
||||
<mxGeometry x="-396.9999999999999" y="13" width="149.75" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-35" value="PCD item_name=member<br>-&gt; Member (sp addess of the user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-35" value="PCD item_name=Member<br>-&gt; Member (sp addess of the user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="-558.03" y="148" width="250" height="30.71" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="I9sp5S672SgGMplcR-zX-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
|
@ -69,7 +69,7 @@ impl Item {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.metadata_contract_public
|
||||
@ -77,7 +77,7 @@ impl Item {
|
||||
|
||||
let enc_metadata_role_confidential = self.metadata_role_confidential.enc_list();
|
||||
|
||||
let enc_metadata_private = self.metadata_private.enc_list(member_private_enc_key);
|
||||
let enc_metadata_private = self.metadata_private.enc_list(Member_private_enc_key);
|
||||
|
||||
PcdItemEnc::new(
|
||||
self.version,
|
||||
|
@ -76,7 +76,7 @@ impl Artefact {
|
||||
}
|
||||
pub fn enc_private_attribute_group(
|
||||
&self,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
@ -85,7 +85,7 @@ impl Artefact {
|
||||
let name = "index".to_owned() + &count.to_string();
|
||||
let value = serde_json::to_value(private_attribute).unwrap_or_else(|_| json!({}));
|
||||
let enc_attribute =
|
||||
PcdItemEncAttributePrivate::new(name, member_private_enc_key.enc(value));
|
||||
PcdItemEncAttributePrivate::new(name, Member_private_enc_key.enc(value));
|
||||
enc_attribute_list.push(enc_attribute);
|
||||
count += 1;
|
||||
}
|
||||
@ -96,18 +96,18 @@ impl Artefact {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public =
|
||||
self.enc_public_attribute_group(process_public_enc_key.clone());
|
||||
|
||||
let enc_role_confidential_attribute_group = self.enc_role_confidential_attribute_group();
|
||||
|
||||
let enc_metadata_private = self.enc_private_attribute_group(member_private_enc_key.clone());
|
||||
let enc_metadata_private = self.enc_private_attribute_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
Some(enc_role_confidential_attribute_group),
|
||||
Some(enc_metadata_private),
|
||||
|
@ -154,12 +154,12 @@ impl CommitPrivateAttributeGroup {
|
||||
payload_list_private,
|
||||
}
|
||||
}
|
||||
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
pub fn enc_group(&self, Member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let payload_list_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"payload_list_private".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
Member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(payload_list_private_enc);
|
||||
|
||||
@ -201,7 +201,7 @@ impl Commit {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.public_attribute_group
|
||||
@ -212,11 +212,11 @@ impl Commit {
|
||||
|
||||
let enc_metadata_private = self
|
||||
.private_attribute_group
|
||||
.enc_group(member_private_enc_key.clone());
|
||||
.enc_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
Some(enc_role_confidential_attribute_group),
|
||||
Some(enc_metadata_private),
|
||||
|
@ -187,18 +187,18 @@ impl DepositPrivateAttributeGroup {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
pub fn enc_group(&self, Member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let payload_list_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"payload_list_private".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
Member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(payload_list_private_enc);
|
||||
|
||||
let audit_code_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"audit_code_private".to_owned(),
|
||||
member_enc_key.enc_string(self.audit_code_private.clone()),
|
||||
Member_enc_key.enc_string(self.audit_code_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(audit_code_private_enc);
|
||||
|
||||
@ -239,7 +239,7 @@ impl Deposit {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.public_attribute_group
|
||||
@ -250,11 +250,11 @@ impl Deposit {
|
||||
|
||||
let enc_metadata_private = self
|
||||
.private_attribute_group
|
||||
.enc_group(member_private_enc_key.clone());
|
||||
.enc_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
Some(enc_role_confidential_attribute_group),
|
||||
Some(enc_metadata_private),
|
||||
|
@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use super::{
|
||||
item_artefact::Artefact, item_commit::Commit, item_deposit::Deposit,
|
||||
item_member::Member, item_Payments::Payments, item_peer::Peer,
|
||||
item_Member::Member, item_Payments::Payments, item_peer::Peer,
|
||||
item_process::Process,
|
||||
};
|
||||
|
||||
|
@ -225,66 +225,66 @@ impl MemberPrivateAttributeGroup {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
pub fn enc_group(&self, Member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let Payments_method_list_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"Payments_method_list_private".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.Payments_method_list_private.clone()),
|
||||
Member_enc_key.enc_vec_string(self.Payments_method_list_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(Payments_method_list_private_enc);
|
||||
|
||||
let pcd_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"pcd_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.pcd_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.pcd_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(pcd_list_enc);
|
||||
|
||||
let prd_list_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_list_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_list_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_list_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_list_list_enc);
|
||||
|
||||
let prd_update_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_update_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_update_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_update_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_update_list_enc);
|
||||
|
||||
let prd_response_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_response_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_response_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_response_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_response_list_enc);
|
||||
|
||||
let prd_message_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_message_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_message_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_message_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_message_list_enc);
|
||||
|
||||
let prd_confirm_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_confirm_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_confirm_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_confirm_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_confirm_list_enc);
|
||||
|
||||
let prd_key_backup_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_key_backup_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_key_backup_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_key_backup_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_key_backup_list_enc);
|
||||
|
||||
let prd_key_hello_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"prd_key_hello_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.prd_key_hello_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.prd_key_hello_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(prd_key_hello_list_enc);
|
||||
|
||||
let tx_sp_list_enc = PcdItemEncAttributePrivate::new(
|
||||
"tx_sp_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.tx_sp_list.clone()),
|
||||
Member_enc_key.enc_vec_string(self.tx_sp_list.clone()),
|
||||
);
|
||||
enc_attribute_list.push(tx_sp_list_enc);
|
||||
|
||||
@ -318,7 +318,7 @@ pub struct Member {
|
||||
}
|
||||
|
||||
impl Member {
|
||||
pub const ITEM_NAME: &'static str = "member";
|
||||
pub const ITEM_NAME: &'static str = "Member";
|
||||
pub fn new(
|
||||
mut item: Item,
|
||||
public_attribute_group: MemberPublicAttributeGroup,
|
||||
@ -336,7 +336,7 @@ impl Member {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.public_attribute_group
|
||||
@ -347,11 +347,11 @@ impl Member {
|
||||
|
||||
let enc_metadata_private = self
|
||||
.private_attribute_group
|
||||
.enc_group(member_private_enc_key.clone());
|
||||
.enc_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
Some(enc_role_confidential_attribute_group),
|
||||
Some(enc_metadata_private),
|
||||
|
@ -230,18 +230,18 @@ impl PaymentsPrivateAttributeGroup {
|
||||
);
|
||||
}
|
||||
|
||||
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
pub fn enc_group(&self, Member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let payload_list_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"payload_list".to_owned(),
|
||||
member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
Member_enc_key.enc_vec_string(self.payload_list_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(payload_list_private_enc);
|
||||
|
||||
let audit_code_private_enc = PcdItemEncAttributePrivate::new(
|
||||
"audit_code_private".to_owned(),
|
||||
member_enc_key.enc_string(self.audit_code_private.clone()),
|
||||
Member_enc_key.enc_string(self.audit_code_private.clone()),
|
||||
);
|
||||
enc_attribute_list.push(audit_code_private_enc);
|
||||
|
||||
@ -277,7 +277,7 @@ impl Payments {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.public_attribute_group
|
||||
@ -288,11 +288,11 @@ impl Payments {
|
||||
|
||||
let enc_metadata_private = self
|
||||
.private_attribute_group
|
||||
.enc_group(member_private_enc_key.clone());
|
||||
.enc_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
Some(enc_role_confidential_attribute_group),
|
||||
Some(enc_metadata_private),
|
||||
|
@ -158,12 +158,12 @@ impl PeerPrivateAttributeGroup {
|
||||
println!("Config: {}", self.config);
|
||||
}
|
||||
|
||||
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
pub fn enc_group(&self, Member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let config_enc = PcdItemEncAttributePrivate::new(
|
||||
"config".to_owned(),
|
||||
member_enc_key.enc_string(self.config.clone()),
|
||||
Member_enc_key.enc_string(self.config.clone()),
|
||||
);
|
||||
enc_attribute_list.push(config_enc);
|
||||
|
||||
@ -199,7 +199,7 @@ impl Peer {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.public_attribute_group
|
||||
@ -207,11 +207,11 @@ impl Peer {
|
||||
|
||||
let enc_metadata_private = self
|
||||
.private_attribute_group
|
||||
.enc_group(member_private_enc_key.clone());
|
||||
.enc_group(Member_private_enc_key.clone());
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
None,
|
||||
Some(enc_metadata_private),
|
||||
|
@ -67,7 +67,7 @@ impl Process {
|
||||
pub fn enc(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> PcdItemGenericEnc {
|
||||
let enc_metadata_contract_public = self
|
||||
.item_process_public_attribute_group
|
||||
@ -75,7 +75,7 @@ impl Process {
|
||||
|
||||
PcdItemGenericEnc::new(
|
||||
self.item
|
||||
.enc(process_public_enc_key, member_private_enc_key),
|
||||
.enc(process_public_enc_key, Member_private_enc_key),
|
||||
Some(enc_metadata_contract_public),
|
||||
None,
|
||||
None,
|
||||
|
@ -22,14 +22,14 @@ impl MetadataPrivate {
|
||||
}
|
||||
pub fn enc_list(
|
||||
&self,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> Vec<PcdItemEncAttributePrivate> {
|
||||
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
|
||||
|
||||
let enc_attribute_tag_list_key = KeyEncryption::new(
|
||||
Some("tag_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_tag_list = PcdItemEncAttributePrivate::new(
|
||||
"tag_list".to_owned(),
|
||||
@ -39,8 +39,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_zone_list_key = KeyEncryption::new(
|
||||
Some("zone_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_zone_list = PcdItemEncAttributePrivate::new(
|
||||
"zone_list".to_owned(),
|
||||
@ -50,8 +50,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_label_list_key = KeyEncryption::new(
|
||||
Some("label_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_label_list = PcdItemEncAttributePrivate::new(
|
||||
"label_list".to_owned(),
|
||||
@ -61,8 +61,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_ref_list_key = KeyEncryption::new(
|
||||
Some("ref_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_ref_list = PcdItemEncAttributePrivate::new(
|
||||
"ref_list".to_owned(),
|
||||
@ -72,8 +72,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_data_list_key = KeyEncryption::new(
|
||||
Some("data_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_data_list = PcdItemEncAttributePrivate::new(
|
||||
"data_list".to_owned(),
|
||||
@ -83,8 +83,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_amount_key = KeyEncryption::new(
|
||||
Some("amount".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_amount = PcdItemEncAttributePrivate::new(
|
||||
"amount".to_owned(),
|
||||
@ -94,8 +94,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_number_key = KeyEncryption::new(
|
||||
Some("number".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_number = PcdItemEncAttributePrivate::new(
|
||||
"number".to_owned(),
|
||||
@ -105,8 +105,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_render_template_list_key = KeyEncryption::new(
|
||||
Some("render_template_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_render_template_list = PcdItemEncAttributePrivate::new(
|
||||
"render_template_list".to_owned(),
|
||||
@ -117,8 +117,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_legal_text_list_key = KeyEncryption::new(
|
||||
Some("legal_text_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_legal_text_list = PcdItemEncAttributePrivate::new(
|
||||
"legal_text_list".to_owned(),
|
||||
@ -129,8 +129,8 @@ impl MetadataPrivate {
|
||||
|
||||
let enc_attribute_key_list_key = KeyEncryption::new(
|
||||
Some("key_list".to_owned()),
|
||||
member_private_enc_key.key.clone(),
|
||||
member_private_enc_key.algorithm.clone(),
|
||||
Member_private_enc_key.key.clone(),
|
||||
Member_private_enc_key.algorithm.clone(),
|
||||
);
|
||||
let enc_attribute_key_list = PcdItemEncAttributePrivate::new(
|
||||
"key_list".to_owned(),
|
||||
|
@ -12,7 +12,7 @@ pub mod item_artefact;
|
||||
pub mod item_commit;
|
||||
pub mod item_deposit;
|
||||
pub mod item_enum;
|
||||
pub mod item_member;
|
||||
pub mod item_Member;
|
||||
pub mod item_Payments;
|
||||
pub mod item_peer;
|
||||
pub mod item_process;
|
||||
@ -45,7 +45,7 @@ pub mod role;
|
||||
pub mod role_artefact;
|
||||
pub mod role_commit;
|
||||
pub mod role_deposit;
|
||||
pub mod role_member;
|
||||
pub mod role_Member;
|
||||
pub mod role_Payments;
|
||||
pub mod role_peer;
|
||||
pub mod role_process;
|
||||
|
@ -30,7 +30,7 @@ impl Pcd {
|
||||
item_list: Vec<ItemEnum>,
|
||||
pagination: Pagination,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
) -> Self {
|
||||
let request = Request::new(
|
||||
request_item_name,
|
||||
@ -48,49 +48,49 @@ impl Pcd {
|
||||
ItemEnum::Process(item_process) => {
|
||||
let item_enc = item_process.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::Member(item_member) => {
|
||||
let item_enc = item_member.enc(
|
||||
ItemEnum::Member(item_Member) => {
|
||||
let item_enc = item_Member.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::Artefact(item_artefact) => {
|
||||
let item_enc = item_artefact.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::Peer(item_peer) => {
|
||||
let item_enc = item_peer.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::Payments(item_Payments) => {
|
||||
let item_enc = item_Payments.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::Deposit(item_deposit) => {
|
||||
let item_enc = item_deposit.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
ItemEnum::commit(item_commit) => {
|
||||
let item_enc = item_commit.enc(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
);
|
||||
item_enc_list.push(item_enc);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ impl PrdResponse {
|
||||
pub const TYPE: &'static str = "prd_response";
|
||||
pub fn new(
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
|
||||
request_item_name: Option<String>,
|
||||
request_version: i64,
|
||||
@ -95,7 +95,7 @@ impl PrdResponse {
|
||||
.map(|msg| process_public_enc_key.enc_string(msg.clone()));
|
||||
let message_private = message_private_string
|
||||
.as_ref()
|
||||
.map(|msg| member_private_enc_key.enc_string(msg.clone()));
|
||||
.map(|msg| Member_private_enc_key.enc_string(msg.clone()));
|
||||
|
||||
let pcd_keys_role_confidential_list_confidential = shared_secret_key.enc(
|
||||
serde_json::to_value(pcd_keys_role_confidential_list).unwrap_or_else(|_| json!({})),
|
||||
|
@ -5,7 +5,7 @@ use crate::workflows::workflow_pcd_create_and_send_all::PcdItemEncAttributeRoleC
|
||||
use super::{
|
||||
commit_method::commitMethod, deposit_method::DepositMethod,
|
||||
key_encryption::KeyEncryption, Payments_method::PaymentsMethod,
|
||||
request_prd_response::PrdResponse, role_artefact::RoleArtefact, role_member::RoleMember,
|
||||
request_prd_response::PrdResponse, role_artefact::RoleArtefact, role_Member::RoleMember,
|
||||
role_peer::RolePeer, role_process::RoleProcess,
|
||||
};
|
||||
|
||||
@ -13,7 +13,7 @@ use super::{
|
||||
|
||||
pub struct RolesGroup {
|
||||
pub role_peer: RolePeer,
|
||||
pub role_member: RoleMember,
|
||||
pub role_Member: RoleMember,
|
||||
pub role_process: RoleProcess,
|
||||
pub role_artefact_list: Vec<RoleArtefact>,
|
||||
}
|
||||
@ -21,13 +21,13 @@ pub struct RolesGroup {
|
||||
impl RolesGroup {
|
||||
pub fn new(
|
||||
role_peer: RolePeer,
|
||||
role_member: RoleMember,
|
||||
role_Member: RoleMember,
|
||||
role_process: RoleProcess,
|
||||
role_artefact_list: Vec<RoleArtefact>,
|
||||
) -> Self {
|
||||
RolesGroup {
|
||||
role_peer,
|
||||
role_member,
|
||||
role_Member,
|
||||
role_process,
|
||||
role_artefact_list,
|
||||
}
|
||||
@ -45,7 +45,7 @@ impl RolesGroup {
|
||||
pub fn to_prd_response_list(
|
||||
&self,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
request_item_name: Option<String>,
|
||||
request_version: i64,
|
||||
request_process_hash: String,
|
||||
@ -81,7 +81,7 @@ impl RolesGroup {
|
||||
for address in &cond.prd_sp_address_list {
|
||||
let prd_response = PrdResponse::new(
|
||||
process_public_enc_key.clone(),
|
||||
member_private_enc_key.clone(),
|
||||
Member_private_enc_key.clone(),
|
||||
request_item_name.clone(),
|
||||
request_version.clone(),
|
||||
request_process_hash.clone(),
|
||||
@ -115,7 +115,7 @@ impl RolesGroup {
|
||||
self.role_peer.display_info(); // Affiche les informations de `role_peer`
|
||||
|
||||
println!("Role Member:");
|
||||
self.role_member.display_info(); // Affiche les informations de `role_member`
|
||||
self.role_Member.display_info(); // Affiche les informations de `role_Member`
|
||||
|
||||
println!("Role Process:");
|
||||
self.role_process.display_info(); // Affiche les informations de `role_process`
|
||||
|
@ -46,7 +46,7 @@ pub struct WorkflowPcdCreateAndSendAll {
|
||||
pub process_hash: String,
|
||||
pub pcd_reference_hash: Option<String>,
|
||||
pub pcd_item_reference_hash: Option<String>,
|
||||
pub member_private_enc_key: KeyEncryption,
|
||||
pub Member_private_enc_key: KeyEncryption,
|
||||
pub process_public_enc_key: KeyEncryption,
|
||||
pub roles: RolesGroup,
|
||||
pub pow_pathern: String,
|
||||
@ -81,7 +81,7 @@ impl WorkflowPcdCreateAndSendAll {
|
||||
process_hash: String,
|
||||
pcd_reference_hash: Option<String>,
|
||||
pcd_item_reference_hash: Option<String>,
|
||||
member_private_enc_key: KeyEncryption,
|
||||
Member_private_enc_key: KeyEncryption,
|
||||
process_public_enc_key: KeyEncryption,
|
||||
roles: RolesGroup,
|
||||
pow_pathern: String,
|
||||
@ -113,7 +113,7 @@ impl WorkflowPcdCreateAndSendAll {
|
||||
process_hash,
|
||||
pcd_reference_hash,
|
||||
pcd_item_reference_hash,
|
||||
member_private_enc_key,
|
||||
Member_private_enc_key,
|
||||
process_public_enc_key,
|
||||
roles,
|
||||
pow_pathern,
|
||||
@ -151,7 +151,7 @@ impl WorkflowPcdCreateAndSendAll {
|
||||
self.item_list.clone(),
|
||||
self.pcd_pagination.clone(),
|
||||
self.process_public_enc_key.clone(),
|
||||
self.member_private_enc_key.clone(),
|
||||
self.Member_private_enc_key.clone(),
|
||||
);
|
||||
|
||||
let pcd_message: MessageClient = pcd.to_message(
|
||||
@ -183,7 +183,7 @@ impl WorkflowPcdCreateAndSendAll {
|
||||
|
||||
let prd_list = self.roles.to_prd_response_list(
|
||||
self.process_public_enc_key.clone(),
|
||||
self.member_private_enc_key.clone(),
|
||||
self.Member_private_enc_key.clone(),
|
||||
Some(self.item_name.clone()),
|
||||
0,
|
||||
self.process_hash.clone(),
|
||||
@ -230,7 +230,7 @@ impl WorkflowPcdCreateAndSendAll {
|
||||
println!("Item Reference Hash: {:?}", self.pcd_item_reference_hash);
|
||||
println!(
|
||||
"Member Private Encryption Key: {:?}",
|
||||
self.member_private_enc_key
|
||||
self.Member_private_enc_key
|
||||
);
|
||||
println!(
|
||||
"Process Public Encryption Key: {:?}",
|
||||
|
Loading…
x
Reference in New Issue
Block a user