sdk_common/src/models/item_member.rs

375 lines
14 KiB
Rust

use serde::{Deserialize, Serialize};
use super::{
item::Item, key_encryption::KeyEncryption,
pcd_item_enc_attribute_private::PcdItemEncAttributePrivate,
pcd_item_enc_attribute_public::PcdItemEncAttributePublic,
pcd_item_enc_attribute_role_confidential::PcdItemEncAttributeRoleConfidential,
pcd_item_generic_enc::PcdItemGenericEnc,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ItemMemberPublicAttributeGroup {
pub sp_address_public: String,
pub sp_address_public_sig: String,
pub sp_address_revoke_public: String,
pub sp_address_revoke_public_sig: String,
pub third_sp_address_list_public: Vec<String>,
pub data_size_max: i64,
pub payment_method_list_public: Vec<String>,
pub succession_process_hash: String,
}
impl ItemMemberPublicAttributeGroup {
pub fn new(
sp_address_public: String,
sp_address_public_sig: String,
sp_address_revoke_public: String,
sp_address_revoke_public_sig: String,
third_sp_address_list_public: Vec<String>,
data_size_max: i64,
payment_method_list_public: Vec<String>,
succession_process_hash: String,
) -> Self {
ItemMemberPublicAttributeGroup {
sp_address_public,
sp_address_public_sig,
sp_address_revoke_public,
sp_address_revoke_public_sig,
third_sp_address_list_public,
data_size_max,
payment_method_list_public,
succession_process_hash,
}
}
pub fn enc_group(
&self,
process_public_enc_key: KeyEncryption,
) -> Vec<PcdItemEncAttributePublic> {
let mut enc_attribute_list: Vec<PcdItemEncAttributePublic> = Vec::new();
let sp_address_public_enc = PcdItemEncAttributePublic::new(
"sp_address_public".to_owned(),
process_public_enc_key.enc_string(self.sp_address_public.clone()),
);
enc_attribute_list.push(sp_address_public_enc);
let sp_address_public_sig_enc = PcdItemEncAttributePublic::new(
"sp_address_public_sig".to_owned(),
process_public_enc_key.enc_string(self.sp_address_public_sig.clone()),
);
enc_attribute_list.push(sp_address_public_sig_enc);
let sp_address_revoke_public_enc = PcdItemEncAttributePublic::new(
"sp_address_revoke_public".to_owned(),
process_public_enc_key.enc_string(self.sp_address_revoke_public.clone()),
);
enc_attribute_list.push(sp_address_revoke_public_enc);
let sp_address_revoke_public_sig_enc = PcdItemEncAttributePublic::new(
"sp_address_revoke_public_sig".to_owned(),
process_public_enc_key.enc_string(self.sp_address_revoke_public_sig.clone()),
);
enc_attribute_list.push(sp_address_revoke_public_sig_enc);
let third_sp_address_list_public_enc = PcdItemEncAttributePublic::new(
"third_sp_address_list_public".to_owned(),
process_public_enc_key.enc_vec_string(self.third_sp_address_list_public.clone()),
);
enc_attribute_list.push(third_sp_address_list_public_enc);
let data_size_max_enc = PcdItemEncAttributePublic::new(
"data_size_max".to_owned(),
process_public_enc_key.enc_i64(self.data_size_max),
);
enc_attribute_list.push(data_size_max_enc);
let payment_method_list_public_enc = PcdItemEncAttributePublic::new(
"payment_method_list_public".to_owned(),
process_public_enc_key.enc_vec_string(self.payment_method_list_public.clone()),
);
enc_attribute_list.push(payment_method_list_public_enc);
let succession_process_hash_enc = PcdItemEncAttributePublic::new(
"succession_process_hash".to_owned(),
process_public_enc_key.enc_string(self.succession_process_hash.clone()),
);
enc_attribute_list.push(succession_process_hash_enc);
enc_attribute_list
}
pub fn display_info(&self) {
println!("ItemMemberPublicAttributeGroup:");
println!("SP Address Public: {}", self.sp_address_public);
println!(
"SP Address Public Signature: {}",
self.sp_address_public_sig
);
println!(
"SP Address Revoke Public: {}",
self.sp_address_revoke_public
);
println!(
"SP Address Revoke Public Signature: {}",
self.sp_address_revoke_public_sig
);
println!(
"Third SP Address List Public: {:?}",
self.third_sp_address_list_public
);
println!("Data Size Max: {}", self.data_size_max);
println!(
"Payment Method List Public: {:?}",
self.payment_method_list_public
);
println!("Succession Process Hash: {}", self.succession_process_hash);
}
}
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ItemMemberRoleConfidentialAttributeGroup {
pub payment_method_list_confidential: Vec<String>,
pub id_shard_info: String,
}
impl ItemMemberRoleConfidentialAttributeGroup {
pub fn new(payment_method_list_confidential: Vec<String>, id_shard_info: String) -> Self {
ItemMemberRoleConfidentialAttributeGroup {
payment_method_list_confidential,
id_shard_info,
}
}
pub fn enc_group(&self) -> Vec<PcdItemEncAttributeRoleConfidential> {
let mut enc_attribute_list: Vec<PcdItemEncAttributeRoleConfidential> = Vec::new();
let mut enc_payment_method_list_confidential_key = KeyEncryption::new(
Some("payment_method_list_confidential".to_owned()),
None,
None,
);
if let Ok(_new) = enc_payment_method_list_confidential_key.key_new_random() {
let payment_method_list_confidential_enc = PcdItemEncAttributeRoleConfidential::new(
"payment_method_list_confidential".to_owned(),
enc_payment_method_list_confidential_key
.enc_vec_string(self.payment_method_list_confidential.clone()),
enc_payment_method_list_confidential_key,
);
enc_attribute_list.push(payment_method_list_confidential_enc);
}
let mut enc_id_shard_info_key =
KeyEncryption::new(Some("id_shard_info".to_owned()), None, None);
if let Ok(_new) = enc_id_shard_info_key.key_new_random() {
let id_shard_info_enc = PcdItemEncAttributeRoleConfidential::new(
"id_shard_info".to_owned(),
enc_id_shard_info_key.enc_string(self.id_shard_info.clone()),
enc_id_shard_info_key,
);
enc_attribute_list.push(id_shard_info_enc);
}
return enc_attribute_list;
}
pub fn display_info(&self) {
println!("ItemMemberRoleConfidentialAttributeGroup:");
println!(
"Confidential Payment Method List: {:?}",
self.payment_method_list_confidential
);
println!("ID Shard Info: {}", self.id_shard_info);
}
}
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ItemMemberPrivateAttributeGroup {
pub payment_method_list_private: Vec<String>,
pub pcd_list: Vec<String>, // Assuming this is a list of strings
pub prd_list_list: Vec<String>,
pub prd_update_list: Vec<String>,
pub prd_response_list: Vec<String>,
pub prd_message_list: Vec<String>,
pub prd_confirm_list: Vec<String>,
pub prd_key_backup_list: Vec<String>,
pub prd_key_hello_list: Vec<String>,
pub tx_sp_list: Vec<String>,
}
impl ItemMemberPrivateAttributeGroup {
pub fn new(
payment_method_list_private: Vec<String>,
pcd_list: Vec<String>,
prd_list_list: Vec<String>,
prd_update_list: Vec<String>,
prd_response_list: Vec<String>,
prd_message_list: Vec<String>,
prd_confirm_list: Vec<String>,
prd_key_backup_list: Vec<String>,
prd_key_hello_list: Vec<String>,
tx_sp_list: Vec<String>,
) -> Self {
ItemMemberPrivateAttributeGroup {
payment_method_list_private,
pcd_list,
prd_list_list,
prd_update_list,
prd_response_list,
prd_message_list,
prd_confirm_list,
prd_key_backup_list,
prd_key_hello_list,
tx_sp_list,
}
}
pub fn enc_group(&self, member_enc_key: KeyEncryption) -> Vec<PcdItemEncAttributePrivate> {
let mut enc_attribute_list: Vec<PcdItemEncAttributePrivate> = Vec::new();
let payment_method_list_private_enc = PcdItemEncAttributePrivate::new(
"payment_method_list_private".to_owned(),
member_enc_key.enc_vec_string(self.payment_method_list_private.clone()),
);
enc_attribute_list.push(payment_method_list_private_enc);
let pcd_list_enc = PcdItemEncAttributePrivate::new(
"pcd_list".to_owned(),
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()),
);
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()),
);
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()),
);
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()),
);
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()),
);
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()),
);
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()),
);
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()),
);
enc_attribute_list.push(tx_sp_list_enc);
enc_attribute_list
}
pub fn display_info(&self) {
println!("ItemMemberPrivateAttributeGroup:");
println!(
"Private Payment Method List: {:?}",
self.payment_method_list_private
);
println!("PCD List: {:?}", self.pcd_list);
println!("PRD List List: {:?}", self.prd_list_list);
println!("PRD Update List: {:?}", self.prd_update_list);
println!("PRD Response List: {:?}", self.prd_response_list);
println!("PRD Message List: {:?}", self.prd_message_list);
println!("PRD Confirm List: {:?}", self.prd_confirm_list);
println!("PRD Key Backup List: {:?}", self.prd_key_backup_list);
println!("PRD Key Hello List: {:?}", self.prd_key_hello_list);
println!("TX SP List: {:?}", self.tx_sp_list);
}
}
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ItemMember {
pub item: Item,
pub public_attribute_group: ItemMemberPublicAttributeGroup,
pub role_confidential_attribute_group: ItemMemberRoleConfidentialAttributeGroup,
pub private_attribute_group: ItemMemberPrivateAttributeGroup,
}
impl ItemMember {
pub const ITEM_NAME: &'static str = "member";
pub fn new(
mut item: Item,
public_attribute_group: ItemMemberPublicAttributeGroup,
role_confidential_attribute_group: ItemMemberRoleConfidentialAttributeGroup,
private_attribute_group: ItemMemberPrivateAttributeGroup,
) -> Self {
item.name = Self::ITEM_NAME.to_string();
ItemMember {
item,
public_attribute_group,
role_confidential_attribute_group,
private_attribute_group,
}
}
pub fn enc(
&self,
process_public_enc_key: KeyEncryption,
member_private_enc_key: KeyEncryption,
) -> PcdItemGenericEnc {
let enc_metadata_contract_public = self
.public_attribute_group
.enc_group(process_public_enc_key.clone());
let enc_role_confidential_attribute_group =
self.role_confidential_attribute_group.enc_group();
let enc_metadata_private = self
.private_attribute_group
.enc_group(member_private_enc_key.clone());
PcdItemGenericEnc::new(
self.item
.enc(process_public_enc_key, member_private_enc_key),
Some(enc_metadata_contract_public),
Some(enc_role_confidential_attribute_group),
Some(enc_metadata_private),
)
}
pub fn display_info(&self) {
println!("ItemMember:");
println!("Item:");
self.item.display_info(); // Affiche les informations de l'objet `item`
println!("Member Public Attribute Group:");
self.public_attribute_group.display_info(); // Affiche les informations du groupe d'attributs publics
println!("Member Role Confidential Attribute Group:");
self.role_confidential_attribute_group.display_info(); // Affiche les informations du groupe d'attributs confidentiels
println!("Member Private Attribute Group:");
self.private_attribute_group.display_info(); // Affiche les informations du groupe d'attributs privés
}
}