# Concrete backends

The concrete backends are implementations of the cryptographic primitives of the Zama variant of [TFHE](https://eprint.iacr.org/2018/421.pdf).
The compiler emits code which combines call into these backends to perform more complex homomorphic operations.

There are client and server features.

Client features are:
 - private (G)LWE key generation (currently random bits)
 - encryption of ciphertexts using a private key
 - public key generation from private keys for keyswitch, bootstrap or private packing
 - (de)serialization of ciphertexts and public keys (also needed server side)

Server features are homomorphic operations on ciphertexts:
 - linear operations (multisums with plain weights)
 - keyswitch
 - simple PBS
 - WoP PBS


There are currently 2 backends:
- `concrete-cpu` which implements both client and server features targeting the CPU.
- `concrete-cuda` which implements only server features targeting GPUs to accelerate homomorphic circuit evalutation.


The compiler uses `concrete-cpu` for the client and can use either `concrete-cpu` or `concrete-cuda` for the server.
