# TFHE Dialect

High Level Fully Homomorphic Encryption dialect A dialect for representation of high level operation on fully homomorphic ciphertext.

## Operation definition

### `TFHE.batched_add_glwe_cst_int` (::mlir::concretelang::TFHE::ABatchedAddGLWECstIntOp)

Batched version of AddGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand   | Description                 |
| :----------: | --------------------------- |
| `ciphertext` | A GLWE ciphertext           |
| `plaintexts` | 1D tensor of integer values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_add_glwe_int_cst` (::mlir::concretelang::TFHE::ABatchedAddGLWEIntCstOp)

Batched version of AddGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |
|  `plaintext`  | integer                               |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_add_glwe_int` (::mlir::concretelang::TFHE::ABatchedAddGLWEIntOp)

Batched version of AddGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |
|  `plaintexts` | 1D tensor of integer values           |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_add_glwe` (::mlir::concretelang::TFHE::ABatchedAddGLWEOp)

Batched version of AddGLWEOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|     Operand     | Description                           |
| :-------------: | ------------------------------------- |
| `ciphertexts_a` | 1D tensor of A GLWE ciphertext values |
| `ciphertexts_b` | 1D tensor of A GLWE ciphertext values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.add_glwe_int` (::mlir::concretelang::TFHE::AddGLWEIntOp)

Returns the sum of a clear integer and an lwe ciphertext

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

| Operand | Description       |
| :-----: | ----------------- |
|   `a`   | A GLWE ciphertext |
|   `b`   | integer           |

#### Results:

|   Result  | Description       |
| :-------: | ----------------- |
| «unnamed» | A GLWE ciphertext |

### `TFHE.add_glwe` (::mlir::concretelang::TFHE::AddGLWEOp)

Returns the sum of two lwe ciphertexts

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

| Operand | Description       |
| :-----: | ----------------- |
|   `a`   | A GLWE ciphertext |
|   `b`   | A GLWE ciphertext |

#### Results:

|   Result  | Description       |
| :-------: | ----------------- |
| «unnamed» | A GLWE ciphertext |

### `TFHE.batched_bootstrap_glwe` (::mlir::concretelang::TFHE::BatchedBootstrapGLWEOp)

Batched version of KeySwitchGLWEOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

| Attribute |                     MLIR Type                    | Description                              |
| :-------: | :----------------------------------------------: | ---------------------------------------- |
|   `key`   | ::mlir::concretelang::TFHE::GLWEBootstrapKeyAttr | An attribute representing bootstrap key. |

#### Operands:

|     Operand    | Description                                 |
| :------------: | ------------------------------------------- |
|  `ciphertexts` | 1D tensor of A GLWE ciphertext values       |
| `lookup_table` | 1D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_keyswitch_glwe` (::mlir::concretelang::TFHE::BatchedKeySwitchGLWEOp)

Batched version of KeySwitchGLWEOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

| Attribute |                     MLIR Type                    | Description                              |
| :-------: | :----------------------------------------------: | ---------------------------------------- |
|   `key`   | ::mlir::concretelang::TFHE::GLWEKeyswitchKeyAttr | An attribute representing keyswitch key. |

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_mapped_bootstrap_glwe` (::mlir::concretelang::TFHE::BatchedMappedBootstrapGLWEOp)

Batched version of KeySwitchGLWEOp which also batches the lookup table

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

| Attribute |                     MLIR Type                    | Description                              |
| :-------: | :----------------------------------------------: | ---------------------------------------- |
|   `key`   | ::mlir::concretelang::TFHE::GLWEBootstrapKeyAttr | An attribute representing bootstrap key. |

#### Operands:

|     Operand    | Description                                 |
| :------------: | ------------------------------------------- |
|  `ciphertexts` | 1D tensor of A GLWE ciphertext values       |
| `lookup_table` | 2D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_mul_glwe_cst_int` (::mlir::concretelang::TFHE::BatchedMulGLWECstIntOp)

Batched version of MulGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand   | Description                 |
| :----------: | --------------------------- |
| `ciphertext` | A GLWE ciphertext           |
| `cleartexts` | 1D tensor of integer values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_mul_glwe_int_cst` (::mlir::concretelang::TFHE::BatchedMulGLWEIntCstOp)

Batched version of MulGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |
|  `cleartext`  | integer                               |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_mul_glwe_int` (::mlir::concretelang::TFHE::BatchedMulGLWEIntOp)

Batched version of MulGLWEIntOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |
|  `cleartexts` | 1D tensor of integer values           |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.batched_neg_glwe` (::mlir::concretelang::TFHE::BatchedNegGLWEOp)

Batched version of NegGLWEOp

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

|    Operand    | Description                           |
| :-----------: | ------------------------------------- |
| `ciphertexts` | 1D tensor of A GLWE ciphertext values |

#### Results:

|  Result  | Description                           |
| :------: | ------------------------------------- |
| `result` | 1D tensor of A GLWE ciphertext values |

### `TFHE.bootstrap_glwe` (::mlir::concretelang::TFHE::BootstrapGLWEOp)

