Hello,
Is it always recommended to prefer einput over euintXX when passing encrypted values? If not, what are the trade-offs?
Best regards,
El-hacen
Hello,
Is it always recommended to prefer einput over euintXX when passing encrypted values? If not, what are the trade-offs?
Best regards,
El-hacen
einput and euintXX are totally different things.
euintXX
represents an encrypted integer. The key difference between an euintXX
and a uintXX
lies in the access control: euintXX
is associated with an access control list (ACL) that defines which addresses are permitted to manipulate the data, using TFHE.allow
or TFHE.allowTransient
.
Additionally, there is an input validation mechanism. When a user sends an encrypted value, we must ensure that the value is neither copy-pasted nor derived from an existing value. To achieve this, we require the user to provide a zero-knowledge proof of encryption.
Since proving multiple ciphertexts can be time-consuming, instead of supplying multiple individual ciphertexts, the user provides a single ciphertext that proves all the inputs at once. The function call would proceed as follows:
function myFunction(einput param1, einput param2, bool isCool, einput param3, bytes inputProof)
To simplify, the user has pushed all inputs in the inputProof
which is an encrypted array. einput
are basically the index of the encrypted value. So, under the hood, einput
are just uin256
containing the index of the data in the encrypted array inputProof
. That’s why, to use einput, you’ll call TFHE.asEuint32(param1, inputProof)
Hope it clarifies!