# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [0.9.0] - 2023-10-23 - Removes the `derive_keypair` function as it was not used and was broken. - Added `constant_time_equals` in the utils. ## [0.8.0] - 2021-11-25 ### Added - Added the `signing_key` and `signature` modules to support public key signing using ed25519. ## [0.6.1] - 2020-06-28 ### Added - Added `scrypt_simple` to Rust and C# ### Changed - Fixed missing file in NPM package ## [0.6.0] - 2020-06-16 ### Added - Added `derive_key_argon2()` method to derive a symmetric key from a set of `Argon2Parameters`. ### Changed - Renamed `derive_key()` to `derive_key_pbkdf2()`. ## [0.5.5] - 2020-05-11 - C# and Javascript/Typescript ### Added (C#) - Added a legacy decryption handler, in case the header is invalid. ### Added (WASM) - Binded a Rust Scrypt method to WASM for a very specific use case, and this might be removed in the future, so don't rely on it. ## [0.5.4] - 2020-05-11 - C# ### Added - Binding to base64 encoding/decoding in url-safe format. ## [0.5.3] - 2020-05-06 - C# ### Changed - Prevent derivation if encryption/decryption data is null. ## [0.5.2-0.5.6] - 2020-05-05 - Javascript IE ### Changed - Fixes for Internet Explorer and Safari. ## [0.5.2] - 2020-04-22 - C# ### Changed #### C# - Fixed crash in the GetDecodedLength method. ## [0.5.1] - 2020-04-16 - Rust ### Changed #### Rust - Added Base64 bindings in utils ## [0.5.1] - 2020-04-15 - C# iOS ### Changed #### C# - Fixed iOS linking issue with multiple rust libraries. ## [0.5.1] - 2020-03-27 - Javascript/Typescript ### Added #### Javascript/Typescript - `base64urlEncode` and `base64urlDecode` methods to encode data to be passed by a URL. ## [0.5.0] - 2020-03-23 ### Added #### C# - Wrapper for the shamir secret sharing feature. #### Rust - `utils::validate_header()` #### Javascript/Typescript - `validateHeader()` - Enumerations for versions instead of numbers. ### Changed #### C# - Fixed the Argon2Parameters for the Xamarin Mac Modern, iOS, Android caused by a typo in the entry point. - ```DataType.Hash``` is now deprecated and has been replaced by ```DataType.PasswordHash```. - ```Managed.ValidateSignature``` is now deprecated and has been replaced by ```Managed.ValidateHeader``` - Performance improvements for the Derive Key bug. #### Rust - The entire API has been changed. Please refer to the documentation and the README. - iOS 32 bit platforms no longer supported. They are now Tier 3. (i386, armv7, armv7s) ### Testing #### C# - The Xamarin Mac Modern platform is now tested. - The Xamarin iOS platform is now tested. ## [0.4.0] - 2020-03-15 ### Added #### General - Asymmetric encryption. (Rust, C#, JS) - Derive key pair from a password. (Rust, C#, JS) - Shamir Secret Sharing. (Rust, JS) - Official Javascript/Typescript support. #### C# - Documented most functions and enums. - The following functions have been added in the ```Utils```. It is not recommended to use them for performance reasons. Keep using ```ValidateSignature(byte[], DataType)``` when possible. - ```ValidateSignatureFromBase64``` - ```ValidateSignatureFromStream``` ### Changed #### C# - Renamed functions to be more consistent with what they do. The old functions now have the *[Obsolete]* attribute. - ```StringToByteArray``` is now ```StringToUtf8ByteArray``` - ```ByteArrayToString``` is now ```ByteArrayToUtf8String``` - ```Decode``` is now ```DecodeFromBase64``` - ```Encode``` is now ```EncodeToBase64String``` - Fixed issue in the ```DeriveKey()``` function - Confusion between bits and bytes. The keys generated by the function would be 256 byte instead of 32 byte. The error is now fixed and our decryption will fallback to 256 bytes if the decryption fail. - ```DevolutionsCryptoExceptions``` have now more details in the message and the stack trace. ### Breaking Changes #### C# - Renamed the following function - ```GenerateKeyExchange``` to ```GenerateKeyPair``` - Renamed the following class - ```KeyExchange``` to ```KeyPair``` - The function ```DecryptWithKey``` had a ```iterations``` parameter that wasn't used so it has been removed. - The function ```DeriveKey``` now returns a key of 32 bytes by default instead of 256 bytes, which couldn't be changed. If you already use the method, you can override the default value to 256 and the old data will still work, however it is recommended to migrate to 32 bytes key, mostly for performance reasons. #### Javascript The API has completely changed since 0.3 to respect Javascript/Typescript coding styles. Notably, function names has been renamed to follow the `camelCase` convention and types has been added to prevent key misuse. Also, Typescript declaration has been fixed. ### Testing #### General - Added unit tests for - Asymmetric encryption (C#, Rust, JS) - Derive key pair from a password. (C#, Rust, JS) - Secret Sharing (Rust, JS) - Added conformity tests to make sure that old versions are not broken and that all languages are compatible. - Key Derivation (C#, Rust, JS) - Keypair Derivation (C#, Rust, JS) - Symmetric decryption V1 and V2 (C#, Rust, JS) - Asymmetric Decryption V2 (C#, Rust, JS) - Password Hashin V1 (C#, Rust, JS) #### C# - The Xamarin Mac Full platform is now tested. #### Javascript/Typescript - The Javascript/Typescript API is now tested using NodeJS, instead of only testing the browser features. - The tests were not running, this has been fixed. ### CI #### Code Formatting The CI now ensures that code pushed to the project is respecting our standards. It also prevent merge conflicts caused by the code formatting. ##### C# - Uses SecurityCodeScan and StylecopAnalyzers for code formatting checks. - Warnings are now treated as errors. ##### Rust - Uses rustfmt and rust-clippy for code formatting checks. ##### Javascript - Tests use eslint for formatting, using [JavaScript Standard Style](https://standardjs.com/)