From 0831ab34486d56cacd77602beedf14e8d0192274 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Fri, 9 Dec 2022 22:37:29 +0100 Subject: [PATCH] Added information to members --- Readme.md | 15 ++++++++++++- scripts/classes/Encryption.py | 40 +++++++++++++++++++++++------------ scripts/main.py | 8 ++++++- 3 files changed, 48 insertions(+), 15 deletions(-) diff --git a/Readme.md b/Readme.md index 8d7f450..270ce04 100644 --- a/Readme.md +++ b/Readme.md @@ -4,7 +4,20 @@ The purpose of this software is to splitt a secret over multiple people. Just if # testing ```bash python scripts/main.py --mode cleanup && -python scripts/main.py --amount 6 --quota 50 --mode encrypt --master-password "ewrwerwerew" && +python scripts/main.py --amount 3 --quota 50 --mode encrypt --add-user-information --master-password "ewrwerwerew" << END_OF_INPUTS +alpha bravo +123123812908 +asfdasd@asdskjd.de +street in straat +charlie delta +1888888 +sadasfdasd@asdskjd.de +street in strutt +echo2 foxtrott +99999999 +asfdasd@sdskjd.de +street in strasdlasöd +END_OF_INPUTS python scripts/main.py --mode decrypt --master-password "ewrwerwerew" && python scripts/main.py --mode decrypt --user "1" ``` diff --git a/scripts/classes/Encryption.py b/scripts/classes/Encryption.py index a7b31f9..b2c0b3c 100644 --- a/scripts/classes/Encryption.py +++ b/scripts/classes/Encryption.py @@ -15,6 +15,21 @@ class Encryption(AbstractSplittedSecret): self.master_password = master_password self.quota_factor=self.decryption_quota/100 self.group_members_amount=math.ceil(self.amount_of_secret_holders * self.quota_factor) + self.initializeUserData() + self.initializeGroupData() + + def initializeUserData(self): + self.user_mapped_data = {} + user_count = 1 + while user_count <= self.amount_of_secret_holders: + self.user_mapped_data[str(user_count)] = {"groups":{},"user_password":self.createPassword(64),"about":{}} + user_count += 1; + + def initializeGroupData(self): + self.group_mapped_data = {} + + def addInformationToUser(self,user_id,label,content): + self.user_mapped_data[user_id]['about'][label] = content; def getStartnumber(self): index = 0 @@ -42,19 +57,18 @@ class Encryption(AbstractSplittedSecret): unvalid_sequenz = re.compile("(.)\\1+") return re.search(valid_numbers, password_group_index_str) and not re.search(unvalid_sequenz, password_group_index_str) - def createUserDataFrame(self): - self.user_mapped_data = {} - user_count = 1 - while user_count <= self.amount_of_secret_holders: - self.user_mapped_data[str(user_count)] = {"groups":{},"user_password":self.createPassword(64)} - user_count += 1; - - def createGroupDataFrame(self): - self.group_mapped_data = {} + def compileContacts(self): + contacts = {} + for user_id in self.user_mapped_data: + contacts[user_id] = self.user_mapped_data[user_id]['about'] + for user_id in self.user_mapped_data: + self.user_mapped_data[user_id]['contacts'] = {} + for contact_id in contacts: + if contact_id != user_id: + self.user_mapped_data[user_id]['contacts'][contact_id] = contacts[contact_id] - def generateData(self): - self.createUserDataFrame() - self.createGroupDataFrame() + def compileData(self): + self.compileContacts() index = self.getStartnumber() while index < self.getEndnumber(): password_group_index_str = ''.join(sorted(str(index))) @@ -89,7 +103,7 @@ class Encryption(AbstractSplittedSecret): def encryptUserData(self): for user_id in self.user_mapped_data: file_path=self.getUserFilePath(user_id,"encrypted") - data=self.user_mapped_data[user_id]['groups'] + data=self.user_mapped_data[user_id] password=self.user_mapped_data[user_id]['user_password'] self.encryptToJsonFile(data,file_path,password) diff --git a/scripts/main.py b/scripts/main.py index 53854ea..1589dbe 100644 --- a/scripts/main.py +++ b/scripts/main.py @@ -11,6 +11,7 @@ if __name__ == '__main__': parser.add_argument('--quota', type=int, dest='decryption_quota', choices=range(1,101),required=False) parser.add_argument('--master-password',type=str, dest='master_password',required=False) parser.add_argument('--user',type=int, dest='user',choices=range(1,9),required=False) + parser.add_argument('--add-user-information',type=bool, dest='add_user_information', default=False, required=False, action=argparse.BooleanOptionalAction) args = parser.parse_args() mode = args.mode @@ -56,6 +57,11 @@ if __name__ == '__main__': else: master_password = args.master_password encrypt = Encryption(args.amount_of_secret_holders, args.decryption_quota, master_password) - encrypt.generateData() + if args.add_user_information is not None: + for user_id in encrypt.user_mapped_data: + for label in ['name','phone','email','address']: + print("Please enter attribut <<" + label + ">> for user <<" + user_id+ ">>:" ) + encrypt.addInformationToUser(user_id, label, str(input())) + encrypt.compileData() encrypt.encrypt() exit() \ No newline at end of file