Programmable bootstraping of a GLWE ciphertext with a lookup table

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

| Attribute |                     MLIR Type                    | Description                              |
| :-------: | :----------------------------------------------: | ---------------------------------------- |
|   `key`   | ::mlir::concretelang::TFHE::GLWEBootstrapKeyAttr | An attribute representing bootstrap key. |

#### Operands:

|     Operand    | Description                                 |
| :------------: | ------------------------------------------- |
|  `ciphertext`  | A GLWE ciphertext                           |
| `lookup_table` | 1D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description       |
| :------: | ----------------- |
| `result` | A GLWE ciphertext |

### `TFHE.encode_expand_lut_for_bootstrap` (::mlir::concretelang::TFHE::EncodeExpandLutForBootstrapOp)

Encode and expand a lookup table so that it can be used for a bootstrap.

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

|   Attribute  |      MLIR Type      | Description                       |
| :----------: | :-----------------: | --------------------------------- |
|  `polySize`  | ::mlir::IntegerAttr | 32-bit signless integer attribute |
| `outputBits` | ::mlir::IntegerAttr | 32-bit signless integer attribute |
|  `isSigned`  |   ::mlir::BoolAttr  | bool attribute                    |

#### Operands:

|        Operand       | Description                                 |
| :------------------: | ------------------------------------------- |
| `input_lookup_table` | 1D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description                                 |
| :------: | ------------------------------------------- |
| `result` | 1D tensor of 64-bit signless integer values |

### `TFHE.encode_lut_for_crt_woppbs` (::mlir::concretelang::TFHE::EncodeLutForCrtWopPBSOp)

Encode and expand a lookup table so that it can be used for a wop pbs.

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

|      Attribute     |      MLIR Type      | Description                       |
| :----------------: | :-----------------: | --------------------------------- |
| `crtDecomposition` |  ::mlir::ArrayAttr  | 64-bit integer array attribute    |
|      `crtBits`     |  ::mlir::ArrayAttr  | 64-bit integer array attribute    |
|  `modulusProduct`  | ::mlir::IntegerAttr | 32-bit signless integer attribute |
|     `isSigned`     |   ::mlir::BoolAttr  | bool attribute                    |

#### Operands:

|        Operand       | Description                                 |
| :------------------: | ------------------------------------------- |
| `input_lookup_table` | 1D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description                                 |
| :------: | ------------------------------------------- |
| `result` | 2D tensor of 64-bit signless integer values |

### `TFHE.encode_plaintext_with_crt` (::mlir::concretelang::TFHE::EncodePlaintextWithCrtOp)

Encodes a plaintext by decomposing it on a crt basis.

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

|  Attribute |      MLIR Type      | Description                       |
| :--------: | :-----------------: | --------------------------------- |
|   `mods`   |  ::mlir::ArrayAttr  | 64-bit integer array attribute    |
| `modsProd` | ::mlir::IntegerAttr | 64-bit signless integer attribute |

#### Operands:

| Operand | Description             |
| :-----: | ----------------------- |
| `input` | 64-bit signless integer |

#### Results:

|  Result  | Description                                 |
| :------: | ------------------------------------------- |
| `result` | 1D tensor of 64-bit signless integer values |

### `TFHE.keyswitch_glwe` (::mlir::concretelang::TFHE::KeySwitchGLWEOp)

Change the encryption parameters of a glwe ciphertext by applying a keyswitch

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

| Attribute |                     MLIR Type                    | Description                              |
| :-------: | :----------------------------------------------: | ---------------------------------------- |
|   `key`   | ::mlir::concretelang::TFHE::GLWEKeyswitchKeyAttr | An attribute representing keyswitch key. |

#### Operands:

|    Operand   | Description       |
| :----------: | ----------------- |
| `ciphertext` | A GLWE ciphertext |

#### Results:

|  Result  | Description       |
| :------: | ----------------- |
| `result` | A GLWE ciphertext |

### `TFHE.mul_glwe_int` (::mlir::concretelang::TFHE::MulGLWEIntOp)

Returns the product of a clear integer and an lwe ciphertext

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

| Operand | Description       |
| :-----: | ----------------- |
|   `a`   | A GLWE ciphertext |
|   `b`   | integer           |

#### Results:

|   Result  | Description       |
| :-------: | ----------------- |
| «unnamed» | A GLWE ciphertext |

### `TFHE.neg_glwe` (::mlir::concretelang::TFHE::NegGLWEOp)

Negates a glwe ciphertext

Traits: AlwaysSpeculatableImplTrait

Interfaces: BatchableOpInterface, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

| Operand | Description       |
| :-----: | ----------------- |
|   `a`   | A GLWE ciphertext |

#### Results:

|   Result  | Description       |
| :-------: | ----------------- |
| «unnamed» | A GLWE ciphertext |

### `TFHE.sub_int_glwe` (::mlir::concretelang::TFHE::SubGLWEIntOp)

Substracts an integer and a GLWE ciphertext

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands:

| Operand | Description       |
| :-----: | ----------------- |
|   `a`   | integer           |
|   `b`   | A GLWE ciphertext |

#### Results:

