Commit dd9038ab authored by Kenton Varda's avatar Kenton Varda

Split into more levels; add Save and Delete to complement Restore.

parent 4707ede6
...@@ -31,16 +31,17 @@ ...@@ -31,16 +31,17 @@
# the world only sees the container, and treats it as if it were itself the host of all of the # the world only sees the container, and treats it as if it were itself the host of all of the
# containee's objects. # containee's objects.
# #
# Since there are only two vats in this network, there is never a need for three-way introductions. # Since there are only two vats in this network, there is never a need for three-way introductions,
# Joins _could_ be needed in cases where the container itself participates in a network that uses # so level 3 is free. Joins _could_ be needed in cases where the container itself participates in
# joins, as the container may export two objects to the containee which, unbeknownst to it, are # a network that uses joins, as the container may export two objects to the containee which,
# actually proxies of the same remote object. However, from the containee's point of view, such # unbeknownst to it, are actually proxies of the same remote object. However, from the containee's
# a join is trivial to request, and the containee never needs to receive join requests. # point of view, such a join is trivial to request, and the containee never needs to receive join
# requests.
# #
# Therefore, a level 3 implementation of the confined network is barely more complicated than a # Therefore, a level 4 implementation of the confined network is barely more complicated than a
# level 1 implementation. However, such an implementation is able to make use of the container's # level 1 implementation. However, such an implementation is able to make use of the container's
# implementation of whatever network it lives in. Thus, if you have an application that implements # implementation of whatever network it lives in. Thus, if you have an application that implements
# the confined network at level 3, your application can participate in _any_ network at level 3 so # the confined network at level 4, your application can participate in _any_ network at level 4 so
# long as you pair it with the appropriate container. # long as you pair it with the appropriate container.
# #
# The "confined" network protocol may also be a reasonable basis for simple two-party client-server # The "confined" network protocol may also be a reasonable basis for simple two-party client-server
...@@ -53,18 +54,20 @@ struct SturdyRef { ...@@ -53,18 +54,20 @@ struct SturdyRef {
union { union {
external @0 :Object; external @0 :Object;
# The object lives outside the container. The container can handle `Restore` requests for this # The object lives outside the container. The container can handle `Restore` requests for this
# ref. The content of the ref is defined by the container implementation and opaque to the # ref. The content of the ref is defined by the container implementation and configuration.
# containee. The container ensures that the ref is encoded in such a way that the containee # It may simply be a SturdyRef in the format of the container's external network. However,
# cannot possibly derive the original bits of the external-world reference, probably by storing # some containers may actually encrypt external references in order to support distributed
# the external ref on a table somewhere. See: # confinement:
# http://www.erights.org/elib/capability/dist-confine.html # http://www.erights.org/elib/capability/dist-confine.html
confined @1 :Object; confined @1 :Object;
# The object lives inside the container -- it is implemented by the contained app. That app # The object lives inside the container -- it is implemented by the contained app. That app
# handles `Restore` requests for this ref. The content of the ref is defined by the app # handles `Restore` requests for this ref. The content of the ref is defined by the app
# and opaque to the container. The container shall ensure that the raw bits of this ref are # and opaque to the container. The container may offer the ability to encrypt outgoing
# not revealed to the outside world, so as long as the app trusts the container, it need not # `SturdyRefs` so that their content is opaque to the outside world; in this case, so long as
# worry about encrypting or signing the ref. # the app trusts the container, it need not encrypt nor sign the ref itself. However, this
# may be undesirable for level 1 applications that only export non-secret singletons anyway,
# so it should be configurable.
} }
} }
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment