1. A method of performing a query, the method comprising: generating, by processing circuitry, garbled query logic from a query function and query input; performing, by the processing circuitry, a set of exchanges with a set of server computers which process the garbled query logic with garbled query data that the set of server computers acquired from a set of query data sources that produced the garbled query data from readable query data, the set of server computers being obscured from deriving the query function and the query input from the garbled query logic, and the set of server computers being obscured from deriving the readable query data from the garbled query data; and obtaining, by the processing circuitry, a query result from the set of exchanges performed with the set of server computers, wherein the set of server computers includes a first server computer and a second server computer, wherein generating the garbled query logic from the query function and the query input includes decomposing the Query function into a first query function and a second query function and encrypting the first query function, the second query function, and the query input according to a common encryption/decryption scheme to form, respectively, a garbled first query function, a garbled second query function, and a garbled query input, and wherein performing the set of exchanges with the set of server computers includes: sending bits representing the garbled first query function and the garbled query input to the first server computer, receiving bits representing a first output from the first server computer, the first output being produced by the first server computer upon inputting the bits representing the garbled query input and bits representing first garbled query data into the primary query function, and sending bits representing the garbled second query function and the bits representing the first output to the second server computer.