Themis ChangeLog
Unreleased
Changes that are currently in development and have not been released yet.
0.15.2, November 24 2023
JsThemis wrapper
- Added the ability to use the
import
syntax for the jsthemis module.
- Added a declaration file for TypeScript.
Android, ReactNative wrappers
Updated versions of dependencies. New minimum versions of iOS, Android are set.
- Target API level 33
- Minimum API level 21
- Minumum iOS set to 12.4 due to ReactNative requirements
0.15.1, September 13 2023
Swift, Objective-C wrappers
- Updated OpenSSL to 1.1.1v
- Removed support of 32-bit platforms
- Minimum iOS: 11, macOS: 10.13, Catalyst: 14
0.15.0, June 21st 2023
TL;DR:
- Uncompressed EC public keys are now supported.
- Increased PBKDF2 iteration count from 200000 to 314110 for Secure Cell passphrase mode.
- OpenSSL 3.0 is now supported.
- Pythemis now uses
pyproject.toml
.
- And as usual: enhanced security measures and fixed bugs.
Breaking changes and deprecations:
- AndroidThemis build requires Gradle 7.3, Android SDK 11, Android NDK 25.
- Some Soter functions are deprecated.
- Node.js 8 is no longer supported.
- Rust
SecureSessionTransport
implementations are now Send
.
- Rust 1.58 is now the minimum supported version.
Code:
Core
Android
- AndroidThemis build from source now requires Gradle 7.3, Android SDK 11, Android NDK 25 (#942).
Node.js
- Node.js v8 is no longer supported (#901).
- Fixed bug that leads to segfauls if key pair generation fails (#999)
Python
pythemis.scomparator
and pythemis.skeygen
are now imported with from pythemis import *
(#914).
- Pythemis supports
pyproject.toml
as a main way of building packages. The old setup.py
is preserved for backwards compatibility (#1006).
Ruby
- Improved compatibility with non-standard installations on Apple M1 (#917).
Rust
SecureSessionTransport
implementations are now required to be Send
(#898).
This is technically a breaking change, but most reasonble implementations should be Send
already. Please raise an issue if your code fails to build.
Minimum supported Rust version is now 1.58 (#977, #984).
- Bindgen is pinned to 0.66.1 on CI (#1008).
WebAssembly
- Node.js v8 is no longer supported (#901).
React Native Themis
PyThemis
- Improved compatibility with non-Homebrew Python installations on Apple M1 (#915).
0.14.9, Sep 12th 2022
Hotfix for macOS Themis installed via SPM
- Fixing the code signing issue for macOS Themis installation via SPM (#944).
0.14.8, Aug 22th 2022
WASM Themis
- Rebuild wasm-themis with optimization flag to make package smaller again.
(938).
0.14.7, Aug 12th 2022
React Native Themis
Upgrade packages versions for security reasons in React Native Themis package.json
(934).
Resolve the issue in React Native Themis to support Javascript exceptions
(930)
- Define additional checks to generate Javascript exceptions in case of empty required parameters.
WASM Themis
Fix the bug with encryption of large files
(933).
- Added option to build WASM file.
0.14.6, May 24th 2022
Reduce WasmThemis binary size x3, by increasing the compiler optimization level for WasmThemis build (919).
0.14.5, April 14th 2022
Typescript compatibility issues in WasmThemis
- Improved SecureCell Seal in WasmThemis. Added optional context parameters to SecureCell Seal mode instead of using arguments in methods
encrypt()
and decrypt()
to make compilers happy (#909).
0.14.4, March 15th 2022 / April 05th 2022
React Native Support
0.14.0, December 24th 2021
TL;DR:
- JavaThemis for Android has moved to Maven Central (read more).
- JavaThemis for Java is available on Maven Central (read more).
- Themis is now available via Swift Package Manager (read more)
- Themis for iOS and macOS is also available as XCFramework, attached to the release.
- TypeScript definitions and ES6 module are now available for WasmThemis (read more).
- Node.js v16 is now supported.
- Overhaul of documentation once again.
- New Themis Core packages with BoringSSL –
libthemis-boringssl
.
- OpenSSL 3.0 support is work-in-progress, but not ready yet (read more).
- And as usual: more security hardening, fewer known bugs.
Breaking changes and deprecations:
- Themis Core: private C header files are no longer installed.
- GoThemis:
ErrOverflow
is now deprecated.
- Rust:
themis
now requires Rust 1.47 or newer.
- Rust:
libthemis-src
is no longer supported.
- Installing Themis via Carthage now requires Carthage 0.38 or newer (read more).
- Deprecated CocoaPods subspecs
themis/themis-openssl
and themis/themis-boringssl
have been removed (read more)
- Themis Server (Themis Interactive Simulator) is no longer supported (read more.
Code:
Core
- Include embedded BoringSSL into Soter for convenience (#681, #702).
make deb
and make rpm
with ENGINE=boringssl
will now produce libthemis-boringssl
packages with embedded BoringSSL (#683, #686).
secure_session_create()
now allows only EC keys, returning an error for RSA (#693).
- Cleaned up unused private API. Thanks to @luismerino for pointing this out (#714).
Cleaned up public header files and API of Themis and Soter (#759).
Private header files are no longer installed. Private APIs which have been unintentially exported are no longer available. This might be a breaking change for those who have used them. Please refrain from using private API and include only public API:
Users of official high-level wrappers are not affected. However, this might affect developers of third-party wrappers. Refer to the detailed description below for a list of removed headers.
The following Soter headers are no longer available:
<soter/soter_container.h>
<soter/soter_crc32.h>
<soter/soter_ec_key.h>
<soter/soter_portable_endian.h>
<soter/soter_rsa_key.h>
<soter/soter_sign_ecdsa.h>
<soter/soter_sign_rsa.h>
<soter/soter_t.h>
All APIs previously exported by them are no longer available as well.
The following Themis headers are no longer available:
<themis/secure_cell_alg.h>
<themis/secure_cell_seal_passphrase.h>
<themis/secure_comparator_t.h>
<themis/secure_message_wrapper.h>
<themis/secure_session_peer.h>
<themis/secure_session_t.h>
<themis/secure_session_utils.h>
<themis/sym_enc_message.h>
<themis/themis_portable_endian.h>
All APIs previously exported by them are no longer available as well.
In addition to that, the following private symbols and definitions previously exported by <themis/secure_session.h>
have been hidden:
THEMIS_SESSION_ID_TAG
THEMIS_SESSION_PROTO_TAG
SESSION_MASTER_KEY_LENGTH
SESSION_MESSAGE_KEY_LENGTH
struct secure_session_peer_type
typedef secure_session_peer_t
typedef secure_session_handler
secure_session_peer_init()
secure_session_peer_cleanup()
Fixed multiple buffer overflows in Secure Message (#763).
- Fixed cross-compilation on macOS by setting
ARCH
and SDK
variables (#849).
- Updated embedded BoringSSL to the latest version (#812).
- Builds with OpenSSL 3.0 will result in a compilation error for the time being (#872).
- Hardened EC/RSA key generation and handling in Secure Message and Secure Session (#875, #876)
Android
- Example project moved to the main repository –
docs/examples/android
(#813).
- Example project is now written in Kotlin (#813).
- Updated embedded BoringSSL to the latest version (#812).
C++
themispp::secure_message_t::sign()
output is a bit smaller now (#775).
Go
- Error
ErrOverflow
is now deprecated in favor of ErrOutOfMemory
, new error types were added (#711).
SecureMessage.Sign()
output is a bit smaller now (#775).
Java / Kotlin
Objective-C
- Updated Objective-C examples (iOS and macOS, Carthage and CocoaPods) to showcase usage of the newest Secure Cell API: generating symmetric keys and using Secure Cell with Passphrase (#688) and to use latest Themis 0.13.4 (#701, #703, #706, #723, #724, #726, #740).
TSSession
initializer now returns an error (nil
) when given incorrect key type (#710).
- Improved compatibility with Xcode 12 (#742).
- Updated CocoaPods examples to the latest Themis version 0.13.10 (#834).
- Removed deprecated CocoaPods subspecs:
themis/themis-openssl
and themis/themis-boringssl
(#884, #885).
PHP
libphpthemis
packages for Debian/Ubuntu now have accurate dependencies (#683).
- PHP Composer 2.0 is now supported by PHPThemis unit tests (#730).
Node.js
SecureSession
constructor now throws an exception when given incorrect key type (#698).
- Node.js v16 is now supported (#801).
Python
SSession
constructor now throws an exception when given incorrect key type (#710).
Ruby
Ssession
constructor now throws an exception when given incorrect key type (#710).
Rust
- Dropped
libthemis-src
crate support and removed the vendored
feature. RustThemis wrapper now requires Themis Core to be installed in the system (#691).
- Updated
zeroize
depedency to 1.x version. Rust 1.47 or newer is now required (#799).
Swift
- Updated Swift examples (iOS and macOS, Carthage and CocoaPods) to showcase usage of the newest Secure Cell API: generating symmetric keys and using Secure Cell with Passphrase (#688) and to use latest Themis 0.13.4 (#701, #703, #706, #740).
TSSession
initializer now returns an error (nil
) when given incorrect key type (#710).
- Improved compatibility with Xcode 12 (#742).
- Updated CocoaPods examples to the latest Themis version 0.13.10 (#834).
- Removed deprecated CocoaPods subspecs:
themis/themis-openssl
and themis/themis-boringssl
(#884, #885).
WebAssembly
Infrastructure:
- Improved package split making
libthemis
thinner (#678).
- Optimized dependencies of
libthemis
DEB and RPM packages (#682, #686).
make deb
and make rpm
with ENGINE=boringssl
will now produce libthemis-boringssl
packages with embedded BoringSSL (#683, #686).
- Build system and tests now respect the
PATH
settings (#685).
- Rename embedded BoringSSL symbols by default to avoid conflicts with system OpenSSL (#702).
- Started phasing out CircleCI in favour of GitHub Actions (#709, #755).
- Themis is now fuzzed with
afl++
(#766).
- Secure Message is now covered with fuzz testing (#762).
- JavaThemis for Android and desktop Java is now published in the Maven Central repository (#786, #788).
- MSYS2 builds for Windows are now checked by CI (#791).
- Added automated tests for Android example project (#813).
- Added automated tests for desktop Java example project (#816).
- Embedded BoringSSL now builds faster if Ninja is available (#837).
- Embedded BoringSSL can now be cross-compiled on macOS by setting
ARCH
and SDK
variables (#849).
- Builds on macOS use OpenSSL 1.1 from Homebrew by default (#871).
- Builds with OpenSSL 3.0 are currently not supported (#872).
0.13.12, July 26th 2021
Hotfix for Apple arm64 simulators for M1
- Fixed issue 864: Themis XCFramework now includes arm64 slice for simulators (865).
Code:
- Fixed
Themis.xcodeproj
build settings: removed arm64 from exluded architectures (865).
0.13.11, July 6th 2021
Hotfix for WasmThemis:
- Fixed issue when bundling WasmThemis with webpack (#779).
Code:
WebAssembly
- Fixed issue with
TypeError: TextEncoder is not a constructor
when bundling WasmThemis with webpack (#779).
0.13.10, May 26th 2021
Deprecation Notice for CocoaPods users:
themis/themis-openssl
subspec based on GRKOpenSSLFramework is deprecated and will be removed in Themis version 0.14.
themis/themis-boringssl
subspec based on BoringSSL is deprecated and will be removed in Themis version 0.14.
Please, switch to the default option in your Podfile: pod 'themis'
Hotfix for Apple platforms:
themis
for CocoaPods now uses XCFrameworks, supports Apple Silicon, and OpenSSL 1.1.1k (#828).
- Updated Carthage examples to use Themis XCFramework (#823).
Code:
Objective-C / Swift
themis
for CocoaPods now uses XCFrameworks, supports Apple Silicon, and OpenSSL 1.1.1k (#828).
0.13.9, May 14th 2021
Hotfix for Apple platforms:
Code:
Objective-C / Swift
themis
for Carthage now pulls OpenSSL dependency as XCFramework, and Carthage builds themis
as XCFramework as well. Themis.xcodeproj
now uses openssl.xcframwork
and themis.xcframework
. Carthage dependencies should be built with --use-xcframeworks
flag (#817).
- Updated OpenSSL to the latest 1.1.1k for Carthage (#817).
- Tests (Github Actions) are updated to use the latest Carthage version (0.38.0 and up) and
--use-xcframeworks
flag (#817).
0.13.8, April 30th 2021
Hotfix for Apple platforms:
- Updated OpenSSL to the latest 1.1.1k for SPM and attached
themis.xcframework
(iOS and macOS) (#808).
- New Swift and Objective-C example projects: SPM for iOS and macOS (#808).
Code:
Objective-C / Swift
- Updated OpenSSL to the latest 1.1.1k for SPM and attached
themis.xcframework
. It is openssl-apple
version 1.1.11101 (#808).
- New Swift and Objective-C example projects: SPM for iOS and macOS (#808).
- Updated SPM examples source code to remove deprecated calls (#808).
0.13.7, April 28th 2021
Hotfix for Apple platforms:
themis
is now packaged as XCFramework (#789). It is available in the release attached files section.
themis
now supports SPM (#789), its installation and usage are very straightforward, just add themis
as SPM dependency.
Code:
Objective-C / Swift
- Added script to generate XCFramework for iOS, iOS Simulator and macOS (#789).
- Added Package.swift file for SPM (#789).
0.13.6, November 23rd 2020
Hotfix for Apple platforms:
themis
pod is now restored to use dynamic linkage again
- Resolved errors related to
@rpath
when using CocoaPods
- Removed
arm64e
architecture slice from Carthage builds for iOS which prevented CocoaPods from functioning correctly
Code:
Objective-C / Swift
- CocoaPods will now again link ObjCThemis dynamically into application (#750).
- Carthage no longer builds
arm64e
architecture slice (#750).
- Updated OpenSSL to the latest 1.1.1h-2 (#750).
0.13.5, November 12th 2020
Hotfix for Apple platforms:
- Resolved issues with deploying macOS apps with Apple Silicon support when Themis is installed via Carthage
Code:
Objective-C / Swift
- Fixed code signing issues on macOS with Xcode 12 (#744).
0.13.4, October 29th 2020
Hotfix for Apple platforms:
- Improved Apple Silicon support (arm64 builds for macOS with Xcode 12.2 beta)
- Resolved issues with stable Xcode 12 support (disabled arm64 builds for iOS Simulator)
- Updated OpenSSL to the latest 1.1.1h
- CocoaPods is now using OpenSSL 1.1.1h by default (again)
- CocoaPods and Carthage now both produce full-static builds of Themis, resolving critical issues with App Store deployment (see #715)
Code:
Objective-C / Swift
- Switched to test on Xcode 12.0, disable ARM64 builds for Themis CocoaPods and Themis Carthage (#721, #722, #732, #733).
- CocoaPods will now link ObjCThemis statically into application (#731, #735).
- Updated OpenSSL to the latest 1.1.1h (#735).
0.13.3, October 12th 2020
Hotfix for Themis CocoaPods and Xcode12:
- Default Themis podspec is using OpenSSL 1.0.2u again ("themis/themis-openssl"). OpenSSL 1.1.1g podspec ("themis/openssl") might be broken for Xcode12, fixing is in progress. BoringSSL podspec ("themis/themis-boringssl") is available too.
Code:
Objective-C / Swift
- Themis CocoaPods podspec is updated with bitcode fixes and disabling arm64 simulator in order to support Xcode12 builds. This is a podspec change only, no changes in code, headers or whatsoever. Default podspec is set as "themis/themis-openssl", which uses OpenSSL 1.0.2u. Fixes for "themis/openssl" podspec (OpenSSL 1.1.1g) might arrive soon.
0.13.2, August 14th 2020
Breaking changes and deprecations:
- ObjCThemis framework built by Carthage is now called
themis.framework
once again (read more).
Code:
Objective-C
Breaking changes
ObjCThemis framework built by Carthage is now called themis.framework
once again (#704).
ObjCThemis 0.13.0 has initiated renaming of the framework produced by Carthage into objcthemis.framework
from its historical name themis.framework
. This decision has been a mistake. More information is available in the pull request linked above.
objcthemis.framework
is removed and should not be used.
Please continue linking your applications to themis.framework
. Note as well that starting with ObjCThemis 0.13.1, you do not have to embed openssl.framework
anymore when ObjCThemis is installed via Carthage.
0.13.1, August 13th 2020
TL;DR:
- AndroidThemis is now available on JCenter
- ObjCThemis and SwiftThemis get latest OpenSSL update
- ObjCThemis and SwiftThemis now require Xcode 11 (or later)
- Minor security fixes in GoThemis, JsThemis, WasmThemis
Code:
Core
- Improved compatibility with OpenSSL 1.1.1 (#684).
Android
- AndroidThemis is now available on JCenter (#679).
Go
- Fixed panics on 32-bit systems when processing corrupted data (#677).
- Improved GoThemis package README and documentation (#699).
Node.js
- Minor dependency updates making the world a better place (#680).
WebAssembly
- Minor dependency updates making the world a better place (#680).
Swift
- Updated OpenSSL to the latest 1.1.1g (#692).
Objective-C
- Updated OpenSSL to the latest 1.1.1g (#692).
Infrastructure:
- AndroidThemis is now available on JCenter (#679).
- ObjCThemis and SwiftThemis now require Xcode 11 (#692).
0.13.0, July 8th 2020
TL;DR:
Breaking changes and deprecations:
- Many languages received Secure Cell API overhaul with parts of the old API becoming deprecated. Refer to individual language sections for details.
- ObjCThemis installed via Carthage is now called
objcthemis
instead of just themis
(read more).
- Themis 0.9.6 compatibility is now disabled by default (read more).
- Themis is known to be broken on big-endian architectures (read more).
- Java 7 is no longer supported, breaking Android and Java builds on outdated systems (read more).
- Python 2 is no longer supported (read more).
- Serialisation of Secure Session state in JavaThemis is now deprecated
(read more).
Code:
Docs:
- New improved design and structure of Themis documentation.
- Updated templates for GitHub issues and pull requests
(#549).
- Miscellaneous quality improvements in various pieces of documentation
(#558,
#575,
#581,
#587,
#590).
- Clarified information on data privacy regulations
(#593).
- Removed last surviving links to deprecated GitHub Wiki
(#589).
Infrastructure:
- Changed name of the tarball produced by
make dist
to themis_X.Y.Z.tar.gz
(#544).
- Fixed Doxygen support
(#559).
- Automated benchmarking harness is now tracking Themis performance.
See
benches
(#580,
#582).
- Automated regular fuzzing of the code with AFL
(#579,
#583).
- Added automated tests for all code samples in documentation, ensuring they are always up-to-date (#600).
- All 13 supported platforms are verified on GitHub Actions, along with existing CircleCI and Bitrise tests (#600).
- New Makefile targets:
make jsthemis
builds JsThemis from source (#618).
- Resolved issues with library search paths on CentOS
when Themis Core is built from source and installed with
make install
(#645.
- Resolved issues with library search paths on Debian
when Themis Core is installed from packages
(#651).
- Introduced
./configure
script to significantly improve rebuild performance
(#611,
#628).
- Improved package installation testing and platform coverage
(#595,
#650).
Miscellaneous minor improvements and updates in the build system
(#542,
#573,
#615,
#617,
#629,
#627,
#632,
#644,
#646,
#649,
#656).
New supported platforms
- CentOS 8 is now fully fully supported.
- Ubuntu 20.04 “Focal Fossa” is now fully fully supported.
- GoThemis is now tested with Go 1.14
(#595).
- SwiftThemis is now tested with Swift 5
(#605).
- Kotlin API of JavaThemis is now verified by all CI platforms
(#637).
- iPadOS is now officially supported target for ObjCThemis
(#641).
- Node.js v14 is now supported for JsThemis and WasmThemis
(#654).
Breaking changes
Java 7 is no longer supported
(#633).
Updates in Gradle build infrastructure require Java 8.
Debian 8 “Jessie” is no longer supported
(#633).
This version is no longer maintained by the Debian team and it lacks Java 8.
We no longer provide binary packages for this distribution.
Python 2 is no longer supported
(#648).
Python 2 had finally reached EOL on 2020-01-01.
PyThemis 0.13 is the last version guaranteed to be compatible with Python 2.
0.12.0, September 27th 2019
TL;DR:
- Added WasmThemis to support WebAssembly (works with Electron and Node.js);
- added experimental support for Windows (using MSYS2 compiler and NSIS installer);
- added support of Go Modules;
- added package for ThemisPP;
- added support for Node.js v12 LTS (in addition to v10 and v8) in jsThemis;
- added extra safety checks and fixes for tricky bugs.
Breaking changes:
- Linux: when building from sources, the default installation path of Themis Core library has been changed from
/usr
to /usr/local
. If you’re affected, read the instructions on how to make a clean upgrade below.
- Go: some of GoThemis APIs have been renamed to comply with Go naming convention (old API are marked as deprecated and will be removed in the next release). If you’re using Go – please switch to new functions.
- Ruby: deprecated
rubythemis
gem has been completely removed in favour of rbthemis
.
Code:
Core
Soter (low-level security core used by Themis)
Improved security and code quality, implemented better handling of secrets and memory management. These changes decrease the chance of potential memory leaks.
Introduced new internal function: soter_wipe()
.
It can be used to securely wipe sensitive data from memory after it's no longer needed.
All Themis cryptosystems now use this new API (#488).
Improved usage and error handling of OpenSSL/BoringSSL PRNGs.
Thank you, @veorq for bringing up this issue (#485).
Improved memory safety and fixed potential corner-case issues in OpenSSL/BoringSSL usage.
Thanks, @outspace for identifying these issues (#501, #524, #525, #535).
Key generation
Improved key validity checks across all Themis cryptosystems. Now it’s harder to use wrong keys or misuse them (#486).
Improved error handling for EC key generator that could produce an invalid public key without returning an error.
Thanks, @vixentael for finding this issue (#500).
Secure Cell
Improved handling of edge cases with large data buffers (#496, #497).
Improved performance of Secure Cell's encryption/decryption (#496).
Library ABI
Themis shared libraries now have a formal ABI version.
This ensures that no compatibility issues arise if we ever need to introduce breaking changes in the ABI (#454).
Removed private symbols from public export lists.
Themis has been accidentally exporting various private utility functions.
Private functions not intended for public use are now hidden (#458, #472).
Installation & packaging
Themis now installs to /usr/local
by default when building from source on Linux (#448).
This may be a breaking change if your system has non-standard precedence rules.
If you install Themis from source code directly, please do a clean upgrade the following way:
make uninstall PREFIX=/usr
make install PREFIX=/usr/local
Please consider using binary repositories to install Themis.
If your system or package manager is not supported yet, please let us know via dev@cossacklabs.com.
Themis packages now support multiarch installations (#512).
Multiarch enables parallel installation of 32-bit and 64-bit versions of the library.
This is particularly important on CentOS where some tools like pkg-config would fail to locate Themis due to non-standard installation path.
Updated Makefile to support a number of standard GNU variables like libdir
(#453, #455).
Improved accuracy of package dependencies to make sure you don't have to install anything manually after installing Themis from package repositories (#446).
NSIS installer is now available for Windows. To build NSIS installer, use make nsis_installer
command in MSYS2 environment.
You can read more about MSYS2 target here (#474).
Dependency updates
Embedded BoringSSL submodule has been updated to the latest upstream version (#528).
Only the necessary parts of embedded BoringSSL are now built, leading to 2x build speedup (#447).
Other changes
Miscellaneous improvements and cleanups in the Makefile (#450, #451, #452, #459, #523, #527).
Core libraries are now linked dynamically to test binaries (#460).
Android
Embedded BoringSSL submodule has been updated to the latest upstream version (#528).
Only the necessary parts of embedded BoringSSL are now built, leading to 2x build speedup (#447).
C++
Go
iOS, macOS
Example code and projects for Objective-C and Swift are now up-to-date, cleaned up, and modernised (#463, #467)
OpenSSL version is pinned to 1.0.2.17 for Carthage package and to 1.0.2.18 to CocoaPods package as a workaround for a compilation issue with the latest versions (#539, #484).
Java
- JNI wrapper for desktop Java does not require a separate installation of Themis Core from now on (#450).
Node.js
JsThemis now supports latest Node.js v12 LTS (in addition to v10 and v8) (#499,
#502).
JsThemis can now be used on Windows provided that Themis Core is installed to C:\Program Files\Themis
(#475).
Improved error reporting when keys are misused with Secure Message objects (#465).
PHP
- Updated PHP installer to use the latest Composer version (#519).
Ruby
Breaking changes
rubythemis
gem has been completely removed after being deprecated in Themis 0.11.
Please use require 'rbthemis'
in your projects (#508).
Rust
- Minor internal code style modernizations (#466).
WebAssembly
WasmThemis brings Themis to Web using WebAssembly.
Thank you to @ilammy for adding it.
WasmThemis supports the full functionality of other Themis wrappers:
Secure Cell, Secure Message, Secure Session, and Secure Comparator.
WasmThemis package is available via npm as wasm-themis
,
sample code can be found in docs/examples/js,
and the HowTo guide is available on the documentation server (#457, #461, #462, #473, #482, #489, #490, #491, #492,#494, #495, #498, #507, #513).
WasmThemis is tested with current Node.js LTS versions, popular Web browsers, and Electron framework.
It is also tested for compatibility with other Themis wrappers (#509, #510, #511).
Windows
It is now possible to compile Themis Core for Windows using MSYS2 environment.
See the instructions here (#469).
NSIS installer is now provided for the distribution of Themis on Windows.
It's compatible with the new MSYS2 builds (#474).
It is now possible to compile JsThemis on Windows, given that Themis Core is installed (#475).
Miscellaneous compatibility fixes should make it possible to compile Themis Core with Microsoft Visual Studio.
This platform does not have full official support yet, though (#470, #471).
Docs:
Infrastructure:
New Makefile targets and use cases:
emmake make all
builds WasmThemis in Emscripten environment (#475);
make all
can be run in MSYS2 environment on Windows now (#469);
make nsis_installer
builds NSIS installer for Windows binaries (#474);
make deb
and make rpm
now build ThemisPP packages, too (#506);
NO_NIST_STS
environment variable can be used to disable the long-running NIST statistical test suite when doing make test
(#456).
Removed Makefile targets:
- Deprecated
rubythemis
targets have been completely removed.
Use make rbthemis_install
to install RubyThemis instead (#508).
Multiple updates in the way Themis is installed and packaged.
The most significant are switch to /usr/local
for installation from source code and added support for multiarch installation packages (Read more).
JsThemis and WasmThemis are now tested on all current LTS versions of Node.js (#502,
#510).
Integration tests are getting stronger with WebAssembly platform being added to the suite (#511).
CI servers are now using the latest RVM for testing RubyThemis (#503, #504).
0.11.1, April 1st 2019
TL;DR: Rust-Themis can now be installed entirely from packages (repositories and crates.io), without building anything from source.
Code:
Infrastructure:
- Minor fixes in the packaging process (#442).
0.11.0, March 28th 2019
TL;DR: Added Rust Themis, added Carthage distribution for iOS and Maven distribution for Android. Improved Secure Message API and propagated it to all our language wrappers.
We found that Themis is now recommended by OWASP as data encryption library for mobile platforms.
Breaking changes: We renamed rubythemis
to rbthemis
as a beginning of a tradition of gentle deprecations, with timely warning of all the users that can potentially be affected. We removed themis_version()
function that allowed checking Themis' version at run-time (with no replacement function).
Code:
Docs:
Described the new Secure Message API: how we divided the wrap
function into encrypt
and sign
, and the unwrap
function — into decrypt
and verify
to make it more obvious for the users.
Described thread safety code practices when using Secure Session.
Improved installation guides for numerous languages.
Infrastructure:
Added Homebrew support for Themis Core. Now users can install Themis Core libraby using brew tap cossacklabs/tap && brew update && brew install libthemis
. This is useful when you're developing on macOS. More details can be found in the Installation guide.
Added installation guide on using Docker container as a building environment for Themis: if you can't download Themis Core from packages, feel free to use Docker container for this.
0.10.0, February 6th 2018
TL;DR: Multi-platform, multi-language compatibility improved.
⚠️ Incompatibility issues:
If you are using Themis on x64 systems, consider upgrading every Themis library/wrapper you were using to 0.10.0
. Incompatibility issues may arise between previous Themis versions and 0.10.0
on x64 machines (#279).
Rubythemis has breaking changes for Secure Cell Token Protect mode (#281). We added checks for other language wrappers to make sure this won't happen again (#282, #283).
Check the Migration Guide for more details.
Docs:
Infrastructure:
- Added support of Ubuntu 17.10.
- Removed support of Ubuntu 16.10 and Ubuntu 17.04 (no more compiled binaries for these OSs now).
- Added CLI utils for easy testing of Secure Cell, Secure Message, and Key generation on local machine. Available for Python, Ruby, Go, NodeJS, and PHP. Check the Console Utils guide for more details and usage description/guide.
- Added Integration test suit for the majority of the available language wrappers, which was the catalyst for many fixes in this release.
- Added support of CircleCI 2.0 with multiple workflows. This allows testing each language wrapper and integrations between them easily and quickly (#295, #299).
Code:
- Core:
- Fixed incompatibility issue that existed in Secure Cell between x32 and x64 machines (#279);
- Added C examples for using buffer API in Secure Session (#271);
- Fixed possible SigFault in Secure Message at the point of providing an incorrect private key path (#286).
- C++ wrapper:
- Added a set of unit tests (#292).
- Android wrapper:
- simplified Android build by providing a ready-to-use Docker container. No need to compile BoringSSL manually now! (#273 by @secumod).
- iOS wrapper:
- Updated Secure Comparator definitions and provided code samples (#287, #288).
- GoThemis:
- Added
get_remote_id
function, which is making SecureSession easier to use (#272);
- Added CLI utils and integration tests that allow you to test Secure Cell, Secure Message, and Key generation on your local machine (#277, #293, #305, #306).
- JSThemis:
- Added a separate installation step in Makefile. Now you can install jsthemis via
make jsthemis_install
(#302);
- Added CLI utils and integration tests that allow you to test Secure Cell, Secure Message, and Key generation on your local machine (#277, #293, #305, #306).
- RubyThemis:
- Fixed arguments' order for Secure Cell in the Token Protect mode, which caused incompatibility with older versions of rubythemis (#281). Please check the migration guide for the details;
- Added CLI utils and integration tests that allow you to test Secure Cell, Secure Message, and Key generation on your local machine (#277, #293, #305, #306)
- PyThemis:
- Improved the installation process via Makefile for python3 users (#300);
- Added CLI utils and integration tests that allow you to test Secure Cell, Secure Message, and Key generation on your local machine (#277, #293, #305, #306).
- PHPThemis:
- Added support of PHP 7.0, 7.1, 7.2 (#278, #280);
- Added a package for
phpthemis
. Now you don't need to compile it from sources. See the installation PHP guide for more details;
- Improved unit tests. Now it's easy to run tests because all the dependencies are handled by a php-composer (#284, #285, #303);
- Added a memory test suit, which allows us to keep a closer eye on PHPThemis' memory usage (#298);
- Added CLI utils and integration tests that allow you to test Secure Cell, Secure Message, and Key generation on your local machine (#277, #293, #305, #306).
0.9.6, December 14th 2017
TL;DR: OpenSSL 1.1 support.
Docs:
Infrastructure:
- Removed support for Ubuntu Precise.
- Fixed
.rpm
package versioning (#240).
- Added a handy command for preparing and running of all the tests
make test
(#243).
- Added small changes and updates into Makefile to make it even better and fixed the installing dependencies (#236, #239, #250).
Code:
- Core:
- added OpenSSL 1.1 support (#208).
- Android wrapper:
- fixed Secure Cell in token protect mode (#251);
- fixed casting warnings in JNI code (#246).
- iOS wrapper:
- updated wrapper to be compatible with Swift4 (#230);
- added nullability support (#255);
- made the NSError autoreleasing (#257, #259) from @valeriyvan;
- fixed warnings that appeared due to renaming
error.h
files (#247);
- updated and refactored tests (#231, #232).
- GoThemis:
- added compatibility with old Go (1.2) (#253);
- fixed tests (#261).
- JSThemis:
- fixed installation path for macOS (#237, #238).
- PyThemis:
- fixed compatibility with version 0.9.5 (#241), pushed as a separate package 0.9.5.1.
0.9.5, September 13th 2017
TL;DR: Mostly usability fixes for wrappers.
Infrastructure:
- You can now download pre-built Themis packages from our package server.
- Enhanced building process for MacOS (working now!) (#215).
- Enhanced building process for Debian 9.x (working even better now!).
- Updated documentation and examples to make it easier to understand.
- Now we use Bitrise as a separate CI for iOS wrapper.
- Test and code coverage are automagically measured now!
Code:
- Core: disabled SHA1 support.
- Secure Comparator: magically improved code readability (#196, #195).
- iOS wrapper: added support of dynamic frameworks and bitcode (#222, #219, #205).
- GoThemis: refactored custom error (
themisError
) type.
- PHP wrapper: updated tests.
- PyThemis: considerably improved example projects.
0.9.4, November 22nd 2016
This is tiny intermediary release to lock ongoing changes in stable form for all languages:
- BoringSSL support on Android and Linux
- Fixed some leaks and code styling problems (thanks to @bryongloden)
- Memory management updates for stability in languages, which rely on sloppy GC
- Fix Themis build errors under certain conditions
- Secure Comparator examples for many languages
- Swift3 support + numerous enhancements from @valeriyvan, thanks a lot!
- GoThemis: fixed rare behavior in Secure Session wrapper
- GoThemis examples
- JsThemis syntax corrections and style fixes
- JsThemis Nan usage to enhance compatibility
- More and better Themis Server examples
- Enhanced error messages (now with proper spelling!)
- Corrections for RD_Themis
0.9.3.1, August 24th 2016
Updating podspec to be compatible with CocoaPods 1.0
0.9.3, May 24th 2016
Infrastructure:
- Lots of new high-level language wrappers
- Enhanced documentation
- Lots of various demo projects
- Updated Themis Server
- Better make system verbosity (now you can actually see what succeeded and what didn't)
- Infrastructure to build Java on all platforms
Code:
0.9.2, November 4th 2015
Infrastructure:
- Much better documentation
- We've introduced Themis Server, interactive environment to debug your apps and learn how Themis works.
- Tests for all platforms and languages.
- Themis is now integrated with Circle CI, with controls every repository change and tests it
- Added conditional compilation for advanced features (see 4.5 and our blog for more information)
- Doxygen-friendly comments in code
Code:
- Python Themis wrapper is now Python 3 / PEP friendly.
- Android Themis wrapper for Secure Message now works in Sign/Verify mode, too.
- PHP Themis wrapper now supports Secure Session (although with some advice on use cases, see docs).
- iOS wrapper supports iOS 9, lots of minor fixes.
- Better exceptions and verbose errors in some wrappers.
- Longer RSA keys support
- Better abstractions for cryptosystem parameters like key lengths.
- Zero Knowledge Proof-based authentication called Secure Comparator. Advanced experimental feature.