@2021SC@SDUSC 源码分析: CryptoContext和pke/lib

本文深入探讨了CryptoContext在同态加密库中的关键作用,特别是其在处理MultKey(乘法密钥)生成、插入、删除等操作上的实现。通过源码分析,展示了MultKey在乘法同态评估中的重要性,并提到了其他如加法等同态运算的密钥管理。此外,还介绍了CryptoContext的解密功能和针对不同编码类型解密的处理方式。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

现在来关注一下 CryptoContext的实现

首先这是各方案都需要使用到的公共库

位于pke/lib下 

// Initialize global config variable

//序列化预运算

bool SERIALIZE_PRECOMPUTE = true;

template <typename Element>

// eval乘法时生成key

void CryptoContextImpl<Element>::EvalMultKeyGen(

    const LPPrivateKey<Element> key) {

  if (key == nullptr || Mismatched(key->GetCryptoContext()))

    PALISADE_THROW(config_error,

                   "Key passed to EvalMultKeyGen were not generated with this "

                   "crypto context");

  LPEvalKey<Element> k = GetEncryptionAlgorithm()->EvalMultKeyGen(key);

  GetAllEvalMultKeys()[k->GetKeyTag()] = {k};

}

//生成keys

template <typename Element>

void CryptoContextImpl<Element>::EvalMultKeysGen(

    const LPPrivateKey<Element> key) {

  if (key == nullptr || Mismatched(key->GetCryptoContext()))

    PALISADE_THROW(config_error,

                   "Key passed to EvalMultsKeyGen were not generated with this "

                   "crypto context");

  const vector<LPEvalKey<Element>>& evalKeys =

      GetEncryptionAlgorithm()->EvalMultKeysGen(key);

  GetAllEvalMultKeys()[evalKeys[0]->GetKeyTag()] = evalKeys;

}

template <typename Element>

const vector<LPEvalKey<Element>>&

CryptoContextImpl<Element>::GetEvalMultKeyVector(const string& keyID) {

  auto ekv = GetAllEvalMultKeys().find(keyID);

  if (ekv == GetAllEvalMultKeys().end())

    PALISADE_THROW(not_available_error,

                   "You need to use EvalMultKeyGen so that you have an "

                   "EvalMultKey available for this ID");

  return ekv->second;

}

//得到所有乘法key

template <typename Element>

std::map<string, std::vector<LPEvalKey<Element>>>&

CryptoContextImpl<Element>::GetAllEvalMultKeys() {

  return evalMultKeyMap();

}

template <typename Element>

void CryptoContextImpl<Element>::ClearEvalMultKeys() {

  GetAllEvalMultKeys().clear();

}

/**

 * ClearEvalMultKeys - flush EvalMultKey cache for a given id

 * @param id

 */

template <typename Element>

void CryptoContextImpl<Element>::ClearEvalMultKeys(const string& id) {

  auto kd = GetAllEvalMultKeys().find(id);

  if (kd != GetAllEvalMultKeys().e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值