Closed bbzam closed 2 years ago
I cannot reproduce with a simple example:
const schemeType = seal.SchemeType.bfv
const securityLevel = seal.SecurityLevel.tc128
const polyModulusDegree = 4096
const bitSizes = [36, 36, 37]
const bitSize = 20
const parms = seal.EncryptionParameters(schemeType)
// Set the PolyModulusDegree
parms.setPolyModulusDegree(polyModulusDegree)
// Create a suitable set of CoeffModulus primes
parms.setCoeffModulus(
seal.CoeffModulus.Create(polyModulusDegree, Int32Array.from(bitSizes))
)
// Set the PlainModulus to a prime of bitSize 20.
parms.setPlainModulus(
seal.PlainModulus.Batching(polyModulusDegree, bitSize)
)
const context = seal.Context(
parms, // Encryption Parameters
true, // ExpandModChain
securityLevel // Enforce a security level
)
if (!context.parametersSet()) {
throw new Error(
'Could not set the parameters in the given context. Please try different encryption parameters.'
)
}
const encoder = seal.BatchEncoder(context)
const keyGenerator = seal.KeyGenerator(context)
const publicKey = keyGenerator.createPublicKey()
const secretKey = keyGenerator.secretKey()
const encryptor = seal.Encryptor(context, publicKey)
const decryptor = seal.Decryptor(context, secretKey)
const evaluator = seal.Evaluator(context)
// Create data to be encrypted
const array = Uint32Array.from([1, 2, 3, 4, 5])
// Encode the Array
// const plainText = encoder.encode(array)
// const base64 = plainText.save()
// console.log('base64', base64);
const plainText = seal.PlainText();
plainText.load(context, "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")
// Encrypt the PlainText
const cipherText = encryptor.encrypt(plainText)
// Add the CipherText to itself and store it in the destination parameter (itself)
evaluator.add(cipherText, cipherText, cipherText) // Op (A), Op (B), Op (Dest)
// Or create return a new cipher with the result (omitting destination parameter)
// const cipher2x = evaluator.add(cipherText, cipherText)
// Decrypt the CipherText
const decryptedPlainText = decryptor.decrypt(cipherText)
// Decode the PlainText
const decodedArray = encoder.decode(decryptedPlainText)
console.log('decodedArray', decodedArray)
I am able to serialize and deserialize normally. Could you post your encryption parameters? Or the serialized plaintext that you're attempting to load?
Thanks @s0l0ist. Please see below my init function (contains my encryption parameters). The plaintext is from a buffer which I read from a file:
async function encrypt(file, keyfromDB) { await init();
//encode plaintext to be encrypted let buff = fs.readFileSync("uploads/" + file); const plaintext = seal.PlainText();
const encoder = seal.BatchEncoder(context); const uint32array = new Uint32Array(buff); console.log(uint32array); plaintext = encoder.encode(uint32array); console.log("here2"); .... }
async function init() {
seal = await SEAL()
const schemeType = seal.SchemeType.bfv
const securityLevel = seal.SecurityLevel.tc128
const polyModulusDegree = 4096
const bitSizes = [36, 36, 37]
const bitSize = 20
const parms = seal.EncryptionParameters(schemeType)
// Set the PolyModulusDegree
parms.setPolyModulusDegree(polyModulusDegree)
// Create a suitable set of CoeffModulus primes
parms.setCoeffModulus(
seal.CoeffModulus.Create(polyModulusDegree, Int32Array.from(bitSizes))
)
// Set the PlainModulus to a prime of bitSize 20.
parms.setPlainModulus(
seal.PlainModulus.Batching(polyModulusDegree, bitSize)
)
context = seal.Context(
parms, // Encryption Parameters
true, // ExpandModChain
securityLevel // Enforce a security level
);
if (!context.parametersSet()) {
throw new Error(
'Could not set the parameters in the given context. Please try different encryption parameters.'
)
}
console.log("init done");
}
Ah you're creating a const
plaintext:
const plaintext = seal.PlainText();
But later, there's an attempt to write to it:
plaintext = encoder.encode(uint32array);
Instead, try passing in the plaintext
into the encode function as the second parameter which writes to the underlying WASM instance inside the const
object (and returns nothing):
encoder.encode(uint32array, plaintext);
Or more simply, just remove the line where you construct the plaintext and let the encoder.encode(uint32array) create it for you.
// const plaintext = seal.PlainText();
...
const plaintext = encoder.encode(uint32array);
Thanks @s0l0ist. Ive tried both suggestions - doing the 2nd parameter (screenshot below) and just commenting our the const plaintext line. However, my code seems not to go through, i.e. the console.log("here2") is not executed
In your screenshot, you're still assigning the return value (which is now null) to the const plaintext.
Don't assign anything if you're going to pass in the plaintext as the second parameter.
Replace line 77 with:
encoder.encode(uint32array, plaintext);
Hi @s0l0ist, tried doing that and even removed the const line but still no cigar:
Next, tried your original suggestion of doing const plaintext = encoder.encode(uint32array);
but still code doesn't go to the console.log("here2") line
Hi @s0l0ist,
I am working under @bbzam, we've tried the code for encryption and it seems to be working on smaller files but I am getting an error while trying to encrypt larger files. I attached here the screenshots I have taken while encrypting the JSON files with 1KB and 830 KB in size. I would like to ask if you have already encountered this problem and if you could kindly suggest any solution we can try.
Thanks, Krizzel
Ah, I see the problem, you're attempting to encode an array of elements (Uint32) that is larger than the encryption parameters support.
The limit for the number of items you can encode/decode is equal to the Polymodulus Degree. In your case, that is 4096
. You cannot encode more elements than that limit unless you increase the polymodulus degree to 8192 (or another power of 2). However, doing so slows down encryption and key generation tremendously.
You could split your files into 4096
element chunks and have N plaintexts to accomplish the same task.
Hi,
I have tried using both plaintext.load (commented below) and encoder.encode to construct a PlainText object that I would be using for encryption. However, it seems that the code isnt executing as when I do a console.log("here2") after said lines, it doesn't go there. Please advise... Btw, init() is used by my other function generateKey (which generates both public and privatekey) and it works fine.
Thanks, Benjie