Poseidon 基本API 介绍

源地址:Poseidon基本API介绍https://poseidon-hpu.readthedocs.io/en/latest/Getting_Started/API/Basic%20API.html

基本 API

数据结构

以下数据结构适用于 Poseidon 支持的所有三种全同态加密(FHE)方案(BFV、BGV 和 CKKS)

1、内存地址管理MemoryManager

描述MemoryManager类用于在软件和硬件模式下管理内存空间。不建议用户直接使用它。

2、加密方案的参数类ParametersLiteral

描述ParametersLiteral类存储模数数据和与模数相关的信息,用于初始化 Poseidon 上下文。

函数

ParametersLiteral(SchemeType scheme_type, uint32_t log_n, uint32_t log_slots, uint32_t log_scale, uint32_t hamming_weight, uint32_t q0_level, Modulus plain_modulus, const vector<Modulus> &q, const vector<Modulus> &p, MemoryPoolHandle pool = MemoryManager::GetPool());
  • scheme_type (SchemeType):表示方案类型,选项有 CKKS、BFV 和 BGV。
  • log_n (uint32_t):多项式次数的对数。
  • log_slots (uint32_t):消息槽数量的对数。
  • log_scale (uint32_t):缩放因子的对数。
  • hamming_weight (uint32_t):秘密密钥的汉明重量。
  • q0_level (uint32_t):q_0的 RNS 级别(默认值为 0)。
  • plain_modulus (Modulus):明文模数(仅在 BGV 或 BFV 方案中使用)。
  • q (const vector &):模数链 Q 的确定模数。
  • p (const vector &):模数链 P 的确定模数。

用法:构造自定义参数。

void set_log_modulus(const vector<uint32_t> &log_q, const vector<uint32_t> &log_p);
  • log_q(const vector<uint32_t> &):模数链 Q 中每个模数的比特数。
  • log_p(const vector<uint32_t> &):模数链 P 中每个模数的比特数。

用法:设置模数链中每个模数的比特数。

void set_modulus(const vector<Modulus> &mod_chain_q,const vector<Modulus> &mod_chain_p);
  • mod_chain_q (const vector &):模数链 Q 中每个模的值。
  • mod_chain_p (const vector &):模数链 P 中每个模的值。

用法:直接设置模数链中每个模的值。

uint32_t degree() const;

用法:返回多项式次数。

uint32_t slot() const;

用法:返回消息槽的数量。

const parms_id_type & parms_id() const;

用法:返回参数的 ID。

const SchemeType &scheme() const;

用法:返回方案类型。

uint32_t LogN() const;

用法:返回多项式次数的对数。

uint32_t LogSlots() const;

用法:返回消息槽数量的对数。

uint32_t HammingWeight() const;

用法:返回汉明重量。

uint32_t q0_level() const;

用法:返回q_0的 RNS 级别。

const Modulus &plain_modulus() const;

用法:返回明文模数。

const vector<Modulus> &Q() const;

用法:返回模数链 Q 的模数。

const vector<Modulus> &P() const;

用法:返回模数链 P 的模数。

uint32_t LogScale() const;

用法:返回缩放因子的对数。

uint32_t scale() const();

用法:返回缩放因子。

3、默认加密方案的参数类ParametersLiteralDefault

描述ParametersLiteralDefault是用于初始化加密参数的类,是ParametersLiteral的派生类。

函数

ParametersLiteralDefault(SchemeType scheme_type, uint32_t degree, sec_level_type sec_level, MemoryPoolHandle pool = MemoryManager::GetPool());
  • scheme_type (SchemeType):表示方案类型,可以选择 CKKS、BFV、BGV。
  • degree (uint32_t):表示次数,可以选择 2048、4096、8192、16384、32768。
  • sec_level (sec_level_type):表示安全级别,可以选择 none、tc128、tc192、tc256。

用法:构造默认参数。

4、上下文信息管理类PoseidonContext

描述PoseidonContext是用于生成和管理上下文信息的类。

函数

PoseidonContext(const ParametersLiteral& param_literal, bool using_hardware = true);
  • param_literal (const ParametersLiteral&):表示用于计算上下文信息的加密参数。
  • using_hardware (bool):是否使用硬件。

用法:构造 Poseidon 上下文。

