List of Changes
See Microsoft's Change
log for more details
on each SEAL version change.
Version 6.0.0
Feat:
- Added support for
FinalizationRegistry
to automatically free WebAssembly
instances. If the environment doesn't support finalizers, this simply is a
no-op.
- Previously, users had to manually reclaim memory by calling
<instance>.delete()
on every module.
- With this change, manual deletion is still respected (and remains useful in
tight loops), but a finalizer is also registered to automatically release
the underlying resources, providing a more seamless developer experience
Version 5.1.7
Chore:
- Updated all build dependencies
- Automate publishing from GHA
- Update
types
to proper interface
s
Version 5.1.6
Feat:
- Support Cloudflare Workers, thanks @xtuc!
Chore:
- Updated all build dependencies
- Compiling with EMSDK (v4.0.9)
Version 5.1.5
Chore:
- Updated all build dependencies
- Compiling with EMSDK (v4.0.6) results in a noticable speedup from the previous
build.
- Updated benchmarks and added the
Bun
runtime.
Version 5.1.4
Feat:
Chore:
- Updated all dev dependencies
- Removed mentions of morfix-io in URL links as it doesn't exist anymore
- Updated import ordering in all source files (no functional changes)
- Moved .eslintrc.js to .eslint.config.js
- Updated github workflow deps
Version 5.1.3
Chore:
- Updated new links to Github pages and republish for npm to also have the
updated links. No functional changes.
Version 5.1.2
Chore:
- Updated all dev dependencies
- Updated GHA runners to use Node v20 LTS (Iron)
Fix:
- Updated a test's return value that changed when using the latest emscripten
SDK.
Breaking:
- Removed support for the pure JS build. Most modern JS environments use the
WASM variant and this particular build was incredibly slow and did not support
memory over 2GB when invoking wasm2js
Version 5.1.1
Feat:
Version 5.1.0
Feat:
- Updated to SEAL 4.1.0
- Added new bindings for
modReduceTo
and modReduceToNext
.
addPlain
and subPlain
now take an optional memory pool parameter (defaults
to global). This is a non-breaking change.
Version 5.0.0
Feat:
- Updated to SEAL 4.0.0
- Added tests for the new
BGV
scheme type
- Added missing public getter
EncryptionParameters.paramsId
Version 4.6.4
Feat:
Version 4.6.3
Feat:
- Updated dev deps
- Changed the emsdk submodule to use the upstream repository
- Add
.Version
to node-seal
to get the npm package version at runtime
- Updated to include latest MS Seal commits
Version 4.6.2
Feat:
- Upgrade to seal v3.7.2
- Upgrade emsdk
Version 4.6.1
Feat:
- Upgrade to seal v3.7.1
- Upgrade emsdk
- Upgrade JS dev deps
Version 4.6.0
Feat:
- Upgrade to seal v3.7.0
- Upgrade emsdk
- Upgrade JS dev deps
- eslint/prettier reformat
- Added TS SealError type
Version 4.5.7
Feat:
- Upgrade to seal v3.6.6
- Upgrade emsdk
- Upgrade JS dev deps
Version 4.5.6
Feat:
Docs:
- Update to clarify React-Native support
Version 4.5.5
Feat:
Version 4.5.4
Feat:
Version 4.5.3
Feat:
Version 4.5.2
Feat:
- Upgrade to seal v3.6.1 to address zstd memory bug.
Version 4.5.1
Feat:
- Increase maximum memory for WASM to be 4gb instead of the default 2gb. This
will be beneficial to applications where the VM can handle WASM memory size
larger than 2gb such as NodeJS and Chrome.
- Docs have been updated and reflect the proper functions for the KeyGenerator
type.
Version 4.5.0
Highlights
Feat:
- Renamed all key generator functions to match the new MS API.
publicKey
-> createPublicKey
relinKeysLocal
-> createRelinKeys
galoisKeysLocal
-> createGaloisKeys
- Added
*Serializable
functions to match the new MS API overloads.
createPublicKeySerializable
createRelinKeysSerializable
createGaloisKeysSerializable
- Added the evaulator function,
encryptSerializable
, as well as two missing
functions encryptZero
, encryptZeroSerializable
.
- All enum types (scheme type, compression mode) have been made lower case. Ex:
SchemeType.BFV
-> SchemeType.bfv
- Added a new compression mode type to support zstandard
ComprModeType.zstd
which is used by default. This version can decompress previous serialized
objects (using deflate
), but all new serialized objects will use zstd
.
- Removed the
IntegerEncoder
.
Version 4.4.2
Fix:
- Consolidate type definitions for deno
Version 4.4.1
Feat:
- Add bundle suffix to builds for
umd
- New bundle for
es
for support. ex: throws_wasm_node_es
Breaking:
- Importing/Requiring syntax has changed from
import SEAL from
'node-seal/throws_wasm_node'
=> import SEAL from
'node-seal/throws_wasm_node_umd'
.
Version 4.4.0
Highlights
- Updated the entire library to TypeScript which fixed numerous inconsistencies
- Added support for more builds:
- [
allows
, throws
] each with [js
, wasm
] each with [node
, web
,
worker
] builds
- Support for WebAssembly in React Native
- More consistencies with 64-bit types using
BigInt
Feat:
- Supporting Seal v3.5.9
Context
can be created with only the EncryptionParameters
. By default, it
will set expandModulus = true
, security = tc128
.
SecretKey.save()
now uses compression (deflate
) by default
ParmsIdType.values()
returns a BigUint64Array
containing the underlying
values
PlainModulus.Batching()
returns a Modulus
type instead of the raw WASM
instance
Modulus
supports constructing with a BigInt
Modulus.setValue()
accepts a BigInt
Breaking
- Importing/Requiring syntax has changed from
import { Seal } from
'node-seal/dist/throws_transparent/node/wasm/cjs'
=> import SEAL from
'node-seal/throws_wasm_node'
. You may use any default name.
Version 4.3.10
Feat:
- Updated to Seal v3.5.8 (v3.5.7 skipped because of a bug)
- Updated emsdk to latest
Version 4.3.9
Feat:
- Added
setScale
function to allow users to manually set the scale on either
PlainTexts or CipherTexts
- Updated emsdk to lastest
Version 4.3.8
Feat:
- Updated to Seal v3.5.6
- Updated emsdk to latest
Version 4.3.7
Feat:
- Changed the deep import links to account for additional builds that do not
throw on transparent ciphertexts
Version 4.3.6
This release now supports true 64-bit numbers with the BFV scheme leveraging
BigInt. However, there is a performance penalty marshaling data to and from
(encoding/decoding) JS <-> WASM as they are not natively supported.
Feat:
- Updated to Seal v3.5.5 (hotfix)
- Modified
BatchEncoder.encode
to also accept BigInt64Array
/BigUint64Array
types
- Added a new function
BatchEncoder.decodeBigInt
for support of 64-bit values
using BigInt
Version 4.3.5
Feat:
Version 4.3.4
Feat:
Version 4.3.2
Fix:
- Updated to support building with the latest emsdk
Feat:
Version 4.3.1
Chore:
- Updated to lastest emscripten version and rebuilt.
- Added another optimization flag to the build process.
Version 4.3.0
Feat:
- Upgraded to SEAL
v3.5.1
- Removed submodule and scripts for
zlib
as this is now contained within SEAL.
- The seeded versions of Encryptor's symmetric-key encryption and KeyGenerator's
RelinKeys and GaloisKeys generation now output Serializable objects. See more
details in the MS SEAL API
Changes.
SmallModulus
has been renamed to Modulus
.
Ciphertext.coeffModCount
has been renamed to Ciphertext.coeffModulusSize
.
- Renamed KeyGenerator.[get|gen]* functions to their original C++ names. Ex:
KeyGenerator.getPublicKey()
-> KeyGenerator.publicKey()
,
KeyGenerator.genRelinKeys()
-> KeyGenerator.relinKeys()
.
- KeyGenerator now may only be instantiated with a
SecretKey
.
parametersSet
is now a function (parametersSet()
) instead of a getter
property for Context
and EncryptionParameterQualifiers
instances.
Encryptor.encryptSymmetricSerializable
outputs a Serializable
object for a
CipherText
. This new object cannot be used directly, but instead provides
50% space savings and is meant to be used when serialized over a network where
the receiver would deserialize and use it accordingly.
Version 4.2.4
Chore:
- Updated to lastest emscripten version and rebuilt.
Fix:
- Moved all builds into
dist
directory. User's need to update their import
path if using the deep import links. ex: import { Seal } from
'node-seal/dist/node/wasm' // Specifies the WASM build for NodeJS
Version 4.2.3
Feat:
- Added optional
steps
argument to galoisKeys
. You can now specify the
rotations you need to reduce the size of GaloisKeys and the time it takes to
generate them. Ex: you only need specific keys when performing sumElements
or dotProduct
.
- Added
galoisSave
function to the KeyGenerator
. Allows direct serialization
of Galois Keys leveraging the seeded compression which saves 50% of space.
This method also accepts an optional steps
array for further optimization.
- Added support for symmetric encryption using
Evaluator.encryptSymmetric
.
Version 4.2.2
Fix:
- JS build was crashing due to OOM when using higher encryption parameters. The
build now allows for memory growth.
Version 4.2.1
Feat:
- Added
dotProductPlain
which is the same as dotProduct
except with a
PlainText
for the second parameter.
Version 4.2.0
Breaking:
Feat:
- Added default export.
Added to specify a specific import for a given environment. The pure JS
variant is only useful for environments which do not support Web Assembly,
such as React Native. Where possible, use the WASM variant (included by
default) as the JS version is noticeably slower (10-60x). Ex:
import { Seal } from 'node-seal' // Auto-detects browser or nodejs, defaults to WASM build
// Manually specify a build
import { Seal } from 'node-seal/node/wasm' // Specifies the WASM build for NodeJS
import { Seal } from 'node-seal/node/js' // Specifies the JS build for NodeJS
import { Seal } from 'node-seal/web/wasm' // Specifies the WASM build for the browser
import { Seal } from 'node-seal/web/js' // Specifies the JS build for the browser
Version 4.1.5
Feat:
- Added
saveArray
and loadArray
functions to all serializable components.
These methods allow the objects to save and load from a Uint8Array containing
binary data.
Version 4.1.4
Feat:
- Increased performance roughly by 30%. Disabled seal intrinsics inside
cmake script. This was defining an optimization which was actually performing
worse when compiled to web assembly.
Version 4.1.3
Feat:
- Added default values for the security level inside
CoeffModulus.BFVDefault
.
- Removed benchmarks from npm dist to avoid bloat. To run benchmarks will
require to clone the repo.
Fix:
- Memory leak inside benchmarks
Version 4.1.2
Fix:
- Added benchmarks to npm package
Version 4.1.1
Feat:
- Added constructor overload options to both cipher and plain texts. These help
in optimization cases.
- Code coverage unit tests at 100%
Refactor:
- Complete refactor of the code structure to allow for code coverage
- Removed underutilized
Util
export for functional composition.
- Removed print methods for
Vector
as these were used for internal debugging
only.
- Renamed
context.print
to toHuman
which now returns a string instead of
printing to the console.
- Optimized code by removed unnecessary checks for exceptions.
Version 4.1.0
Breaking:
CipherText.reserve
now requires two arguments to be provided, context,
sizeCapacity
. This is because reserving memory before data is encrypted into
the cipher instance will have no effect. Due to current constructor
limitations , this is the only way to preemptively reserve memory for a
cipher.
Feat:
applyGalois
is now supported!
GaloisKeys
has two new methods: getIndex
, hasKey
.
RelinKeys
has two new methods: getIndex
, hasKey
.
SmallModulus
has a load
method which takes in a base64 string produces
from save
Fix:
cipherTransformFromNtt
was calling the wrong method when destination
parameter was not supplied.
decode
in the batch encoder is now wrapped with the WASM error handler.
PlainText.resize
now actually resizes to the specified value
Chore:
- Unit tests have been made for all objects.
Version 4.0.3
Fix:
ContextData.parms
was throwing an exception when attempting to access this
parameter.
SmallModulus.setValue
now properly sets the value by passing a string
representing a 64-bit integer.
SmallModulus
constructor now accepts a string representing a 64-bit integer
as a constructor
- Internal changes to some WASM constructors to use the 'move' constructor
overload as opposed to 'copy'.
PlainModulus.Batching
now returns a wrapped instance of SmallModulus
- You may now pass in a specific
SmallModulus
into
parms.setPlainModulus(Morfix.SmallModulus('786433'))
in addition to
generating one using PlainModulus.Batching(...)
. This string argument is
converted to a 64-bit unsigned integer for the C++ method to consume.
Feat:
- Added benchmark script in the benchmark folder. More will be
added in the near future.
Version 4.0.2
Feat:
Added copy
, clone
and move
instance methods to CipherTexts
,
PlainTexts
, and all variants of Keys
.
- Instead of assignment by reference in JS, use the new methods (this goes for
all variables and key types)
- Examples can be found in the docs. For example, the CipherText
Docs
const cipherText = Morfix.CipherText()
// ... after some data has been encrypted...
// Naïve assignment
// This newCipherText.instance will be a reference to the cipherText.instance, which may not be desirable.
// If cipherText.delete() is called, then newCipherText.instance will also be `null`.
const newCipherText = cipherText
// Ex: `clone` generates a new CipherText containing the cloned instance
// copyCipherText.instance is now an exact clone of cipherText.instance.
// If cipherText.delete() is called, it will have no effect on newCipherText.instance and vice versa.
const cloneCipherText = cipherText.clone()
// Ex: `copy` copies an existing CipherText and overwrites its own internal instance.
// copyCipherText.instance is now a copy of cipherText.instance.
// If cipherText.delete() is called, it will have no effect on newCipherText.instance and vice versa.
const copyCipherText = Morfix.CipherText()
copyCipherText.copy(cipherText)
// Ex: `move` moves an existing CipherText and overwites its own internal instance, but sets the old one to null.
// cipherText.instance has been moved to moveCipherText.instance and cipherText.instance is now null.
const moveCipherText = Morfix.CipherText()
moveCipherText.move(cipherText)
Added size
getter to CipherTexts
and PlainTexts
.
- Added new method
evaluator.dotProduct
for obtaining the dot product of two
CipherTexts
. The result contains the sum inside every slot of the vector.// pseudo code
// CipherText (cipherA) contains the following encrypted values: [1, 2, 3, 4, 0, ..., 0]
// CipherText (cipherB) contains the following encrypted values: [5, 5, 5, 5, 0, ..., 0]
const dot = evaluator.dotProduct(
cipherA,
cipherB,
relinKeys,
galoisKeys,
SchemeType.BFV
)
// dot is a CipherText containing the encrypted result of [50, 50, 50, 50, 50, ..., 50]
- Added new method
evaluator.sumElements
for obtaining the sum of all elements
in a CipherText
. The result contains the sum inside every slot of the
vector.// pseudo code
// say some CipherText (cipher) contains the following encrypted values: [1, 2, 3, 4, 0, ..., 0]
const sum = evaluator.sumElements(cipher, galoisKeys, SchemeType.BFV)
// sum is a CipherText containing the encrypted result of [10, 10, 10, 10, 10, ..., 10]
- Added wasm type checking when using private
inject
methods to help reduce
development bugs. Renamed a few dangerous methods as unsafeInject
which
don't check for type binding.
- Added overload checks to perform safe construction if the
instance
overload
is used to all objects. This catches cases of injecting the wrong instance
type. This comes at a tiny performance cost since it internally performs a
copy or in some cases a move, but ensures type safety.
Chore:
- Removed unused encode/decode functions which operated on deprecated vectors.
- Updated emsdk to latest version and rebuilt.
Version 4.0.1
Hotfix:
- Generating key instances were broken for some keys
Version 4.0.0
This library aims at being easier to use. To meet this goal, there had to be
some significant changes in the way components are used. The most notable is a
complete refactor of all components to not use object destructuring for their
arguments. This change allows for the composition of specialized functions that
are easier to understand and test - all with less code.
Ultimately, Vectors
had to die. They were an abstraction on top of the
TypedArrays in the JS world to WebAssembly, but had no significant use-case
outside. Therefore, they have been removed and are instead used internally.
Instead of processing separate encode -> encrypt
and decrypt -> decode
actions, we can compose a higher-order function which performs both
transparently using a pipe
function from our Utils
provider.
import { Seal, Utils } from 'node-seal'
const Morfix = await Seal
// Parameters
const schemeType = Morfix.SchemeType.BFV
const securityLevel = Morfix.SecurityLevel.tc128
const polyModulusDegree = 4096
const bitSizes = [36,36,37]
const bitSize = 20
...
Create curried functions. In this case we have created functions which take the
one argument and returns a function that accepts the second argument. This
converts the n-ary functions into the unary function form which allows us to use
them with pipe
much more clearly.
import { Utils } from 'node-seal'
const { pipe } = Utils
const curriedEncode =
(dest = null) =>
array =>
encoder.encode(array, dest)
const curriedEncrypt =
(dest = null) =>
plain =>
encryptor.encrypt(plain, dest)
const curriedDecrypt =
(dest = null) =>
cipher =>
decryptor.decrypt(cipher, dest)
const curriedDecode =
(sign = true) =>
plain =>
encoder.decode(plain, sign)
Create partial applications. Curried functions allow us to construct specific
functions by partially applying arguments.
const encodeNoDest = curriedEncode(null)
const encryptNoDest = curriedEncode(null)
const decryptNoDest = curriedEncode(null)
const decodeSigned = curriedEncode(true)
pipe
essentially runs the first argument and 'pipes' its returned value into
the input of the next argument and so on.
const encodeEncrypt = pipe(encodeNoDest, encryptNoDest)
const decryptDecode = pipe(decryptNoDest, decodeSigned)
An equivalent way to write these functions without pipe would be:
const encodeEncrypt = array => encryptNoDest(encodeNoDest(array))
const decryptDecode = cipher => decodeSigned(decryptNoDest(cipher))
With encodeEncrypt
, data can be immediately turned from a TypedArray to a
cipher without needing to manually encode. Similarly, decryptDecode
accepts a
cipher and returns a TypedArray containing the results.
const cipherText = encodeEncrypt(Int32Array.from([1, 2, -3]))
const result = decryptDecode(cipherText)
// Will have a length of polyModulusDegree (if BFV) _or_ polyModulusDegree / 2 (if CKKS)
// result = Int32Array([1,2,-3, 0, 0, ...])
Breaking:
- All functions which used to take an argument with an object containing named
parameters have been replaced with just their named parameters. Ex:
instance.function({ param1, param2 })
have now become
instance.function(param1, param2)
.
Vector
is now private for use inside this library. Any public use of a
Vector
will throw.
Feat:
- New utility methods are exposed for convenience to assist in functional
programing.
import { Utils } from 'node-seal'
const { Utils } = require('node-seal')
- Several internal functions have been rewritten for clarity. Should be
transparent to the user.
All evaluator methods accept an optional destination parameter. If one is
supplied, the evaluation's result well be stored there. Otherwise, a new
variable containing the result will be returned. Ex:
// With optional destination
const destinationCipher = Morfix.CipherText()
evaluator.add(cipherTextA, cipherTextB, destinationCipher)`
// Without destination
const resultCipher = evaluator.add(cipherTextA, cipherTextB)
// destinationCipher and resultCipher contain the same encrypted result
Version 3.2.4
Chore:
- Updated to latest emsdk, rebuilt
Version 3.2.3
Feat:
- Added bindings for PlainText methods
reserve
, resize
, and release
.
- Added bindings for CipherText methods
reserve
, resize
, and release
.
Fix:
- Missing binding for method
PlainText.setZero
has now been fixed
Version 3.2.2
Fix:
- Both
BatchEncoder
and CKKSEncoder
methods for decode
have been
re-written to use vectors internally to prevent possible data loss on memory
views when a C++ object gets dereferenced.
Version 3.2.1
Feat:
Encryptor.encrypt
/Decryptor.decrypt
now accept optional cipherText and
plainText parameters, respectively. If provided, the methods will modify in
place and return void. Otherwise, the methods will return a new instance of
cipherText and plainText, respectively.
Version 3.2.0
Feat:
- No more dealing with
Vector
types! All methods now accept a valid TypedArray
as a parameter or return one where applicable
Deprecated:
- In
BatchEncode
, replace encodeVectorInt32
, encodeVectorUInt32
with
BatchEncode.encode
using a TypedArray
- In
BatchEncode
, replace decodeVectorInt32
, decodeVectorUInt32
with
BatchEncode.decode
. This method returns a either an Int32Array or
Uint32Array with the results.
- In
CKKSEncode
, replace decodeVectorDouble
with CKKSEncode.decode
. This
method returns a Float64Array with the results.
- Creating a
Vector
is now obsolete, however it is still available.
CoeffModulus.Create
now accepts bitSizes
as an Int32Array in addition to
the legacy Vector type.
Version 3.1.1
Some methods now accept optional parameters and if omitted, will return an
instance for you. This change allows more compact syntax.
Feat:
BatchEncoder.encoder
returns a PlainText
if one is not specified in the
arguments.
CKKSEncoder.encoder
returns a PlainText
if one is not specified in the
arguments.
Encryptor.encrypt
returns a CipherText
if one is not specified in the
arguments.
Decryptor.decrypt
returns a PlainText
if one is not specified in the
arguments.
Version 3.1.0
Fix:
Context.getContextData({ parmsId })
now returns an instance of ContextData
Context.keyContextData
now returns an instance of ContextData
Context.firstContextData
now returns an instance of ContextData
Context.lastContextData
now returns an instance of ContextData
EncryptionParameters.plainModulus
now returns a wrapped instance of
SmallModulus
instead of the raw WASM instance.
EncryptionParameters.coeffModulus
returns an array of BigInts containing the
primes instead of an overly complex vector<SmallModulus>
which had no direct
methods to extract the internal values and was therefore useless.
Feat:
- Added
ContextData
binding which can be used for inspecting a Context
information in greater detail.
- Added
EncryptionParameterQualifiers
binding to be used for advanced
debugging.
Breaking:
SmallModulus.value
now returns a BigInt containing the value stored inside
the instance instead of a string.
Version 3.0.6
Fix:
- Added missing ParmsIdType binding which allows for
parmsId
to be passed into
all related methods correctly without throwing an unbound type exception.
- ParmsIdType has an instance method which returns an array of bigints for
read-only inspection.
Chore:
- Updated to the latest release of emsdk version (1.39.6) and rebuilt dist. This
has removed some build warnings in seal:build and introduced harmless others
during seal:make.
Version 3.0.5
Chore:
- Updated to the latest release of emsdk version (1.39.5) and rebuilt dist
Version 3.0.4
Fix:
Version 3.0.3
Fix:
- Latest bundle for npm was not built correctly. Rebuilt with exception handling
and the other changes.
Version 3.0.2
Feat:
- Added
delete
method to applicable components. This method should be called
before dereferencing a JavaScript component. This is because there is no way
to automatically call the destructors on C++ objects.
Version 3.0.1
No updates to core library functionality.
Chore:
- Removed unnecessary files from the packed distribution. Size is now ~2MB for
both Node.js and browser versions instead of ~20MB.
- Removed use of 'new' keyword for all objects.
Docs:
Version 3.0.0
Feat:
- All functions will throw nicely. Previously, if the WASM threw an exception
you had to manually invoke
Seal.Exception.getHuman()
to obtain the human
readable string. This is now done automatically.
- Slight reduction in code size due to the major refactoring.
Refactor:
- Library is now written with no
classes
- now using object composition,
making it much easier to extend in the future.
- All tests use the low level API and can now be viewed as examples.
Breaking:
- Morfix high level APIs are no longer present as they would fail upon more
complex functions and ultimately because they didn't ease the burden of
learning SEAL.
Version 2.2.2
Feat:
- Replaced the previous base64 implementation
- Saving/loading from strings is now much faster
Version 2.2.1
Feat:
- Compiled with intrinsics (wasm_simd128.h)
- Code execution should be noticeably faster (no benchmarks, yet)
Version 2.2.0
Microsoft SEAL 3.4.5
Feat:
- Supporting zlib -
deflate
is by default
enabled.
- SecretKeys will be saved with no compression for security. This can be
overridden.
Version 2.1.14
Microsoft SEAL 3.4.5
No updates to core library functionality.
Version 2.1.13
Feat:
- Upgraded emscripten to LLVM backend
- Code size is now ~10% smaller
Version 2.1.12
Refactor:
- Library initialization is now slightly faster as it is done on callback
instead of a timer checking a ready state
Chore:
- Updated emsdk toolchain to be on the latest version
- Build scripts now build a static SEAL library which is then converted to JS
- Build scripts now include an additional argument to remove
import.meta.url
from the output build from webpack
Version 2.1.11
Refactor:
- Moved all emscripten dependent code that was added to Microsoft SEAL to
bindings.cpp. This cleans up the codebase and leaves the SEAL library left
untouched for future upstream merges.
Fix:
- Encryption Parameters loading/saving methods are now instance methods instead
of static. Should not affect any users since we use an adapter class.
Version 2.1.10
Chore:
- removed unused code that we aren't supporting for now (int64, complex double,
etc)
Version 2.1.9
Refactor:
- Renamed emscripten binding method to reflect previous change for the
Exponentiate method that uses cast uint32_t
- Fixed a bug when passing in more than 2 parameters to
cipherTransformToNtt
Version 2.1.8
Refactor:
- Exponentiate method accepts an
exponent
as a uint32_t which is then cast to
a uint64_t to be compatible with the native implementation. Reasonable
exponentiations shouldn't exceede 2^32 in realistic use-cases.
Version 2.1.7
Refactor:
- Conversion from JS TypedArrays and C++ Vectors (and vice versa) are now an
order of magnitude faster
- Added
shrinkToFit
and setZero
to PlainText
- Removed unused methods for the encoders which we do not support now (Int64,
etc)
- Added
sizeCapacity
method to CipherText
Version 2.1.6
Bugfix:
delete
method to prevent memory leak when objects are created with inject
methods.
Version 2.1.5
Added an Exception class to retrieve the human readable exception string thrown
from emscripen.
Version 2.1.4
Microsoft SEAL 3.4.4
No updates to core library functionality.
Version 2.1.3
Microsoft SEAL 3.4.3
Version 2.1.2
Microsoft SEAL 3.4.2
Version 2.1.1
Microsoft SEAL 3.4.1
Version 2.1.0
Microsoft SEAL 3.4.0
Version 2.0.4
Microsoft SEAL 3.3.4
Version 2.0.3
Microsoft SEAL 3.3.3
Version 2.0.2
Microsoft SEAL 3.3.2
Version 2.0.1
Microsoft SEAL 3.3.1
Version 2.0.0
Microsoft SEAL 3.3.0
Features
This version includes a core update to version 3.3.0 of Microsoft SEAL in web
assembly.
API Changes
There is now an exposed low level API in web assembly which can be found in
src/lib/Seal.js. This can be used by more advanced users who
wish to be as close to the original library as possible without much
abstraction.