From f1833f06f26d5d5bcd6772d78b6a4bcc9f13e445 Mon Sep 17 00:00:00 2001 From: "Mayeul@Zama" Date: Mon, 26 Sep 2022 14:54:49 +0200 Subject: [PATCH] feat(compiler): clarify input encryption noise variance --- .../Conversion/Utils/GlobalFHEContext.h | 2 +- .../TFHEGlobalParametrization.cpp | 2 +- compiler/lib/Support/V0ClientParameters.cpp | 16 +++++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler/include/concretelang/Conversion/Utils/GlobalFHEContext.h b/compiler/include/concretelang/Conversion/Utils/GlobalFHEContext.h index f312b830d..79a64baf8 100644 --- a/compiler/include/concretelang/Conversion/Utils/GlobalFHEContext.h +++ b/compiler/include/concretelang/Conversion/Utils/GlobalFHEContext.h @@ -66,7 +66,7 @@ struct V0Parameter { // TODO remove the shift when we have true polynomial size size_t getPolynomialSize() { return 1 << logPolynomialSize; } - size_t getNBigGlweDimension() { return glweDimension * getPolynomialSize(); } + size_t getNBigLweDimension() { return glweDimension * getPolynomialSize(); } }; struct V0FHEContext { diff --git a/compiler/lib/Conversion/TFHEGlobalParametrization/TFHEGlobalParametrization.cpp b/compiler/lib/Conversion/TFHEGlobalParametrization/TFHEGlobalParametrization.cpp index e0fde7bbc..f7a232652 100644 --- a/compiler/lib/Conversion/TFHEGlobalParametrization/TFHEGlobalParametrization.cpp +++ b/compiler/lib/Conversion/TFHEGlobalParametrization/TFHEGlobalParametrization.cpp @@ -67,7 +67,7 @@ public: TFHE::GLWECipherTextType glweInterPBSType(GLWECipherTextType &type) { auto bits = 64; - auto dimension = cryptoParameters.getNBigGlweDimension(); + auto dimension = cryptoParameters.getNBigLweDimension(); auto polynomialSize = 1; auto precision = (signed)type.getP(); auto crtDecomposition = diff --git a/compiler/lib/Support/V0ClientParameters.cpp b/compiler/lib/Support/V0ClientParameters.cpp index 728f27b07..5bd1b92b9 100644 --- a/compiler/lib/Support/V0ClientParameters.cpp +++ b/compiler/lib/Support/V0ClientParameters.cpp @@ -98,14 +98,16 @@ createClientParametersForV0(V0FHEContext fheContext, llvm::StringRef functionName, mlir::ModuleOp module) { auto v0Param = fheContext.parameter; - Variance encryptionVariance = v0Curve->getVariance( + Variance inputVariance = + v0Curve->getVariance(1, v0Param.getNBigLweDimension(), 64); + + Variance bootstrapKeyVariance = v0Curve->getVariance( v0Param.glweDimension, v0Param.getPolynomialSize(), 64); - // Variance encryptionVariance = 0.; - Variance keyswitchVariance = v0Curve->getVariance(1, v0Param.nSmall, 64); + Variance keyswitchKeyVariance = v0Curve->getVariance(1, v0Param.nSmall, 64); // Static client parameters from global parameters for v0 ClientParameters c; c.secretKeys = { - {clientlib::BIG_KEY, {/*.size = */ v0Param.getNBigGlweDimension()}}, + {clientlib::BIG_KEY, {/*.size = */ v0Param.getNBigLweDimension()}}, }; bool has_small_key = v0Param.nSmall != 0; bool has_bootstrap = v0Param.brLevel != 0; @@ -123,7 +125,7 @@ createClientParametersForV0(V0FHEContext fheContext, /*.level = */ v0Param.brLevel, /*.baseLog = */ v0Param.brLogBase, /*.glweDimension = */ v0Param.glweDimension, - /*.variance = */ encryptionVariance, + /*.variance = */ bootstrapKeyVariance, }, }, }; @@ -137,7 +139,7 @@ createClientParametersForV0(V0FHEContext fheContext, /*.outputSecretKeyID = */ clientlib::SMALL_KEY, /*.level = */ v0Param.ksLevel, /*.baseLog = */ v0Param.ksLogBase, - /*.variance = */ keyswitchVariance, + /*.variance = */ keyswitchKeyVariance, }, }, }; @@ -165,7 +167,7 @@ createClientParametersForV0(V0FHEContext fheContext, : inputs.back().isa(); auto gateFromType = [&](mlir::Type ty) { - return gateFromMLIRType(clientlib::BIG_KEY, encryptionVariance, ty); + return gateFromMLIRType(clientlib::BIG_KEY, inputVariance, ty); }; for (auto inType = funcType.getInputs().begin(); inType < funcType.getInputs().end() - hasContext; inType++) {