shared_ptr<const poseidon::ParametersLiteral> parameters_literal() const;

用法:返回参数列表。

KeySwitchVariant key_switch_variant() const;

用法:返回当前参数的密钥切换变体。

shared_ptr<CrtContext> crt_context() const;

用法:返回软件上下文。

shared_ptr<HardwareContext> hardware_context() const;

用法:返回硬件上下文。

bool using_hardware() const;

用法:返回是否使用硬件的状态。

void set_random_generator(std::shared_ptr<UniformRandomGeneratorFactory> random_generator);
  • random_generator (std::shared_ptr< UniformRandomGeneratorFactory>):随机数生成器的共享指针。

用法:用于设置随机数生成器。

std::shared_ptr<UniformRandomGeneratorFactory> random_generator() const;

用法:返回随机数生成器。

5、明文类Plaintext

描述Plaintext是用于存储明文信息的类。

函数

Plaintext(MemoryPoolHandle pool = MemoryManager::GetPool());
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个不分配内存的空明文。

Plaintext(std::size_t coeff_count, MemoryPoolHandle pool = MemoryManager::GetPool());
  • coeff_count (std::size_t):明文多项式中(不含零的)系数数量。
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个表示常数多项式 0 的明文。多项式的系数数量设置为给定值。容量也设置为相同值。

Plaintext(const std::string &hex_poly, MemoryPoolHandle pool = MemoryManager::GetPool());
  • hex_poly (const std::string &):指定明文多项式的格式化多项式字符串。
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:从描述明文多项式的给定十六进制字符串构造一个明文。

注意:多项式的字符串描述必须遵循to_string()返回的格式,形式为 “7FFx^3 + 1x^1 + 3”,并总结为以下规则:

  1. 项按指数严格递减的顺序列出。
  2. 系数值为非负且采用十六进制格式(支持大写和小写字母)。
  3. 指数为正且采用十进制格式。
  4. 零系数项(包括常数项)可以(但不必须)省略。
  5. 指数值为 1 的项必须准确写为 x^1。
  6. 指数值为 0 的项(常数项)必须写为不带指数的十六进制数。
  7. 项之间必须用确切的 <空格>+<空格> 分隔,不允许使用减号。
  8. 除了 + 号,其他项不应有空格。
Plaintext(const Plaintext &copy) = default;
  • copy (const Plaintext &):要复制的明文。

用法:通过复制给定的明文创建一个新的明文。

Plaintext(Plaintext &&source) = default;
  • source (Plaintext &&source):要移动的明文。

用法:通过移动给定的明文创建一个新的明文。

void reserve(std::size_t capacity);
  • capacity (std::size_t):容量。

用法:分配足够的内存来容纳具有给定容量的明文的后备数组。

void resize(const PoseidonContext &context, parms_id_type parms_id, size_t size);
  • context (const PoseidonContext &)PoseidonContext
  • parms_id (parms_id_type):当前参数的 ID。
  • size (std::size_t):明文多项式中的系数数量。

用法:调整明文的大小以具有给定的系数数量。如果新的系数数量不适合当前容量,明文将自动重新分配。

void release();

用法:重置明文。此函数释放明文分配的任何内存,将其返回给内存池。

Plaintext &operator=(const Plaintext &assign) = default;
  • assign (const Plaintext &):要复制的明文。

用法:将给定的明文复制到当前明文。

Plaintext &operator=(Plaintext &&assign) = default;
  • assign (const Plaintext &):要移动的明文。

用法:将给定的明文移动到当前明文。

Plaintext &operator=(const std::string &hex_poly);
  • hex_poly (const std::string &):指定明文多项式的格式化多项式字符串。

用法:将当前明文的值设置为由给定十六进制字符串表示的多项式。

注意:多项式的字符串描述必须遵循to_string()返回的格式,形式为 “7FFx^3 + 1x^1 + 3”,并总结为以下规则:

  1. 项按指数严格递减的顺序列出。
  2. 系数值为非负且采用十六进制格式(支持大写和小写字母)。
  3. 指数为正且采用十进制格式。
  4. 零系数项(包括常数项)可以(但不必须)省略。
  5. 指数值为 1 的项必须准确写为 x^1。
  6. 指数值为 0 的项(常数项)必须写为不带指数的十六进制数。
  7. 项之间必须用确切的 <空格>+< 空格 > 分隔,不允许使用减号。
  8. 除了 + 号,其他项不应有空格。
