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