I'm currently trying to understand all the differences between homomorphic encryption and garbeled circuits. As I understood the use of homomorphic encryption hides either the data or the computation from the computational party, but what about the circuit? Is only the data hidden with homomorphic encryption?
There has been work on using garbled circuits while also hiding the function. This can be done via implementing a universal circuit inside the garbled circuit. However, the standard garbled circuit does reveal the topology of the circuit. Also, when considering malicious security, the most efficient method is cut-and-choose, and this reveals the actual circuit. When you need to hide the function, then you need to take care of this explicitly (e.g., via a universal circuit, as mentioned). Here is one paper by Mohassel and Sadeghian that considers this question.
Beyond this, there are many differences between FHE and secure computation. In general, FHE is one way of getting secure computation, but it can also be used in other settings where secure computation is not applicable (e.g., when you cannot have interaction). However, FHE is not yet efficient enough for most tasks, and garbled circuits is much much faster. Having said this, in some cases, it suffices to use somewhat FHE (which works for low-depth circuits), and this can be very fast.
yes in general garbled circuits allow hiding of data from other party. Secure Two party computation is all about a known function which both the parties agree upon priorly (For example, in millionaire's problem, it is comparison) and Subsequently hiding their particular inputs from other