I have not reviewed the source. https://en.m.wikipedia.org/wiki/Oblivious_RAM An *oblivious RAM (ORAM) simulator* is a compiler <https://en.m.wikipedia.org/wiki/Compiler> that transforms algorithms <https://en.m.wikipedia.org/wiki/Algorithms> in such a way that the resulting algorithms preserve the input <https://en.m.wikipedia.org/wiki/Input/output>-output <https://en.m.wikipedia.org/wiki/Output_%28computing%29> behavior of the original algorithm but the distribution <https://en.m.wikipedia.org/wiki/Probability_distribution> of memory <https://en.m.wikipedia.org/wiki/Memory> access pattern of the transformed algorithm is independent of the memory access pattern of the original algorithm. The definition of ORAMs is motivated by the fact that an adversary can obtain nontrivial information about the execution of a program and the nature of the data <https://en.m.wikipedia.org/wiki/Data> that it is dealing with, just by observing the pattern in which various locations of memory are accessed during its execution. An adversary can get this information even if the data values are all encrypted <https://en.m.wikipedia.org/wiki/Encryption>. The definition suits equally well to the settings of protected programs running on unprotected shared memory <https://en.m.wikipedia.org/wiki/Shared_memory> as well as a client running a program on its system by accessing previously stored data on a remote server <https://en.m.wikipedia.org/wiki/Remote_server>. The concept was formulated by Oded Goldreich <https://en.m.wikipedia.org/wiki/Oded_Goldreich> in 1987.[1] <https://en.m.wikipedia.org/wiki/Oblivious_RAM#cite_note-G87-1>