def __init__(self, filename=None, masterkey=""): self.masterkey = masterkey if filename: self.read(filename) return self.header = DBHDR() self.groups = [] self.entries = [] # add basic structure self.add_entry("Internet", "Meta-Info", "SYSTEM", "", "$", "KPX_CUSTOM_ICONS_4") self.add_entry("eMail", "Meta-Info", "SYSTEM", "", "$", "KPX_GROUP_TREE_STATE") return
def read(self, filename): 'Read in given .kdb file' fp = open(filename, "rb") 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) 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