|   Result  | Description       |
| :-------: | ----------------- |
| «unnamed» | A GLWE ciphertext |

### `TFHE.wop_pbs_glwe` (::mlir::concretelang::TFHE::WopPBSGLWEOp)

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Attributes:

|      Attribute     |                        MLIR Type                        | Description                              |
| :----------------: | :-----------------------------------------------------: | ---------------------------------------- |
|        `ksk`       |     ::mlir::concretelang::TFHE::GLWEKeyswitchKeyAttr    | An attribute representing keyswitch key. |
|        `bsk`       |     ::mlir::concretelang::TFHE::GLWEBootstrapKeyAttr    | An attribute representing bootstrap key. |
|       `pksk`       | ::mlir::concretelang::TFHE::GLWEPackingKeyswitchKeyAttr | An attribute representing Wop Pbs key.   |
| `crtDecomposition` |                    ::mlir::ArrayAttr                    | 64-bit integer array attribute           |
|     `cbsLevels`    |                   ::mlir::IntegerAttr                   | 32-bit signless integer attribute        |
|    `cbsBaseLog`    |                   ::mlir::IntegerAttr                   | 32-bit signless integer attribute        |

#### Operands:

|    Operand    | Description                                 |
| :-----------: | ------------------------------------------- |
| `ciphertexts` |                                             |
| `lookupTable` | 2D tensor of 64-bit signless integer values |

#### Results:

|  Result  | Description |
| :------: | ----------- |
| `result` |             |

### `TFHE.zero` (::mlir::concretelang::TFHE::ZeroGLWEOp)

Returns a trivial encryption of 0

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Results:

| Result | Description       |
| :----: | ----------------- |
|  `out` | A GLWE ciphertext |

### `TFHE.zero_tensor` (::mlir::concretelang::TFHE::ZeroTensorGLWEOp)

Returns a tensor containing trivial encryptions of 0

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Results:

|  Result  | Description |
| :------: | ----------- |
| `tensor` |             |

## Attribute definition

### GLWEBootstrapKeyAttr

An attribute representing bootstrap key.

Syntax:

```
#TFHE.bsk<
  mlir::concretelang::TFHE::GLWESecretKey,   # inputKey
  mlir::concretelang::TFHE::GLWESecretKey,   # outputKey
  int,   # polySize
  int,   # glweDim
  int,   # levels
  int,   # baseLog
  int   # index
>
```

#### Parameters:

| Parameter |                  C++ type                 | Description |
| :-------: | :---------------------------------------: | ----------- |
|  inputKey | `mlir::concretelang::TFHE::GLWESecretKey` |             |
| outputKey | `mlir::concretelang::TFHE::GLWESecretKey` |             |
|  polySize |                   `int`                   |             |
|  glweDim  |                   `int`                   |             |
|   levels  |                   `int`                   |             |
|  baseLog  |                   `int`                   |             |
|   index   |                   `int`                   |             |

### GLWEKeyswitchKeyAttr

An attribute representing keyswitch key.

Syntax:

```
#TFHE.ksk<
  mlir::concretelang::TFHE::GLWESecretKey,   # inputKey
  mlir::concretelang::TFHE::GLWESecretKey,   # outputKey
  int,   # levels
  int,   # baseLog
  int   # index
>
```

#### Parameters:

| Parameter |                  C++ type                 | Description |
| :-------: | :---------------------------------------: | ----------- |
|  inputKey | `mlir::concretelang::TFHE::GLWESecretKey` |             |
| outputKey | `mlir::concretelang::TFHE::GLWESecretKey` |             |
|   levels  |                   `int`                   |             |
|  baseLog  |                   `int`                   |             |
|   index   |                   `int`                   |             |

### GLWEPackingKeyswitchKeyAttr

An attribute representing Wop Pbs key.

Syntax:

```
#TFHE.pksk<
  mlir::concretelang::TFHE::GLWESecretKey,   # inputKey
  mlir::concretelang::TFHE::GLWESecretKey,   # outputKey
  int,   # outputPolySize
  int,   # inputLweDim
  int,   # glweDim
  int,   # levels
  int,   # baseLog
  int   # index
>
```

#### Parameters:

|    Parameter   |                  C++ type                 | Description |
| :------------: | :---------------------------------------: | ----------- |
|    inputKey    | `mlir::concretelang::TFHE::GLWESecretKey` |             |
|    outputKey   | `mlir::concretelang::TFHE::GLWESecretKey` |             |
| outputPolySize |                   `int`                   |             |
|   inputLweDim  |                   `int`                   |             |
|     glweDim    |                   `int`                   |             |
|     levels     |                   `int`                   |             |
|     baseLog    |                   `int`                   |             |
|      index     |                   `int`                   |             |

## Type definition

### GLWECipherTextType

A GLWE ciphertext

An GLWE cipher text

#### Parameters:

| Parameter |                  C++ type                 | Description |
| :-------: | :---------------------------------------: | ----------- |
|    key    | `mlir::concretelang::TFHE::GLWESecretKey` |             |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zama.org/concrete/2.4/explanations/compilation/dialects/tfhedialect.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
