Ejemplo n.º 1
0
 def get_secret_content_type(self) -> str:
     """Returns content type of item secret (string)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.connection)
     secret, = self._item.call('GetSecret', 'o', self.session.object_path)
     return str(secret[3])
Ejemplo n.º 2
0
 def get_secret_content_type(self):
     """Returns content type of item secret (string)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.bus)
     secret = self.item_iface.GetSecret(self.session.object_path, signature="o")
     return str(secret[3])
Ejemplo n.º 3
0
 def get_secret_content_type(self):
     """Returns content type of item secret (string)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.bus)
     secret = self.item_iface.GetSecret(self.session.object_path,
                                        signature='o')
     return str(secret[3])
Ejemplo n.º 4
0
    def set_secret(self, secret, content_type='text/plain'):
        """Sets item secret to `secret`. If `content_type` is given,
		also sets the content type of the secret (``text/plain`` by
		default)."""
        self.ensure_not_locked()
        if not self.session:
            self.session = open_session(self.bus)
        secret = format_secret(self.session, secret, content_type)
        self.item_iface.SetSecret(secret, signature='(oayays)')
Ejemplo n.º 5
0
	def set_secret(self, secret, content_type='text/plain'):
		"""Sets item secret to `secret`. If `content_type` is given,
		also sets the content type of the secret (``text/plain`` by
		default)."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.bus)
		secret = format_secret(self.session, secret, content_type)
		self.item_iface.SetSecret(secret, signature='(oayays)')
Ejemplo n.º 6
0
    def set_secret(self,
                   secret: bytes,
                   content_type: str = 'text/plain') -> None:
        """Sets item secret to `secret`. If `content_type` is given,
		also sets the content type of the secret (``text/plain`` by
		default)."""
        self.ensure_not_locked()
        if not self.session:
            self.session = open_session(self.connection)
        _secret = format_secret(self.session, secret, content_type)
        self._item.call('SetSecret', '(oayays)', _secret)
Ejemplo n.º 7
0
 def get_secret(self):
     """Returns item secret (bytestring)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.bus)
     secret = self.item_iface.GetSecret(self.session.object_path, signature="o")
     if not self.session.encrypted:
         return bytes(bytearray(secret[2]))
     aes_iv = bytes(bytearray(secret[1]))
     aes = Cipher.AES.new(self.session.aes_key, Cipher.AES.MODE_CBC, aes_iv)
     encrypted_secret = bytes(bytearray(secret[2]))
     padded_secret = aes.decrypt(encrypted_secret)
     padded_secret = bytearray(padded_secret)
     return bytes(padded_secret[: -padded_secret[-1]])
Ejemplo n.º 8
0
	def get_secret(self):
		"""Returns item secret (bytestring)."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.bus)
		secret = self.item_iface.GetSecret(self.session.object_path,
			signature='o')
		if not self.session.encrypted:
			return bytes(bytearray(secret[2]))
		aes_cipher = AESCipher(self.session.aes_key, mode=MODE_CBC,
			IV=bytes(bytearray(secret[1])))
		padded_secret = bytearray(aes_cipher.decrypt(
			bytes(bytearray(secret[2]))))
		return padded_secret[:-padded_secret[-1]]
Ejemplo n.º 9
0
 def get_secret(self):
     """Returns item secret (bytestring)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.bus)
     secret = self.item_iface.GetSecret(self.session.object_path,
                                        signature='o')
     if not self.session.encrypted:
         return bytes(bytearray(secret[2]))
     aes_cipher = AESCipher(self.session.aes_key,
                            mode=MODE_CBC,
                            IV=bytes(bytearray(secret[1])))
     padded_secret = bytearray(
         aes_cipher.decrypt(bytes(bytearray(secret[2]))))
     return padded_secret[:-padded_secret[-1]]
Ejemplo n.º 10
0
 def get_secret(self):
     """Returns item secret (bytestring)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.bus)
     secret = self.item_iface.GetSecret(self.session.object_path,
                                        signature='o')
     if not self.session.encrypted:
         return bytes(bytearray(secret[2]))
     aes_iv = bytes(bytearray(secret[1]))
     aes = Cipher.AES.new(self.session.aes_key, Cipher.AES.MODE_CBC, aes_iv)
     encrypted_secret = bytes(bytearray(secret[2]))
     padded_secret = aes.decrypt(encrypted_secret)
     padded_secret = bytearray(padded_secret)
     return bytes(padded_secret[:-padded_secret[-1]])
