源地址: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 的项必须准确写为 x^1。
- 指数值为 0 的项(常数项)必须写为不带指数的十六进制数。
- 项之间必须用确切的 <空格>+<空格> 分隔,不允许使用减号。
- 除了 + 号,其他项不应有空格。
Plaintext(const Plaintext ©) = 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 的项必须准确写为 x^1。
- 指数值为 0 的项(常数项)必须写为不带指数的十六进制数。
- 项之间必须用确切的 <空格>+< 空格 > 分隔,不允许使用减号。
- 除了 + 号,其他项不应有空格。
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 (Ciphertext &&)
:要复制的密文。
用法:通过复制给定的密文创建一个新的密文。
Ciphertext(Ciphertext &&source) = default;
source (Ciphertext &&)
:要移动的密文。
用法:通过移动给定的密文创建一个新的密文。
Ciphertext(const Ciphertext ©, MemoryPoolHandle pool);
copy (const Ciphertext ©)
:要复制的密文。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)
:新的大小。
用法:将密文调整为给定大小,如果密文的容量太小则重新分配。密文参数由给定的PoseidonContext
和parms_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 ©) = 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 ©) = 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 ©) = 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 ¶ms);
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 ¶m_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 中。