Пример #1
0
    def import_data(self, input, password):
        "Imports data into an entrystore"

        # check and pad password
        if password is None:
            raise base.PasswordError

        # check the data
        self.check(input)
        dataversion = self.__parse_header(input[:12])

        # handle only version 2 data files
        if dataversion != 2:
            raise base.VersionError

        # Fetch the used 64 bit salt
        salt = input[12:20]
        iv = input[20:36]
        key = PBKDF2(password, salt, iterations=12000).read(32)
        # decrypt the data
        input = input[36:]

        if len(input) % 16 != 0:
            raise base.FormatError

        cipher = AES.new(key, AES.MODE_CBC, iv)
        input = cipher.decrypt(input)
        hash256 = input[0:32]
        data = input[32:]

        if hash256 != hashlib.sha256(data).digest():
            raise base.PasswordError

        # decompress data
        padlen = ord(data[-1])
        for i in data[-padlen:]:
            if ord(i) != padlen:
                raise base.FormatError

        data = zlib.decompress(data[0:-padlen])

        # check and import data
        if data.strip()[:5] != "<?xml":
            raise base.FormatError

        entrystore = RevelationXML.import_data(self, data)

        return entrystore
Пример #2
0
	def import_data(self, input, password):
		"Imports data into an entrystore"

		# check and pad password
		if password is None:
			raise base.PasswordError

		# check the data
		self.check(input)
		dataversion = self.__parse_header(input[:12])

		# handle only version 2 data files
		if dataversion != 2:
			raise base.VersionError
		
		# Fetch the used 64 bit salt
		salt = input[12:20]
		iv = input[20:36]
		key = PBKDF2(password, salt, iterations=12000).read(32)
		# decrypt the data
		input = input[36:]

		if len(input) % 16 != 0:
			raise base.FormatError

		cipher = AES.new(key, AES.MODE_CBC, iv)
		input = cipher.decrypt(input)
		hash256 = input[0:32]
		data = input[32:]

		if hash256 != hashlib.sha256(data).digest():
			raise base.PasswordError

		# decompress data
		padlen = ord(data[-1])
		for i in data[-padlen:]:
			if ord(i) != padlen:
				raise base.FormatError

		data = zlib.decompress(data[0:-padlen])

		# check and import data
		if data.strip()[:5] != "<?xml":
			raise base.FormatError

		entrystore = RevelationXML.import_data(self, data)

		return entrystore
Пример #3
0
	def import_data(self, input, password):
		"Imports data into an entrystore"

		# check password
		if password is None:
			raise base.PasswordError

		# create a LuksFile
		buffer		= StringIO.StringIO(input)
		luksfile	= luks.LuksFile()

		try:
			luksfile.load_from_file(buffer)

		except:
			luksfile.close()
			buffer.close()
			raise base.FormatError

		slot = luksfile.open_any_key(password)

		if slot == None:
			luksfile.close()
			buffer.close()
			raise base.PasswordError

		data = luksfile.decrypt_data(0, luksfile.data_length())

		# remove the pad, and decompress
		padlen = struct.unpack("<I", data[-4:])[0]
		data = zlib.decompress(data[0:-padlen])

		if data.strip()[:5] != "<?xml":
			raise base.FormatError

		entrystore = RevelationXML.import_data(self, data)

		return entrystore
Пример #4
0
    def import_data(self, input, password):
        "Imports data into an entrystore"

        # check password
        if password is None:
            raise base.PasswordError

        # create a LuksFile
        buffer = StringIO.StringIO(input)
        luksfile = luks.LuksFile()

        try:
            luksfile.load_from_file(buffer)

        except:
            luksfile.close()
            buffer.close()
            raise base.FormatError

        slot = luksfile.open_any_key(password)

        if slot == None:
            luksfile.close()
            buffer.close()
            raise base.PasswordError

        data = luksfile.decrypt_data(0, luksfile.data_length())

        # remove the pad, and decompress
        padlen = struct.unpack("<I", data[-4:])[0]
        data = zlib.decompress(data[0:-padlen])

        if data.strip()[:5] != "<?xml":
            raise base.FormatError

        entrystore = RevelationXML.import_data(self, data)

        return entrystore