Example #1
0
    def write(self, filename=None):
        '''' 
        Write out DB to given filename with optional master key.
        If no master key is given, the one used to create this DB is used.
        '''
        import hashlib

        outfilename = filename or self.filename
        self.header.ngroups = len(self.groups)
        self.header.nentries = len(self.entries)

        header = DBHDR(self.header.encode())

        # fixme: should regenerate encryption_iv, master_seed,
        # master_seed2 and allow for the number of rounds to change

        payload = self.encode_payload()
        header.contents_hash = hashlib.sha256(payload).digest()

        #        finalkey = self.final_key(masterkey = masterkey or self.masterkey,
        #                                  masterseed = self.header.master_seed,
        #                                  masterseed2 = self.header.master_seed2,
        #                                  rounds = self.header.key_enc_rounds)

        payload = self.encrypt_payload(payload, self.final_key(),
                                       header.encryption_type(),
                                       header.encryption_iv)

        fp = open(outfilename, 'w')
        fp.write(header.encode())
        fp.write(payload)
        fp.close()
        return
Example #2
0
    def write(self,filename,masterkey=""):
        '''' 
        Write out DB to given filename with optional master key.
        If no master key is given, the one used to create this DB is used.
        '''
        import hashlib

        self.header.ngroups = len(self.groups)
        self.header.nentries = len(self.entries)

        header = DBHDR(self.header.encode())

        # fixme: should regenerate encryption_iv, master_seed,
        # master_seed2 and allow for the number of rounds to change

        payload = self.encode_payload()
        header.contents_hash = hashlib.sha256(payload).digest()

        finalkey = self.final_key(masterkey = masterkey or self.masterkey,
                                  masterseed = self.header.master_seed,
                                  masterseed2 = self.header.master_seed2,
                                  rounds = self.header.key_enc_rounds)

        payload = self.encrypt_payload(payload, finalkey, 
                                       header.encryption_type(),
                                       header.encryption_iv)

        fp = open(filename,'w')
        fp.write(header.encode())
        fp.write(payload)
        fp.close()
        return
Example #3
0
    def write(self, filename=None):
        '''' 
        Write out DB to given filename with optional master key.
        If no master key is given, the one used to create this DB is used.
        '''
        import hashlib

        outfilename = filename or self.filename
        self.header.ngroups = len(self.groups)
        self.header.nentries = len(self.entries)

        self.header.final_master_seed = get_random_bytes(16)
        self.header.encryption_iv = get_random_bytes(16)
        self.header.transform_seed = get_random_bytes(32)
        header = DBHDR(self.header.encode())

        # fixme: should regenerate encryption_iv, master_seed,
        # master_seed2 and allow for the number of rounds to change

        payload = self.encode_payload()
        header.contents_hash = hashlib.sha256(payload).digest()


        payload = self.encrypt_payload(payload, self.final_key(), 
                                       header.encryption_type(),
                                       header.encryption_iv)

        fp = open(outfilename,'w')
        fp.write(header.encode())
        fp.write(payload)
        fp.close()
        return