# Can FHE be used for comparing 2 ciphertexts?

**URL:** <https://openfhe.discourse.group/t/can-fhe-be-used-for-comparing-2-ciphertexts/1045>\
**Category:** FHE Questions\
**Created:** [January 26, 2024, 8:25pm UTC](https://openfhe.discourse.group/t/can-fhe-be-used-for-comparing-2-ciphertexts/1045 "2024-01-26T20:25:32Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![Pavanranganath](https://avatars.discourse-cdn.com/v4/letter/p/ec9cab/32.png) [@Pavanranganath](https://openfhe.discourse.group/u/Pavanranganath)\
**Post date:** [April 17, 2024, 6:36pm UTC](https://openfhe.discourse.group/t/can-fhe-be-used-for-comparing-2-ciphertexts/1045/8 "2024-04-17T18:36:37Z")

</div>

As per your suggestion i added this code in core library so i can change the modulus from higher to lower

```auto
std::vector<std::shared_ptr<LWECiphertextImpl>> SWITCHCKKSRNS::EvalFHEWChangeModulus(
    std::vector<lbcrypto::LWECiphertext> LWEciphertexts, uint32_t fromModulus, uint32_t toModulus,uint32_t numCtxts) {
        NativeInteger native_fromModulus(fromModulus);
        NativeInteger native_toModulus(toModulus);
        uint32_t n = m_ccLWE.GetParams()->GetLWEParams()->Getn(); // lattice parameter for additive LWE
#pragma omp parallel for
    for (uint32_t i = 0; i < numCtxts; i++) {
        auto original_a = LWEciphertexts[i]->GetA();
        auto original_b = LWEciphertexts[i]->GetB();
        // multiply by Q_LWE/Q' and round to Q_LWE
        NativeVector a_round(n, toModulus);
        for (uint32_t j = 0; j < n; ++j) {
            a_round[j] = RoundqQAlter(original_a[j], native_toModulus, native_fromModulus);
        }
        NativeInteger b_round = RoundqQAlter(original_b, native_toModulus, native_fromModulus);
        LWEciphertexts[i] = std::make_shared<LWECiphertextImpl>(std::move(a_round), std::move(b_round));
    }

    return LWEciphertexts;
}

```

i added this in python wrapper

```auto
.def("EvalFHEWChangeModulus", &CryptoContextImpl<DCRTPoly>::EvalFHEWChangeModulus,
             cc_EvalCKKStoFHEW_docs,
             py::arg("LWEciphertexts"),
             py::arg("fromModulus"),
             py::arg("toModulus"),
             py::arg("numCtxts") = 0)

```

I was able to execute

```auto
    cTemp1_new = cc.EvalFHEWChangeModulus(cTemp1,cTemp1[0].GetModulus(),LWESign[0].GetModulus(),len(cTemp1))

e_a1_result = [
        ccLWE.EvalBinGate(AND, cTemp1_new[i], LWESign[i]) for i in range(len(cTemp1))
    ]

```

I am not getting any errors

But i am getting incorrect outputs.

can someone please help me with this

---

_[View the full topic](https://openfhe.discourse.group/t/can-fhe-be-used-for-comparing-2-ciphertexts/1045)._
