SEAL:如何以模系数的形式读取 Relinkkeys 数据?
SEAL: How to read Relinkeys data in forms of modulo coefficients?
当 SEAL (v3.6) 中的 运行 个示例时,我可以使用支持函数
打印出 secret_key
、public_key
数据的多项式系数
ofstream sk;
sk.open(filename, ios::binary);
for (uint64_t i = 0; i < poly_modulus_degree; i++)
{
sk << secret_key.data()[i] << endl;
}
sk.close();
系数数据布局跟随模数与相同。
输出系数60位为例:
348362126124274227
287021082413421529
790977662641979136
532895062119300067
...
但是我无法理解relin_keys
的形式,如何使用其class的支持方法以多项式系数的形式打印relin_keys
数据?
感谢您的帮助。
RelinKeys
派生自 KSwitchKeys
,其中包含 vector<vector<PublicKey>>
类型的数据成员。由于PublicKey
与Ciphertext
基本相同,RelinKeys
只是Ciphertext
的二维向量。
第一维枚举了秘钥某次幂生成的再线性化秘钥。例如,默认情况下只生成密钥的二次方的重新线性化密钥,因此 第一维的大小通常为 1
。这可以通过 this method 描述的 relin_keys.key(2)
访问,其中 returns vector<PublicKey>
.
第二个维度对应于用于生成重新线性化密钥和执行重新线性化的分解方法。第二个维度的大小通常等于context.first_context_data()->parms().coeff_modulus().size()
。在这一点之后,您应该知道如何打印出每个 Ciphertext
对象。
以下代码应该有所帮助:
void print_ciphertext(const Ciphertext &ciphertext) {
// code to print coefficients of a Ciphertext object
}
RelinKeys relin_keys;
// ... generate keys ...
for (std::size_t key_power = 2; relin_keys.has_key(key_power); key_power++) {
for (auto &public_key: relin_keys.key(key_power)) {
print_ciphertext(public_key.data());
}
}
当 SEAL (v3.6) 中的 运行 个示例时,我可以使用支持函数
打印出secret_key
、public_key
数据的多项式系数
ofstream sk;
sk.open(filename, ios::binary);
for (uint64_t i = 0; i < poly_modulus_degree; i++)
{
sk << secret_key.data()[i] << endl;
}
sk.close();
系数数据布局跟随模数与
输出系数60位为例:
348362126124274227
287021082413421529
790977662641979136
532895062119300067
...
但是我无法理解relin_keys
的形式,如何使用其class的支持方法以多项式系数的形式打印relin_keys
数据?
感谢您的帮助。
RelinKeys
派生自 KSwitchKeys
,其中包含 vector<vector<PublicKey>>
类型的数据成员。由于PublicKey
与Ciphertext
基本相同,RelinKeys
只是Ciphertext
的二维向量。
第一维枚举了秘钥某次幂生成的再线性化秘钥。例如,默认情况下只生成密钥的二次方的重新线性化密钥,因此 第一维的大小通常为 1
。这可以通过 this method 描述的 relin_keys.key(2)
访问,其中 returns vector<PublicKey>
.
第二个维度对应于用于生成重新线性化密钥和执行重新线性化的分解方法。第二个维度的大小通常等于context.first_context_data()->parms().coeff_modulus().size()
。在这一点之后,您应该知道如何打印出每个 Ciphertext
对象。
以下代码应该有所帮助:
void print_ciphertext(const Ciphertext &ciphertext) {
// code to print coefficients of a Ciphertext object
}
RelinKeys relin_keys;
// ... generate keys ...
for (std::size_t key_power = 2; relin_keys.has_key(key_power); key_power++) {
for (auto &public_key: relin_keys.key(key_power)) {
print_ciphertext(public_key.data());
}
}