Exemple #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
Exemple #2
0
 def __init__(self, filename=None, masterkey=""):
     self.masterkey = masterkey
     if filename:
         self.read(filename)
         return
     self.header = DBHDR()
     self.groups = []
     self.entries = []
     return
Exemple #3
0
    def __init__(self,
                 filename=None,
                 masterkey=None,
                 filekey=None,
                 passphrase=None):
        self.masterkey = masterkey
        self.filekey = filekey
        self.passphrase = passphrase

        self.filename = filename
        if filename:
            self.read(filename)
            return
        self.header = DBHDR()
        self.groups = []
        self.entries = []
        return
Exemple #4
0
    def read(self, filename):
        'Read in given .kdb file'
        fp = open(filename)
        buf = fp.read()
        fp.close()

        headbuf = buf[:124]
        self.header = DBHDR(headbuf)
        self.groups = []
        self.entries = []

        payload = buf[124:]

        #        if self.masterkey:
        #            key = self.masterkey
        #        elif self.filekey or self.password:
        #            key = self.composite_key()

        #        self.finalkey = self.final_key(key,
        #                                       self.header.final_master_seed,
        #                                       self.header.transform_seed,
        #                                       self.header.transform_rounds)
        self.finalkey = self.final_key()
        payload = self.decrypt_payload(payload, self.finalkey,
                                       self.header.encryption_type(),
                                       self.header.encryption_iv)

        ngroups = self.header.ngroups
        while ngroups:
            gi = GroupInfo(payload)
            self.groups.append(gi)
            length = len(gi)
            #print 'GroupInfo of length',length,'payload=',len(payload)
            payload = payload[length:]
            ngroups -= 1
            continue

        nentries = self.header.nentries
        while nentries:
            ei = EntryInfo(payload)
            self.entries.append(ei)
            payload = payload[len(ei):]
            nentries -= 1
            continue
        return
Exemple #5
0
    def read(self,filename):
        'Read in given .kdb file'
        fp = open(filename)
        buf = fp.read()
        fp.close()

        headbuf = buf[:124]
        self.header = DBHDR(headbuf)
        self.groups = []
        self.entries = []

        payload = buf[124:]

        self.finalkey = self.final_key(self.masterkey,
                                       self.header.master_seed,
                                       self.header.master_seed2,
                                       self.header.key_enc_rounds)
        payload = self.decrypt_payload(payload, self.finalkey, 
                                       self.header.encryption_type(),
                                       self.header.encryption_iv)

        ngroups = self.header.ngroups
        while ngroups:
            gi = GroupInfo(payload)
            self.groups.append(gi)
            length = len(gi)
            #print 'GroupInfo of length',length,'payload=',len(payload)
            payload = payload[length:]
            ngroups -= 1
            continue

        nentries = self.header.nentries
        while nentries:
            ei = EntryInfo(payload)
            self.entries.append(ei)
            payload = payload[len(ei):]
            nentries -= 1
            continue
        return