Ejemplo n.º 11
0
	def get_secret(self):
		"""Returns item secret (bytestring)."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.bus)
		secret = self.item_iface.GetSecret(self.session.object_path,
			signature='o')
		if not self.session.encrypted:
			return bytes(bytearray(secret[2]))
		aes = algorithms.AES(self.session.aes_key)
		aes_iv = bytes(bytearray(secret[1]))
		decryptor = Cipher(aes, modes.CBC(aes_iv), default_backend()).decryptor()
		encrypted_secret = bytes(bytearray(secret[2]))
		padded_secret = decryptor.update(encrypted_secret) + decryptor.finalize()
		padded_secret = bytearray(padded_secret)
		return bytes(padded_secret[:-padded_secret[-1]])
Ejemplo n.º 12
0
 def get_secret(self) -> bytes:
     """Returns item secret (bytestring)."""
     self.ensure_not_locked()
     if not self.session:
         self.session = open_session(self.connection)
     secret, = self._item.call('GetSecret', 'o', self.session.object_path)
     if not self.session.encrypted:
         return bytes(secret[2])
     aes = algorithms.AES(self.session.aes_key)
     aes_iv = bytes(secret[1])
     decryptor = Cipher(aes, modes.CBC(aes_iv),
                        default_backend()).decryptor()
     encrypted_secret = secret[2]
     padded_secret = decryptor.update(
         encrypted_secret) + decryptor.finalize()
     assert isinstance(padded_secret, bytes)
     return padded_secret[:-padded_secret[-1]]
Ejemplo n.º 13
0
def create_collection(bus, label, alias='', session=None):
	"""Creates a new :class:`Collection` with the given `label` and `alias`
	and returns it. This action requires prompting. If prompt is dismissed,
	raises :exc:`~secretstorage.exceptions.ItemNotFoundException`. This is
	synchronous function, uses loop from GLib API."""
	if not session:
		session = open_session(bus)
	properties = {SS_PREFIX+'Collection.Label': label}
	service_obj = bus_get_object(bus, SECRETS, SS_PATH)
	service_iface = dbus.Interface(service_obj, SERVICE_IFACE)
	collection_path, prompt = service_iface.CreateCollection(properties,
		alias, signature='a{sv}s')
	if len(collection_path) > 1:
		return Collection(bus, collection_path, session=session)
	dismissed, unlocked = exec_prompt_glib(bus, prompt)
	if dismissed:
		raise ItemNotFoundException('Prompt dismissed.')
	return Collection(bus, unlocked, session=session)
Ejemplo n.º 14
0
	def create_item(self, label: str, attributes: Dict[str, str],
	                secret: bytes, replace: bool = False,
	                content_type: str = 'text/plain') -> Item:
		"""Creates a new :class:`~secretstorage.item.Item` with given
		`label` (unicode string), `attributes` (dictionary) and `secret`
		(bytestring). If `replace` is :const:`True`, replaces the existing
		item with the same attributes. If `content_type` is given, also
		sets the content type of the secret (``text/plain`` by default).
		Returns the created item."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.connection)
		_secret = format_secret(self.session, secret, content_type)
		properties = {
			SS_PREFIX + 'Item.Label': ('s', label),
			SS_PREFIX + 'Item.Attributes': ('a{ss}', attributes),
		}
		new_item, prompt = self._collection.call('CreateItem', 'a{sv}(oayays)b',
		                                         properties, _secret, replace)
		return Item(self.connection, new_item, self.session)
