'Setup container and object keys based on the request path.
Keys are derived from request path. The \'id\' entry in the results dict
includes the part of the path used to derive keys. Other keymaster
implementations may use a different strategy to generate keys and may
include a different type of \'id\', so callers should treat the \'id\' as
opaque keymaster-specific data.
:returns: A dict containing encryption keys for \'object\' and
\'container\' and a key \'id\'.'

def fetch_crypto_keys(self, *args, **kwargs):

    if self._keys:
        return self._keys
    self._keys = {}
    account_path = os.path.join(os.sep, self.account)
    if self.container:
        path = os.path.join(account_path, self.container)
        self._keys['container'] = self.keymaster.create_key(path)
        if self.obj:
            path = os.path.join(path, self.obj)
            self._keys['object'] = self.keymaster.create_key(path)
        self._keys['id'] = {'v': '1', 'path': path}
    return self._keys
