Dot product

This document details the dot product operations supported by TFHE-rs.

name
symbol
type

Dot Product

dot_product

Binary

Currently, the dot product supports the following case:

  • One operand is a slice of FheBool

  • The other operand is a slice of clear values (e.g., u64)

  • Both slices must be of the same length

The following example shows how to perform dot product:

use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint8};

fn main() {
    let (client_key, server_key) = generate_keys(ConfigBuilder::default());
    set_server_key(server_key);
  
    let a = [true, false, true]
     .into_iter()
     .map(|b| FheBool::encrypt(b, &client_key))
     .collect::<Vec<_>>();
   
    let b = [2u8, 3u8, 4u8];
   
    let result = FheUint8::dot_product(&a, &b);
    let decrypted: u8 = result.decrypt(&client_key);
    assert_eq!(decrypted, 6u8);
}

Last updated

Was this helpful?