Ejemplo n.º 15
0
	def create_item(self, label, attributes, secret, replace=False,
	content_type='text/plain'):
		"""Creates a new :class:`~secretstorage.item.Item` with given
		`label` (unicode string), `attributes` (dictionary) and `secret`
		(bytestring). If `replace` is :const:`True`, replaces the existing
		item with the same attributes. If `content_type` is given, also
		sets the content type of the secret (``text/plain`` by default).
		Returns the created item."""
		self.ensure_not_locked()
		if not self.session:
			self.session = open_session(self.bus)
		secret = format_secret(self.session, secret, content_type)
		attributes = dbus.Dictionary(attributes, signature='ss')
		properties = {
			SS_PREFIX+'Item.Label': label,
			SS_PREFIX+'Item.Attributes': attributes
		}
		new_item, prompt = self.collection_iface.CreateItem(properties,
			secret, replace, signature='a{sv}(oayays)b')
		return Item(self.bus, new_item, self.session)
Ejemplo n.º 16
0
def create_collection(connection: DBusConnection, label: str, alias: str = '',
                      session: Optional[Session] = None) -> Collection:
	"""Creates a new :class:`Collection` with the given `label` and `alias`
	and returns it. This action requires prompting.

	:raises: :exc:`~secretstorage.exceptions.PromptDismissedException`
	         if the prompt is dismissed.
	"""
	if not session:
		session = open_session(connection)
	properties = {SS_PREFIX + 'Collection.Label': ('s', label)}
	service = DBusAddressWrapper(SS_PATH, SERVICE_IFACE, connection)
	collection_path, prompt = service.call('CreateCollection', 'a{sv}s',
	                                       properties, alias)
	if len(collection_path) > 1:
		return Collection(connection, collection_path, session=session)
	dismissed, result = exec_prompt(connection, prompt)
	if dismissed:
		raise PromptDismissedException('Prompt dismissed.')
	signature, collection_path = result
	assert signature == 'o'
	return Collection(connection, collection_path, session=session)
Ejemplo n.º 17
0
    def create_item(self,
                    label: str,
                    attributes: Dict[str, str],
                    secret: bytes,
                    replace: bool = False,
                    content_type: str = 'text/plain') -> Item:
        """Creates a new :class:`~secretstorage.item.Item` with given
		`label` (unicode string), `attributes` (dictionary) and `secret`
		(bytestring). If `replace` is :const:`True`, replaces the existing
		item with the same attributes. If `content_type` is given, also
		sets the content type of the secret (``text/plain`` by default).
		Returns the created item."""
        self.ensure_not_locked()
        if not self.session:
            self.session = open_session(self.connection)
        _secret = format_secret(self.session, secret, content_type)
        properties = {
            SS_PREFIX + 'Item.Label': ('s', label),
            SS_PREFIX + 'Item.Attributes': ('a{ss}', attributes),
        }
        new_item, prompt = self._collection.call('CreateItem',
                                                 'a{sv}(oayays)b', properties,
                                                 _secret, replace)
        return Item(self.connection, new_item, self.session)
Ejemplo n.º 18
0
def create_collection(connection: DBusConnection,
                      label: str,
                      alias: str = '',
                      session: Optional[Session] = None) -> Collection:
    """Creates a new :class:`Collection` with the given `label` and `alias`
	and returns it. This action requires prompting.

	:raises: :exc:`~secretstorage.exceptions.PromptDismissedException`
	         if the prompt is dismissed.
	"""
    if not session:
        session = open_session(connection)
    properties = {SS_PREFIX + 'Collection.Label': ('s', label)}
    service = DBusAddressWrapper(SS_PATH, SERVICE_IFACE, connection)
    collection_path, prompt = service.call('CreateCollection', 'a{sv}s',
                                           properties, alias)
    if len(collection_path) > 1:
        return Collection(connection, collection_path, session=session)
    dismissed, result = exec_prompt(connection, prompt)
    if dismissed:
        raise PromptDismissedException('Prompt dismissed.')
    signature, collection_path = result
    assert signature == 'o'
    return Collection(connection, collection_path, session=session)