Skip to content

Commit

Permalink
fix: Revamp mktfhe parameters (again)
Browse files Browse the repository at this point in the history
  • Loading branch information
sp301415 committed Nov 23, 2024
1 parent 181a83c commit 5f3d360
Show file tree
Hide file tree
Showing 10 changed files with 213 additions and 490 deletions.
28 changes: 14 additions & 14 deletions mktfhe/binary_evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ type BinaryEvaluator[T tfhe.TorusInt] struct {
// NewBinaryEvaluator allocates an empty BinaryEvaluator based on parameters.
// This does not copy evaluation keys, since they are large.
func NewBinaryEvaluator[T tfhe.TorusInt](params Parameters[T], evk map[int]EvaluationKey[T]) *BinaryEvaluator[T] {
signLUT := tfhe.NewLookUpTableCustom[T](params.polyDegree)
vec.Fill(signLUT.Value, 1<<(params.logQ-3))
signLUT := tfhe.NewLookUpTableCustom[T](params.PolyDegree())
vec.Fill(signLUT.Value, 1<<(params.LogQ()-3))

return &BinaryEvaluator[T]{
BinaryEncoder: tfhe.NewBinaryEncoder(params.singleKeyParameters),
Expand Down Expand Up @@ -73,7 +73,7 @@ func (e *BinaryEvaluator[T]) ANDAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = ct0.Value[i] + ct1.Value[i]
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -92,7 +92,7 @@ func (e *BinaryEvaluator[T]) ANDParallelAssign(ct0, ct1, ctOut LWECiphertext[T])
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = ct0.Value[i] + ct1.Value[i]
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -111,7 +111,7 @@ func (e *BinaryEvaluator[T]) NANDAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = -ct0.Value[i] - ct1.Value[i]
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -130,7 +130,7 @@ func (e *BinaryEvaluator[T]) NANDParallelAssign(ct0, ct1, ctOut LWECiphertext[T]
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = -ct0.Value[i] - ct1.Value[i]
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -149,7 +149,7 @@ func (e *BinaryEvaluator[T]) ORAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = ct0.Value[i] + ct1.Value[i]
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -168,7 +168,7 @@ func (e *BinaryEvaluator[T]) ORParallelAssign(ct0, ct1, ctOut LWECiphertext[T])
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = ct0.Value[i] + ct1.Value[i]
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -187,7 +187,7 @@ func (e *BinaryEvaluator[T]) NORAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = -ct0.Value[i] - ct1.Value[i]
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -206,7 +206,7 @@ func (e *BinaryEvaluator[T]) NORParallelAssign(ct0, ct1, ctOut LWECiphertext[T])
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = -ct0.Value[i] - ct1.Value[i]
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -225,7 +225,7 @@ func (e *BinaryEvaluator[T]) XORAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = 2 * (ct0.Value[i] + ct1.Value[i])
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -244,7 +244,7 @@ func (e *BinaryEvaluator[T]) XORParallelAssign(ct0, ct1, ctOut LWECiphertext[T])
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = 2 * (ct0.Value[i] + ct1.Value[i])
}
ctOut.Value[0] += 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] += 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -263,7 +263,7 @@ func (e *BinaryEvaluator[T]) XNORAssign(ct0, ct1, ctOut LWECiphertext[T]) {
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = 2 * (-ct0.Value[i] - ct1.Value[i])
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTAssign(ctOut, e.signLUT, ctOut)
}
Expand All @@ -282,7 +282,7 @@ func (e *BinaryEvaluator[T]) XNORParallelAssign(ct0, ct1, ctOut LWECiphertext[T]
for i := 0; i < e.Parameters.DefaultLWEDimension()+1; i++ {
ctOut.Value[i] = 2 * (-ct0.Value[i] - ct1.Value[i])
}
ctOut.Value[0] -= 1 << (e.Parameters.logQ - 3)
ctOut.Value[0] -= 1 << (e.Parameters.LogQ() - 3)

e.BaseEvaluator.BootstrapLUTParallelAssign(ctOut, e.signLUT, ctOut)
}
22 changes: 11 additions & 11 deletions mktfhe/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (e *Evaluator[T]) BootstrapLUT(ct LWECiphertext[T], lut tfhe.LookUpTable[T]

// BootstrapLUTAssign bootstraps LWE ciphertext with respect to given LUT and writes it to ctOut.
func (e *Evaluator[T]) BootstrapLUTAssign(ct LWECiphertext[T], lut tfhe.LookUpTable[T], ctOut LWECiphertext[T]) {
switch e.Parameters.bootstrapOrder {
switch e.Parameters.BootstrapOrder() {
case tfhe.OrderKeySwitchBlindRotate:
e.KeySwitchForBootstrapAssign(ct, e.buffer.ctKeySwitchForBootstrap)
e.BlindRotateAssign(e.buffer.ctKeySwitchForBootstrap, lut, e.buffer.ctRotate)
Expand Down Expand Up @@ -61,7 +61,7 @@ func (e *Evaluator[T]) BootstrapLUTParallel(ct LWECiphertext[T], lut tfhe.LookUp

// BootstrapLUTParallelAssign bootstraps LWE ciphertext with respect to given LUT and writes it to ctOut in parallel.
func (e *Evaluator[T]) BootstrapLUTParallelAssign(ct LWECiphertext[T], lut tfhe.LookUpTable[T], ctOut LWECiphertext[T]) {
switch e.Parameters.bootstrapOrder {
switch e.Parameters.BootstrapOrder() {
case tfhe.OrderKeySwitchBlindRotate:
e.KeySwitchForBootstrapAssign(ct, e.buffer.ctKeySwitchForBootstrap)
e.BlindRotateParallelAssign(e.buffer.ctKeySwitchForBootstrap, lut, e.buffer.ctRotate)
Expand Down Expand Up @@ -89,7 +89,7 @@ func (e *Evaluator[T]) BlindRotateAssign(ct LWECiphertext[T], lut tfhe.LookUpTab
for i, ok := range e.PartyBitMap {
if ok {
e.buffer.ctRotateInputs[i].Value[0] = 0
vec.CopyAssign(ct.Value[1+i*e.Parameters.singleLWEDimension:1+(i+1)*e.Parameters.singleLWEDimension], e.buffer.ctRotateInputs[i].Value[1:])
vec.CopyAssign(ct.Value[1+i*e.Parameters.singleKeyParameters.LWEDimension():1+(i+1)*e.Parameters.singleKeyParameters.LWEDimension()], e.buffer.ctRotateInputs[i].Value[1:])
for j := 0; j < e.Parameters.accumulatorParameters.Level(); j++ {
e.SingleKeyEvaluators[i].BlindRotateAssign(e.buffer.ctRotateInputs[i], e.buffer.gadgetLUTs[j], e.buffer.ctAccs[i])
e.SingleKeyEvaluators[i].ToFourierGLWECiphertextAssign(e.buffer.ctAccs[i], e.buffer.ctFourierAccs[i].Value[j])
Expand Down Expand Up @@ -119,7 +119,7 @@ func (e *Evaluator[T]) BlindRotateParallelAssign(ct LWECiphertext[T], lut tfhe.L
wg.Add(1)
go func(i int) {
e.buffer.ctRotateInputs[i].Value[0] = 0
vec.CopyAssign(ct.Value[1+i*e.Parameters.singleLWEDimension:1+(i+1)*e.Parameters.singleLWEDimension], e.buffer.ctRotateInputs[i].Value[1:])
vec.CopyAssign(ct.Value[1+i*e.Parameters.singleKeyParameters.LWEDimension():1+(i+1)*e.Parameters.singleKeyParameters.LWEDimension()], e.buffer.ctRotateInputs[i].Value[1:])
for j := 0; j < e.Parameters.accumulatorParameters.Level(); j++ {
e.SingleKeyEvaluators[i].BlindRotateAssign(e.buffer.ctRotateInputs[i], e.buffer.gadgetLUTs[j], e.buffer.ctAccs[i])
e.SingleKeyEvaluators[i].ToFourierGLWECiphertextAssign(e.buffer.ctAccs[i], e.buffer.ctFourierAccs[i].Value[j])
Expand All @@ -141,7 +141,7 @@ func (e *Evaluator[T]) BlindRotateParallelAssign(ct LWECiphertext[T], lut tfhe.L
// Input ciphertext should be of length GLWEDimension + 1.
// Output ciphertext will be of length LWEDimension + 1.
func (e *Evaluator[T]) KeySwitchForBootstrap(ct LWECiphertext[T]) LWECiphertext[T] {
ctOut := NewLWECiphertextCustom[T](e.Parameters.singleLWEDimension)
ctOut := NewLWECiphertextCustom[T](e.Parameters.singleKeyParameters.LWEDimension())
e.KeySwitchForBootstrapAssign(ct, ctOut)
return ctOut
}
Expand All @@ -150,18 +150,18 @@ func (e *Evaluator[T]) KeySwitchForBootstrap(ct LWECiphertext[T]) LWECiphertext[
// Input ciphertext should be of length GLWEDimension + 1.
// Output ciphertext should be of length LWEDimension + 1.
func (e *Evaluator[T]) KeySwitchForBootstrapAssign(ct, ctOut LWECiphertext[T]) {
scalarDecomposed := e.Decomposer.ScalarDecomposedBuffer(e.Parameters.keySwitchParameters)
scalarDecomposed := e.Decomposer.ScalarDecomposedBuffer(e.Parameters.KeySwitchParameters())

ctOut.Value[0] = ct.Value[0]

for i, ok := range e.PartyBitMap {
ctMask := ct.Value[1+i*e.Parameters.singleGLWEDimension : 1+(i+1)*e.Parameters.singleGLWEDimension]
ctOutMask := ctOut.Value[1+i*e.Parameters.singleLWEDimension : 1+(i+1)*e.Parameters.singleLWEDimension]
ctMask := ct.Value[1+i*e.Parameters.singleKeyParameters.GLWEDimension() : 1+(i+1)*e.Parameters.singleKeyParameters.GLWEDimension()]
ctOutMask := ctOut.Value[1+i*e.Parameters.singleKeyParameters.LWEDimension() : 1+(i+1)*e.Parameters.singleKeyParameters.LWEDimension()]
if ok {
vec.CopyAssign(ctMask, ctOutMask)
for j, jj := e.Parameters.singleLWEDimension, 0; j < e.Parameters.singleGLWEDimension; j, jj = j+1, jj+1 {
e.SingleKeyEvaluators[i].Decomposer.DecomposeScalarAssign(ctMask[j], e.Parameters.keySwitchParameters, scalarDecomposed)
for k := 0; k < e.Parameters.keySwitchParameters.Level(); k++ {
for j, jj := e.Parameters.singleKeyParameters.LWEDimension(), 0; j < e.Parameters.singleKeyParameters.GLWEDimension(); j, jj = j+1, jj+1 {
e.SingleKeyEvaluators[i].Decomposer.DecomposeScalarAssign(ctMask[j], e.Parameters.KeySwitchParameters(), scalarDecomposed)
for k := 0; k < e.Parameters.KeySwitchParameters().Level(); k++ {
vec.ScalarMulAddAssign(e.EvaluationKeys[i].KeySwitchKey.Value[jj].Value[k].Value[1:], scalarDecomposed[k], ctOutMask)
ctOut.Value[0] += scalarDecomposed[k] * e.EvaluationKeys[i].KeySwitchKey.Value[jj].Value[k].Value[0]
}
Expand Down
2 changes: 1 addition & 1 deletion mktfhe/decryptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func (d *Decryptor[T]) DecryptLWEPlaintext(ct LWECiphertext[T]) tfhe.LWEPlaintex
pt := ct.Value[0]
for i, ok := range d.PartyBitMap {
if ok {
ctMask := ct.Value[1+i*d.Parameters.SingleDefaultLWEDimension() : 1+(i+1)*d.Parameters.SingleDefaultLWEDimension()]
ctMask := ct.Value[1+i*d.Parameters.singleKeyParameters.DefaultLWEDimension() : 1+(i+1)*d.Parameters.singleKeyParameters.DefaultLWEDimension()]
pt += vec.Dot(ctMask, d.SingleKeyDecryptors[i].DefaultLWESecretKey().Value)
}
}
Expand Down
12 changes: 6 additions & 6 deletions mktfhe/evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ func NewEvaluator[T tfhe.TorusInt](params Parameters[T], evk map[int]EvaluationK
partyBitMap[i] = true
}

decomposer := tfhe.NewDecomposer[T](params.polyDegree)
decomposer.ScalarDecomposedBuffer(params.keySwitchParameters)
decomposer := tfhe.NewDecomposer[T](params.PolyDegree())
decomposer.ScalarDecomposedBuffer(params.KeySwitchParameters())
decomposer.PolyDecomposedBuffer(params.relinKeyParameters)
decomposer.PolyFourierDecomposedBuffer(params.relinKeyParameters)

Expand All @@ -103,7 +103,7 @@ func NewEvaluator[T tfhe.TorusInt](params Parameters[T], evk map[int]EvaluationK
SingleKeyEvaluators: singleEvals,

Decomposer: decomposer,
PolyEvaluator: poly.NewEvaluator[T](params.polyDegree),
PolyEvaluator: poly.NewEvaluator[T](params.PolyDegree()),

Parameters: params,

Expand All @@ -125,7 +125,7 @@ func newEvaluationBuffer[T tfhe.TorusInt](params Parameters[T]) evaluationBuffer

ctRotateInputs := make([]tfhe.LWECiphertext[T], params.partyCount)
for i := 0; i < params.partyCount; i++ {
ctRotateInputs[i] = tfhe.NewLWECiphertextCustom[T](params.singleLWEDimension)
ctRotateInputs[i] = tfhe.NewLWECiphertextCustom[T](params.singleKeyParameters.LWEDimension())
}

gadgetLUTs := make([]tfhe.LookUpTable[T], params.accumulatorParameters.Level())
Expand All @@ -145,8 +145,8 @@ func newEvaluationBuffer[T tfhe.TorusInt](params Parameters[T]) evaluationBuffer
ctProd: NewGLWECiphertext(params),
ctFourierProd: NewFourierGLWECiphertext(params),

ctProdSingle: poly.NewPoly[T](params.polyDegree),
ctFourierProdSingle: poly.NewFourierPoly(params.polyDegree),
ctProdSingle: poly.NewPoly[T](params.PolyDegree()),
ctFourierProdSingle: poly.NewFourierPoly(params.PolyDegree()),

ctRelin: ctRelin,
ctRelinTransposed: ctRelinTransposed,
Expand Down
18 changes: 9 additions & 9 deletions mktfhe/fourier_glwe_conv.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type GLWETransformer[T tfhe.TorusInt] struct {
func NewGLWETransformer[T tfhe.TorusInt](params Parameters[T]) *GLWETransformer[T] {
return &GLWETransformer[T]{
Parameters: params,
PolyEvaluator: poly.NewEvaluator[T](params.polyDegree),
PolyEvaluator: poly.NewEvaluator[T](params.PolyDegree()),
}
}

Expand All @@ -33,35 +33,35 @@ func (e *GLWETransformer[T]) ShallowCopy() *GLWETransformer[T] {

// ToFourierGLWESecretKey transforms GLWE secret key to Fourier GLWE secret key.
func (e *GLWETransformer[T]) ToFourierGLWESecretKey(sk tfhe.GLWESecretKey[T]) tfhe.FourierGLWESecretKey[T] {
skOut := tfhe.NewFourierGLWESecretKeyCustom[T](e.Parameters.GLWERank(), e.Parameters.polyDegree)
skOut := tfhe.NewFourierGLWESecretKeyCustom[T](e.Parameters.GLWERank(), e.Parameters.PolyDegree())
e.ToFourierGLWESecretKeyAssign(sk, skOut)
return skOut
}

// ToFourierGLWESecretKeyAssign transforms GLWE secret key to Fourier GLWE secret key and writes it to skOut.
func (e *GLWETransformer[T]) ToFourierGLWESecretKeyAssign(skIn tfhe.GLWESecretKey[T], skOut tfhe.FourierGLWESecretKey[T]) {
for i := 0; i < e.Parameters.SingleGLWERank(); i++ {
for i := 0; i < e.Parameters.singleKeyParameters.GLWERank(); i++ {
e.PolyEvaluator.ToFourierPolyAssign(skIn.Value[i], skOut.Value[i])
}
}

// ToGLWESecretKey transforms Fourier GLWE secret key to GLWE secret key.
func (e *GLWETransformer[T]) ToGLWESecretKey(sk tfhe.FourierGLWESecretKey[T]) tfhe.GLWESecretKey[T] {
skOut := tfhe.NewGLWESecretKeyCustom[T](e.Parameters.SingleGLWERank(), e.Parameters.polyDegree)
skOut := tfhe.NewGLWESecretKeyCustom[T](e.Parameters.singleKeyParameters.GLWERank(), e.Parameters.PolyDegree())
e.ToGLWESecretKeyAssign(sk, skOut)
return skOut
}

// ToGLWESecretKeyAssign transforms Fourier GLWE secret key to GLWE secret key and writes it to skOut.
func (e *GLWETransformer[T]) ToGLWESecretKeyAssign(skIn tfhe.FourierGLWESecretKey[T], skOut tfhe.GLWESecretKey[T]) {
for i := 0; i < e.Parameters.SingleGLWERank(); i++ {
for i := 0; i < e.Parameters.singleKeyParameters.GLWERank(); i++ {
e.PolyEvaluator.ToPolyAssign(skIn.Value[i], skOut.Value[i])
}
}

// ToFourierGLWECiphertext transforms GLWE ciphertext to Fourier GLWE ciphertext.
func (e *GLWETransformer[T]) ToFourierGLWECiphertext(ct GLWECiphertext[T]) FourierGLWECiphertext[T] {
ctOut := NewFourierGLWECiphertextCustom[T](e.Parameters.GLWERank(), e.Parameters.polyDegree)
ctOut := NewFourierGLWECiphertextCustom[T](e.Parameters.GLWERank(), e.Parameters.PolyDegree())
e.ToFourierGLWECiphertextAssign(ct, ctOut)
return ctOut
}
Expand All @@ -75,7 +75,7 @@ func (e *GLWETransformer[T]) ToFourierGLWECiphertextAssign(ctIn GLWECiphertext[T

// ToGLWECiphertext transforms Fourier GLWE ciphertext to GLWE ciphertext.
func (e *GLWETransformer[T]) ToGLWECiphertext(ct FourierGLWECiphertext[T]) GLWECiphertext[T] {
ctOut := NewGLWECiphertextCustom[T](e.Parameters.GLWERank(), e.Parameters.polyDegree)
ctOut := NewGLWECiphertextCustom[T](e.Parameters.GLWERank(), e.Parameters.PolyDegree())
e.ToGLWECiphertextAssign(ct, ctOut)
return ctOut
}
Expand All @@ -89,7 +89,7 @@ func (e *GLWETransformer[T]) ToGLWECiphertextAssign(ctIn FourierGLWECiphertext[T

// ToFourierUniEncryption transforms UniEncryption to Fourier UniEncryption.
func (e *GLWETransformer[T]) ToFourierUniEncryption(ct UniEncryption[T]) FourierUniEncryption[T] {
ctOut := NewFourierUniEncryptionCustom(e.Parameters.polyDegree, ct.GadgetParameters)
ctOut := NewFourierUniEncryptionCustom(e.Parameters.PolyDegree(), ct.GadgetParameters)
e.ToFourierUniEncryptionAssign(ct, ctOut)
return ctOut
}
Expand All @@ -107,7 +107,7 @@ func (e *GLWETransformer[T]) ToFourierUniEncryptionAssign(ctIn UniEncryption[T],

// ToUniEncryption transforms Fourier UniEncryption to UniEncryption.
func (e *GLWETransformer[T]) ToUniEncryption(ct FourierUniEncryption[T]) UniEncryption[T] {
ctOut := NewUniEncryptionCustom(e.Parameters.polyDegree, ct.GadgetParameters)
ctOut := NewUniEncryptionCustom(e.Parameters.PolyDegree(), ct.GadgetParameters)
e.ToUniEncryptionAssign(ct, ctOut)
return ctOut
}
Expand Down
12 changes: 6 additions & 6 deletions mktfhe/fourier_glwe_enc.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ func (e *Encryptor[T]) FourierUniEncrypt(messages []int, gadgetParams tfhe.Gadge

// FourierUniEncryptAssign encrypts integer messages to FourierUniEncryption and writes it to ctOut.
func (e *Encryptor[T]) FourierUniEncryptAssign(messages []int, gadgetParams tfhe.GadgetParameters[T], ctOut FourierUniEncryption[T]) {
length := num.Min(e.Parameters.polyDegree, len(messages))
length := num.Min(e.Parameters.PolyDegree(), len(messages))
for i := 0; i < length; i++ {
e.buffer.ptGLWE.Value.Coeffs[i] = T(messages[i]) % e.Parameters.messageModulus
e.buffer.ptGLWE.Value.Coeffs[i] = T(messages[i]) % e.Parameters.MessageModulus()
}
vec.Fill(e.buffer.ptGLWE.Value.Coeffs[length:], 0)

Expand Down Expand Up @@ -55,7 +55,7 @@ func (e *Encryptor[T]) FourierUniEncryptPlaintextAssign(pt tfhe.GLWEPlaintext[T]

// FourierUniDecrypt decrypts FourierUniEncryption to integer messages.
func (e *Encryptor[T]) FourierUniDecrypt(ct FourierUniEncryption[T]) []int {
messages := make([]int, e.Parameters.polyDegree)
messages := make([]int, e.Parameters.PolyDegree())
e.FourierUniDecryptAssign(ct, messages)
return messages
}
Expand All @@ -64,9 +64,9 @@ func (e *Encryptor[T]) FourierUniDecrypt(ct FourierUniEncryption[T]) []int {
func (e *Encryptor[T]) FourierUniDecryptAssign(ct FourierUniEncryption[T], messagesOut []int) {
e.FourierUniDecryptPlaintextAssign(ct, e.buffer.ptGLWE)

length := num.Min(e.Parameters.polyDegree, len(messagesOut))
length := num.Min(e.Parameters.PolyDegree(), len(messagesOut))
for i := 0; i < length; i++ {
messagesOut[i] = int(num.DivRoundBits(e.buffer.ptGLWE.Value.Coeffs[i], ct.GadgetParameters.LogLastBaseQ()) % e.Parameters.messageModulus)
messagesOut[i] = int(num.DivRoundBits(e.buffer.ptGLWE.Value.Coeffs[i], ct.GadgetParameters.LogLastBaseQ()) % e.Parameters.MessageModulus())
}
}

Expand All @@ -80,7 +80,7 @@ func (e *Encryptor[T]) FourierUniDecryptPlaintext(ct FourierUniEncryption[T]) tf
// FourierUniDecryptPlaintextAssign decrypts FourierUniEncryption to GLWE plaintext and writes it to ptOut.
func (e *Encryptor[T]) FourierUniDecryptPlaintextAssign(ct FourierUniEncryption[T], ptOut tfhe.GLWEPlaintext[T]) {
e.SingleKeyEncryptor.DecryptFourierGLevPlaintextAssign(ct.Value[1], tfhe.GLWEPlaintext[T]{Value: e.buffer.auxKey.Value[0]})
for i := 0; i < e.Parameters.polyDegree; i++ {
for i := 0; i < e.Parameters.PolyDegree(); i++ {
e.buffer.auxKey.Value[0].Coeffs[i] = num.DivRoundBits(e.buffer.auxKey.Value[0].Coeffs[i], ct.GadgetParameters.LogLastBaseQ()) & (1<<ct.GadgetParameters.LogBase() - 1)
}
e.SingleKeyEncryptor.ToFourierGLWESecretKeyAssign(e.buffer.auxKey, e.buffer.auxFourierKey)
Expand Down
Loading

0 comments on commit 5f3d360

Please sign in to comment.