def _masterKeyFromSlot(self, slot, passphrase): pbkdf_pwd = my_pbkdf2.pbkdf2(passphrase, slot.salt, slot.iterations, self.keylen) self._setKey(pbkdf_pwd) count = self._countFullBlocks(self.keylen * slot.af_stripes) cryptedSplitKey = (self.file.blockRead(sec) for sec in xrange(slot.start_sector, slot.start_sector + count)) splitKey = "".join(self.cryptor.decrypt(sec, block) for sec, block in enumerate(cryptedSplitKey)) return self._AFmerge(splitKey)
def _matchesKey(self, candidate): pbkdf_pwd = my_pbkdf2.pbkdf2(candidate, self.mkDigestSalt, self.iterations, LUKS_DIGESTSIZE) return pbkdf_pwd == self.mkDigest