Putting these hardware components together in order to achieve a situation in which cloud providers can decrypt data only by programs that embody an agreed policy has turned out to be quite a challenge. Flicker (McCune et al., 2008) is a low-level architecture that achieves that, but only for small and short-lived programs running in impoverished environments (e.g., with basic input-output that excludes interaction with users or on the network). The main achievement of Flicker is to reduce the size of the trusted computing base (TCB)—that is, the program that has to be trusted (in addition to p)—to about 250 lines of code. TrustVisor (McCune et al., 2010) is another architecture by the same team, which is much more flexible, allowing the program p to include a full operating system (and therefore including software stacks for networking) running on a virtual machine, albeit at the cost of a larger TCB.