node-seal
Version:
Homomorphic Encryption for TypeScript or JavaScript using Microsoft SEAL
1,095 lines (742 loc) • 30.5 kB
Markdown
# List of Changes
See [Microsoft's Change
log](https://github.com/microsoft/SEAL/blob/master/CHANGES.md) 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:
- Updated to SEAL 4.1.2
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:
- Updated to SEAL 4.1.1
## 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:
- Updated to SEAL 3.7.3
## 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:
- Upgrade to seal v3.6.5
Docs:
- Update to clarify React-Native support
## Version 4.5.5
Feat:
- Upgrade to seal v3.6.4
## Version 4.5.4
Feat:
- Upgrade to seal v3.6.3
## Version 4.5.3
Feat:
- Upgrade to seal v3.6.2
## 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
- Updated to **SEAL v3.6.0** (See [Microsoft's Change
log](https://github.com/microsoft/SEAL/blob/master/CHANGES.md))
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:
- Updated to Seal v3.5.5
## Version 4.3.4
Feat:
- Updated to Seal v3.5.4
## Version 4.3.2
Fix:
- Updated to support building with the latest emsdk
Feat:
- Updated to Seal v3.5.3
## 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](https://github.com/microsoft/SEAL/blob/master/CHANGES.md)
- 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](https://github.com/microsoft/SEAL/blob/master/CHANGES.md).
- `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:
- Minor breaking change to allow for functional closure.
```javascript
import { Seal } from 'node-seal'
...
const morfix = await Seal // Deprecated
const morfix = await Seal() // Use the parenthesis
```
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:
```javascript
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](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](https://s0l0ist.github.io/node-seal/CipherText.html)
```javascript
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.
```javascript
// 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.
```javascript
// 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.
```javascript
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.
```javascript
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.
```javascript
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.
```javascript
const encodeEncrypt = pipe(encodeNoDest, encryptNoDest)
const decryptDecode = pipe(decryptNoDest, decodeSigned)
```
An equivalent way to write these functions without pipe would be:
```javascript
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.
```javascript
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.
```javascript
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:
```javascript
// 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:
- IntegerEncoder:
C++ Binding encode now uses the method which accepts a destination plaintext
as a parameter and returns void.
The respective JavaScript wrapper now returns the result of decode.
## 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:
- Updated documentation
## 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](https://github.com/madler/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](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.