Plaintext &operator=(pt_coeff_type const_coeff);
  • const_coeff (pt_coeff_type):常数系数。

用法:将当前明文的值设置为给定的常数多项式,并将parms_id设置为parms_id_zero,有效地将明文标记为未进行 NTT 变换。系数数量设置为 1。

void set_zero(std::size_t start_coeff, std::size_t length);
  • start_coeff (std::size_t):要设置为零的第一个系数的索引。
  • length (std::size_t):要设置为零的系数数量。

用法:将明文多项式的给定系数范围设置为零;如果长度为零,则不执行任何操作。

void set_zero(std::size_t start_coeff);
  • start_coeff (std::size_t):要设置为零的第一个系数的索引。

用法:从给定索引开始将明文多项式系数设置为零。

void set_zero();

用法:将明文多项式设置为零。

const auto &dyn_array() const;

用法:返回对后备DynArray对象的引用。

pt_coeff_type *data();

用法:返回指向明文多项式开头的指针。

const pt_coeff_type *data() const;

用法:返回指向明文多项式开头的常量指针。

pt_coeff_type *data(std::size_t coeff_index);
  • coeff_index (std::size_t):明文多项式中系数的索引。

用法:返回指向明文多项式中给定系数的指针。

const pt_coeff_type *data(std::size_t coeff_index) const;
  • coeff_index (std::size_t):明文多项式中系数的索引。

用法:返回指向明文多项式中给定系数的常量指针。

const pt_coeff_type &operator[](std::size_t coeff_index) const;
  • coeff_index (std::size_t):明文多项式中系数的索引。

用法:返回对明文多项式中给定系数的常量引用。

pt_coeff_type &operator[](std::size_t coeff_index);
  • coeff_index (std::size_t):明文多项式中系数的索引。

用法:返回对明文多项式中给定系数的引用。

bool operator==(const Plaintext &compare) const;
  • compare (const Plaintext &):要比较的明文。

用法:返回明文与给定明文是否具有相同的语义值。比较时忽略前导零系数。

bool operator!=(const Plaintext &compare) const;
  • compare (const Plaintext &):要比较的明文。

用法:返回明文与给定明文是否具有不同的语义值。比较时忽略前导零系数。

bool is_ntt_form() const;

用法:返回明文是否处于 NTT 形式。

bool &is_ntt_form();

用法:返回 NTT 形式的引用。

double &scale();

用法:返回对缩放因子的引用。仅在使用 CKKS 加密方案时需要此操作。用户几乎没有理由手动更改缩放因子。

const double &scale() const;

用法:返回对缩放因子的常量引用。仅在使用 CKKS 加密方案时需要此操作。

const parms_id_type &parms_id() const;

用法:返回对参数 ID 的常量引用。

parms_id_type &parms_id();

用法:返回对参数 ID 的引用。

bool is_valid(const PoseidonContext &context);

用法:返回明文参数 ID 是否有效。

void compute_ckks_hardware_id() const;

用法:计算此明文的硬件 ID。

MemoryPoolHandle pool() const;

用法:返回当前使用的MemoryPoolHandle

bool is_zero() const;

用法:返回当前明文多项式的所有系数是否都为零。

std::size_t capacity() const;

用法:返回当前分配的容量。

std::size_t coeff_count() const;

用法:返回当前明文多项式的系数数量。

std::size_t significant_coeff_count() const;

用法:返回当前明文多项式的有效系数数量。

std::size_t nonzero_coeff_count() const;

用法:返回当前明文多项式的非零系数数量。

std::string to_string() const;

用法:返回明文多项式的人类可读字符串描述。

6、密文类Ciphertext

描述Ciphertext是用于存储密文信息的类。

函数

Ciphertext(MemoryPoolHandle pool = MemoryManager::GetPool());
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个不分配内存的空密文。

Ciphertext(const PoseidonContext &context, MemoryPoolHandle pool = MemoryManager::GetPool());
  • context (const Ciphertext &)PoseidonContext
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个容量为 2 的空密文。除了容量之外,分配大小由与给定PoseidonContext关联的最高级别参数确定。

