CHANGELOG¶
0.5.0 – CryptoKit & optimal providers¶
Published 30 Jun 2025
Features¶
- New CryptoKit based provider for all Apple targets, which brings support for AES-GCM and ECDH without requiring to use OpenSSL
- New optimal provider, which allows using preconfigured providers for all targets via a single dependency
- New algorithms: RIPEMD160 (#55) and CMAC (#69)
- Support for compressed encoding of EC public keys (#57)
- Support for IV size larger than 12 bytes in AES GCM (#75)
Bug fixes¶
- Fix
verifySignaturedeclaration in WebCrypto (#62) - Fix
AES.keyGeneratoroverload resolution ambiguity (#53)
Other improvements¶
- Kotlin 2.0.20 -> 2.2.0
- kotlinx-io 0.5.4 -> 0.8.0
- Update the prebuilt OpenSSL version to 3.5.0 LTS
- Additional EC curves definitions: secp256k1 & brainpool (#78)
- Improve the implementation around
WebCryptoJS API (#59 & #71) - Introduce an ability to configure the default security provider for JDK provider and additional dependency to use BouncyCastle provider by default
- New CryptographySystem API to configure the default provider, with the ability to work with multiple providers at the same time
0.4.0 – Secret derivation, more algorithms, kotlinx-io¶
Published 12 Oct 2024
Features¶
- Ecliptic curves improvements:
- Implement ECDH via a new shared secret derivation API
- Support ECDSA in Apple provider
- Support both ECDSA signature formats for all providers
- Added RAW private key encoding (encoding secret value)
- Added SEC1/RFC5915 private key encoding
- New algorithms:
- Support for PBKDF2 and HKDF via a new secret derivation API
- Legacy algorithms supported. Make sure you really need them before use:
- AES-ECB – JDK name AES/ECB/PKCS1Padding or AES/ECB/NoPadding
- RSA-PKCS1 (encryption) – JDK name RSA/ECB/PKCS1Padding
- RSA (encryption) – JDK name RSA/ECB/NoPadding
- IO improvements and kotlinx-io integration:
- Support
ByteStringin places whereByteArrayis used - Incremental hashing and signature generation/verification via
HashFunction,SignFunctionandVerifyFunction - Support hash/sign/verify over kotlinx-io
SinkandSource - Support for streaming encryption/decryption over kotlinx-io
SinkandSource
- Support
- Add the ability to use custom IV in AES-GCM (#38)
- Allow arbitrary key sizes in HMAC
Breaking changes¶
- Drop default signature format parameter for ECDSA
- Rename some parameters in algorithms/operations to have better clarity and less noise
- Rename
PEMandDERtoPemandDerrespectively - Move operations from subpackages to
operationspackagedev.whyoleg.cryptography.operations.hash.Hasherwas moved todev.whyoleg.cryptography.operations.Hasherdev.whyoleg.cryptography.operations.cipher.*was moved todev.whyoleg.cryptography.operations.*dev.whyoleg.cryptography.operations.signature.*was moved todev.whyoleg.cryptography.operations.*- Old declarations are deprecated for removal with
ReplaceWith
- Move algorithms from subpackages to
algorithmspackagedev.whyoleg.cryptography.algorithms.digest.*was moved todev.whyoleg.cryptography.algorithms.*dev.whyoleg.cryptography.algorithms.symmetric.*was moved todev.whyoleg.cryptography.algorithms.*dev.whyoleg.cryptography.algorithms.asymmetric.*was moved todev.whyoleg.cryptography.algorithms.*- Old declarations are deprecated for removal with
ReplaceWith
SymmetricKeySizewas deprecated in favor ofAES.Key.SizepropertiesSignatureVerifier.verifySignaturenow throws on invalid signature instead of returningBooleanSignatureVerifier.tryVerifySignatureis introduced for rare cases when graceful handling is needed
- Renamed AES methods with explicitly provided IV from
encrypt(iv)/decrypt(iv)toencryptWithIv(iv)/decryptWithIv(iv)to be more explicit and better distinguish implcit and explict cases CryptographyExceptionis no longer used:IllegalStateExceptionis thrown instead
Other improvements¶
- Kotlin 2.0.20
- Update the prebuilt OpenSSL version to 3.3.2
- Improve ASN.1/DER encoding feature coverage:
- support Context specific tags, both implicit and explicit
- fully support optional and default properties
- support Kotlin inline classes
- add more ASN.1 modules for RSA and EC
- Make
ServiceLoaderusage to be optimized by Android R8
0.3.1¶
Published 21 May 2024
- Fix concurrency issue in jdk provider (#26)
0.3.0 - Support for ALL targets, new experimental modules¶
Published 21 Feb 2024
New Kotlin targets¶
cryptography-coreandcryptography-randommodules are now supported for ALL Kotlin targets!- CryptographyRandom implementation for WasmJs and WasmWasi
- WebCrypto provider for WasmJs
- OpenSSL provider now supports ALL K/N targets (#10)
- new targets: linuxArm64, tvOS, watchOS, androidNative*
New features¶
- RSA (PSS, OAEP, PKCS1) support in Apple provider (#12)
- RSA PKCS#1 key encoding support
- New algorithm support: AES-CTR
- Support for explicitly provided IV in AES-CTR and AES-CBC
- Note: these APIs are marked as
DelicateCryptographyApi, and so should be used only when it’s really required as they are easy to misuse
- Note: these APIs are marked as
Bug fixes¶
- Fix mingw linking because of zlib (#13)
Breaking changes¶
- Replace InsecureAlgorithm annotation with DelicateCryptographyApi - API breaking change
publicExponentparameter in RSAkeyPairGeneratoris now of typeBigInt- both API and ABI breaking change- RSA key formats are now implemented via
sealed classinstead ofenum- ABI breaking change
General improvements¶
- Kotlin 1.9.22
- Update the prebuilt OpenSSL version to 3.2.0
- Test OpenSSL provider over 3.0, 3.1, 3.2
- A lot of changes and improvements to build, tests and CI configuration
Experimental features¶
- Introduce support for BigInt
- use platform specifics where possible
- RSA public exponent now works in the same way for all providers
- all Kotlin targets supported
- Introduce support for PEM encoding/decoding
- fully common implementation
- Introduce support for ASN.1/DER serialization
- fully common implementation via kotlinx.serialization
0.2.0 - New algorithms, Android integration testing¶
Published 5 Sep 2023
New algorithms¶
- RSA.PKCS1 (RSAES-PKCS1-v1_5) - supported by JDK, WebCrypto and OpenSSL3 providers #5
- SHA224 - supported by JDK, OpenSSL3 and Apple providers
- SHA3 family - supported by JDK and OpenSSL3 providers
Testing improvements¶
- Support running tests with BouncyCastle in addition to default JDK provider
- Support running JDK provider tests on Android emulator with API level 21, 27 and 30
- Add ECDSA with
secp256k1curve testing (supported by JDK BouncyCastle and OpenSSL3 providers) #4
General improvements¶
- Kotlin 1.9.10
- a lot of under the hood changes to improve test coverage and test correctness
Breaking changes¶
- providers artifacts and package name changes. F.e. for JDK provider:
- maven artifact name changed from
cryptography-jdktocryptography-provider-jdk - package name changed from
dev.whyoleg.cryptography.jdktodev.whyoleg.cryptography.providers.jdk
- maven artifact name changed from
- several classes and annotation changed package name to
dev.whyoleg.cryptographyto simplify hierarchy:CryptographyAlgorithmCryptographyAlgorithmNotFoundExceptionCryptographyProviderCryptographyProviderApiInsecureAlgorithm
- simplified JDK provider with custom provider creation
JdkProviderclass removedjava.security.Provideror it’s name can be now directly provided in constructor function- before:
CryptographyProvider.JDK(JdkProvider.Instance(BouncyCastleProvider()))orCryptographyProvider.JDK(JdkProvider.Name("BC")) - now:
CryptographyProvider.JDK(BouncyCastleProvider())orCryptographyProvider.JDK("BC")
- before:
0.1.0 - First release¶
Published 23 Mar 2023