Ciphertext(const PoseidonContext &context, parms_id_type parms_id, MemoryPoolHandle pool = MemoryManager::GetPool());
  • context (const Ciphertext &)PoseidonContext
  • parms_id (parms_id_type):当前参数的 ID。
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个容量为 2 的空密文。除了容量之外,分配大小由具有给定parms_id的加密参数确定。

Ciphertext(const PoseidonContext &context, parms_id_type parms_id, std::size_t size_capacity,MemoryPoolHandle pool = MemoryManager::GetPool());
  • context (const Ciphertext &)PoseidonContext
  • parms_id (parms_id_type):当前参数的 ID。
  • size_capacity (std::size_t):容量。
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:构造一个具有给定容量的空密文。除了容量之外,分配大小由给定的加密参数确定。

Ciphertext(const Ciphertext &copy);
  • copy (Ciphertext &&):要复制的密文。

用法:通过复制给定的密文创建一个新的密文。

Ciphertext(Ciphertext &&source) = default;
  • source (Ciphertext &&):要移动的密文。

用法:通过移动给定的密文创建一个新的密文。

Ciphertext(const Ciphertext &copy, MemoryPoolHandle pool);
  • copy (const Ciphertext &copy):要复制的密文。
  • pool (MemoryPoolHandle):指向有效内存池的MemoryPoolHandle

用法:通过复制给定的密文创建一个新的密文。

void reserve(const PoseidonContext &context, parms_id_type parms_id, std::size_t size_capacity);
  • context (const PoseidonContext &)PoseidonContext
  • parms_id (parms_id_type):与加密对应的parms_id
  • size_capacity (std::size_t):容量。

用法:分配足够的内存来容纳具有给定容量的密文的后备数组。除了容量之外,分配大小由与给定parms_id对应的加密参数确定。

void reserve(const PoseidonContext &context, std::size_t size_capacity);
  • context (const PoseidonContext &)PoseidonContext
  • size_capacity (std::size_t):容量。

用法:分配足够的内存来容纳具有给定容量的密文的后备数组。除了容量之外,分配大小由与给定PoseidonContext关联的最高级别参数确定。

void resize(const PoseidonContext &context, parms_id_type parms_id, std::size_t size);
  • context (const PoseidonContext &)PoseidonContext
  • parms_id (parms_id_type):与加密对应的parms_id
  • size (std::size_t):新的大小。

用法:将密文调整为给定大小,如果密文的容量太小则重新分配。密文参数由给定的PoseidonContextparms_id确定。

void resize(const PoseidonContext &context, std::size_t size);
  • context (const PoseidonContext &)PoseidonContext
  • size (std::size_t):新的大小。

用法:将密文调整为给定大小,如果密文的容量太小则重新分配。密文参数由与给定PoseidonContext关联的最高级别参数确定。

void release();

用法:重置密文。此函数释放密文分配的任何内存,将其返回给内存池。它还将所有加密参数特定的大小信息设置为零。

Ciphertext &operator=(const Ciphertext &assign);
  • assign (const Ciphertext &):要复制的密文。

用法:将给定的密文复制到当前密文。

Ciphertext &operator=(Ciphertext &&assign) = default;
  • assign (Ciphertext &&):要移动的密文。

用法:将给定的密文移动到当前密文。

const auto &dyn_array() const;

用法:返回对后备DynArray对象的引用。

  • ct_coeff_type *data();

用法:返回指向密文数据开头的指针。

const ct_coeff_type *data() const;

用法:返回指向密文数据开头的常量指针。

ct_coeff_type *data(std::size_t poly_index);
  • poly_index (std::size_t):密文中多项式的索引。

用法:返回指向密文数据中特定多项式的指针。

const ct_coeff_type *data(std::size_t poly_index) const;
  • poly_index (std::size_t):密文中多项式的索引。

用法:返回指向密文数据中特定多项式的常量指针。

const RNSPoly &operator[] (std::size_t poly_index);
  • poly_index (std::size_t):密文中多项式的索引。

用法:返回密文数据中特定多项式的常量RNSPoly类。

const vector<RNSPoly> &polys() const;

用法:返回RNSPoly向量的常量引用。

const vector<RNSPoly> &polys() const;

用法:返回RNSPoly向量的引用。

RNSPoly &operator[] (std::size_t poly_index);
  • poly_index (std::size_t):密文中多项式的索引。

用法:返回密文数据中特定多项式的RNSPoly类。

bool is_ntt_form() const noexcept;

用法:返回密文是否处于 NTT 形式。

bool &is_ntt_form() noexcept;

用法:返回密文是否处于 NTT 形式。

parms_id_type &parms_id() noexcept;

用法:返回parms_id的引用。

const parms_id_type &parms_id() const noexcept;

用法:返回parms_id的常量引用。

double &scale() noexcept;

用法:返回对缩放因子的引用。仅在使用 CKKS 加密方案时需要此操作。用户几乎没有理由手动更改缩放因子。

const double &scale() const noexcept;

用法:返回对缩放因子的常量引用。仅在使用 CKKS 加密方案时需要此操作。

std::uint64_t &correction_factor() noexcept;

用法:返回对校正因子的引用。仅在使用 BGV 加密方案时需要此操作。用户几乎没有理由手动更改校正因子。

const std::uint64_t &correction_factor() const noexcept;

用法:返回对校正因子的常量引用。仅在使用 BGV 加密方案时需要此操作。

std::size_t coeff_modulus_size() const;

用法:返回相关加密参数的系数模数中的素数数量。这直接影响密文的分配大小。

std::size_t level() const;

用法:返回级别,其等于coeff_modulus_size - 1

std::size_t poly_modulus_degree() const;

用法:返回相关加密参数的多项式模数的次数。这直接影响密文的分配大小。

std::size_t size() const;

用法:返回密文的大小。

std::size_t size_capacity() const noexcept;

用法:返回分配的容量。这意味着在当前加密参数下,当前分配中可以存储的密文的最大大小。

bool is_transparent() const;

用法:检查当前密文是否透明,即是否不需要秘密密钥即可解密。在典型的安全模型中,此类透明密文将不被视为有效。从当前密文的第二个多项式开始,如果所有后续系数都恒为零,则此函数返回true。否则,返回false

MemoryPoolHandle pool() const noexcept;

用法:返回当前使用的MemoryPoolHandle

bool is_valid();

用法:返回密文是否有效。

void compute_ckks_hardware_id() const;

用法:计算此密文的硬件 ID。

7、公钥类PublicKey

描述PublicKey是用于存储公钥信息的类。

函数

PublicKey();

用法:构造一个不分配内存的空公钥。

PublicKey(const PublicKey &copy) = default;
  • copy (const PublicKey &):给定的公钥。

用法:通过复制给定的公钥创建一个新的公钥。

PublicKey(PublicKey &&source) = default;
  • source (PublicKey &&):给定的公钥。

用法:通过移动给定的公钥创建一个新的公钥。

PublicKey &operator=(const PublicKey &assign) = default;
  • assign (const PublicKey &assign):给定的公钥。

用法:将给定的公钥复制到当前公钥。

PublicKey &operator=(PublicKey &&assign) = default;
  • assign (PublicKey &&):给定的公钥。

用法:将给定的公钥移动到当前公钥。

8、重线性化密钥类RelinKeys

描述RelinKeys是用于存储重线性化密钥信息的类。

函数

RelinKeys();

用法:构造一个不分配内存的空RelinKeys

RelinKeys(const RelinKeys &copy) = default;
  • copy (const RelinKeys &):给定的RelinKeys

用法:通过复制给定的RelinKeys创建一个新的RelinKeys

RelinKeys(RelinKeys &&source) = default;
  • source (RelinKeys &&):给定的RelinKeys

用法:通过移动给定的RelinKeys创建一个新的RelinKeys

RelinKeys &operator=(const RelinKeys &assign) = default;
  • assign (const RelinKeys &):给定的RelinKeys

用法:将给定的RelinKeys复制到当前RelinKeys

RelinKeys &operator=(RelinKeys &&assign) = default;
  • assign (RelinKeys &&):给定的RelinKeys

用法:将给定的RelinKeys移动到当前RelinKeys

const std::vector<std::vector<PublicKey>> &key() const;

用法:返回对伽罗瓦密钥的常量引用。返回的伽罗瓦密钥对应于给定的伽罗瓦元素。

9、伽罗瓦密钥类GaloisKeys

描述GaloisKeys是用于存储伽罗瓦密钥信息的类。

函数

GaloisKeys();

用法:构造一个不分配内存的空GaloisKeys

GaloisKeys(const GaloisKeys &copy) = default;
  • copy (const GaloisKeys &):给定的GaloisKeys

用法:通过复制给定的GaloisKeys创建一个新的GaloisKeys

GaloisKeys(GaloisKeys &&source) = default;
  • source (GaloisKeys &&):给定的GaloisKeys

用法:通过移动给定的GaloisKeys创建一个新的GaloisKeys

GaloisKeys &operator=(const GaloisKeys &assign) = default;
  • assign (const GaloisKeys &):给定的GaloisKeys

用法:将给定的GaloisKeys复制到当前GaloisKeys

GaloisKeys &operator=(GaloisKeys &&assign) = default;
  • assign (GaloisKeys &&):给定的GaloisKeys

用法:将给定的GaloisKeys移动到当前GaloisKeys

static inline std::size_t get_index(uint32_t galois_elt);
  • galois_elt (uint32_t):伽罗瓦元素。

用法:用于获取伽罗瓦元素对应索引。

inline bool has_key(uint32_t galois_elt) const;
  • galois_elt (uint32_t):伽罗瓦元素。

用法:返回是否存在与给定伽罗瓦元素对应的伽罗瓦密钥。

const std::vector<std::vector<PublicKey>> &key(std::uint32_t galois_elt) const;

用法:返回对伽罗瓦密钥的常量引用。返回的伽罗瓦密钥对应于给定的伽罗瓦元素。

10、密钥生成类KeyGenerator

描述KeyGenerator是用于生成密钥的类。

函数

KeyGenerator(const PoseidonContext &params);
  • params (const PoseidonContext &)PoseidonContext

用法:构造没有密钥的密钥生成器。

KeyGenerator(const PoseidonContext& params,const SecretKey &sk);
  • params (const PoseidonContext &)PoseidonContext
  • sk (const SecretKey &):秘密密钥。

用法:用秘密密钥构造密钥生成器。

inline void create_public_key(PublicKey &destination) const;
  • destination (PublicKey &):用于存储计算结果的公钥。

用法:用于创建公钥的函数。

inline void create_relin_keys(RelinKeys &destination);
  • destination (RelinKeys &):用于存储计算结果的RelinKeys

用法:用于创建重线性化密钥的函数。

inline void create_galois_keys(const std::vector<int> &steps, GaloisKeys &destination);
  • steps (const std::vector &):用于创建伽罗瓦密钥的旋转步骤。
  • destination (RelinKeys &):用于存储计算结果的GaloisKeys

用法:基于给定的旋转步骤向量创建旋转密钥的函数。

inline void create_conj_keys(GaloisKeys &destination);
  • destination (RelinKeys &):用于存储计算结果的GaloisKeys

用法:用于创建共轭旋转密钥的函数。仅在 CKKS 共轭中使用。

11、加密类Encryptor

描述Encryptor是用于加密明文的类。

函数

Encryptor(const PoseidonContext &context, const SecretKey &secret_key);
  • context (const PoseidonContext &)PoseidonContext
  • secret_key (const SecretKey &):秘密密钥。

用法:使用指定的PoseidonContext和秘密密钥创建一个Encryptor实例。

Encryptor(const PoseidonContext &context, const PublicKey &public_key);
  • context (const PoseidonContext &)PoseidonContext
  • public_key (const PublicKey &):公钥。

用法:使用指定的PoseidonContext和公钥创建一个Encryptor实例。

Encryptor(const PoseidonContext &context, const PublicKey &public_key, const SecretKey &secret_key);
  • context (const PoseidonContext &)PoseidonContext
  • public_key (const PublicKey &):公钥。
  • secret_key (const SecretKey &):秘密密钥。

用法:使用指定的PoseidonContext、秘密密钥和公钥创建一个 Encryptor 实例。

void set_public_key(const PublicKey &public_key);
  • public_key (const PublicKey &):公钥。

用法:设置一个新的公钥实例。

void set_secret_key(const SecretKey &secret_key);
  • secret_key (const SecretKey &):秘密密钥。

用法:设置一个新的秘密密钥实例。

void encrypt(const Plaintext &plain, Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • plain (const Plaintext &):要加密的明文。
  • destination (Ciphertext &):用于存储加密结果的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用公钥对明文进行加密,并将结果存储在 destination 中。

void encrypt_zero(Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • destination (Ciphertext &):用于存储加密后的零明文的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用公钥对零明文进行加密,并将结果存储在 destination 中。

void encrypt_zero(parms_id_type parms_id, Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • parms_id (parms_id_type):生成的密文的参数 ID。
  • destination (Ciphertext &):用于存储加密后的零明文的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用公钥对零明文进行加密,并将结果存储在 destination 中。

void encrypt_symmetric(const Plaintext &plain, Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • plain (const Plaintext &):要加密的明文。
  • destination (Ciphertext &):用于存储加密结果的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用秘密密钥对明文进行加密,并将结果存储在 destination 中。

void encrypt_zero_symmetric(parms_id_type parms_id, Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • parms_id (parms_id_type):生成的密文的参数 ID。
  • destination (Ciphertext &):用于存储加密后的零明文的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用秘密密钥对零明文进行加密,并将结果存储在 destination 中。

void encrypt_zero_symmetric(Ciphertext &destination, MemoryPoolHandle pool = MemoryManager::GetPool()) const;
  • destination (Ciphertext &):用于存储加密后的零明文的密文。
  • pool (MemoryPoolHandle):指向有效内存池的 MemoryPoolHandle

用法:使用秘密密钥对零明文进行加密,并将结果存储在 destination 中。

12、解密类Decryptor

描述Decryptor 是用于解密密文的类。

函数

Decryptor(const PoseidonContext &context, const SecretKey &secret_key);
  • context (const PoseidonContext &)PoseidonContext
  • secret_key (const SecretKey &):秘密密钥。

用法:使用指定的 PoseidonContext 和秘密密钥创建一个 Decryptor 实例。

void decrypt(const Ciphertext &encrypted, Plaintext &destination);
  • encrypted (const Ciphertext &):要解密的密文。
  • destination (Plaintext &):用于存储解密结果的明文。

用法:对密文进行解密,并将结果存储在 destination 参数中。

13、工厂方法模式类PoseidonFactory

描述PoseidonFactory 类用于创建 Poseidon 算法库。

函数

auto create(const PoseidonContext &context) -> std::shared_ptr<Evaluator>;

用法:基于给定的 PoseidonContext 对象创建一个 Evaluator 对象的函数,可以选择采用的 FHE 算法,如 BFV、BGV、CKKS 及其对应的硬件或软件库。

static PoseidonFactory *get_instance()

用法PoseidonFactory 实现了单例模式。此函数用于获取 PoseidonFactory 的静态对象。

PoseidonContext create_poseidon_context(const ParametersLiteral &param_literal, sec_level_type sec_level = sec_level_type::none) const;

用法create_poseidon_context 用于基于给定的 param_literal 创建 PoseidonContext 类。

std::unique_ptr<EvaluatorBfvBase> create_bfv_evaluator(PoseidonContext &context) const

std::unique_ptr<EvaluatorBgvBase> create_bgv_evaluator(PoseidonContext &context) const

std::unique_ptr<EvaluatorCkksBase> create_ckks_evaluator(PoseidonContext &context) const

用法create_bfv_evaluator 用于为 BFV 方案创建评估类。create_bgv_evaluator 用于为 BGV 方案创建评估类。create_ckks_evaluator 用于为 CKKS 方案创建评估类。

DEVICE_TYPE get_device_type() const

用法:获取设备类型。在使用软件模式时返回 DEVICE_TYPE::DEVICE_SOFTWARE,在使用硬件模式时返回 DEVICE_TYPE::DEVICE_HARDWARE

void set_device_type(DEVICE_TYPE type)

用法:设置设备类型。

硬件专属操作

1、从加速卡读取密文信息:read

void read(Ciphertext &ciph);
  • ciph (Ciphertext):表示要读取的密文。

用法read 函数用于从加速卡中读取密文数据。例如,用户执行硬件评估函数后,最新的结果值仍存储在 HPU 卡中。用户需要执行 read 函数,将最新的结果值从 HPU 卡读取到 RAM 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值