diff --git a/lib/encryption/ssss.dart b/lib/encryption/ssss.dart index 6c3342c4..22247dac 100644 --- a/lib/encryption/ssss.dart +++ b/lib/encryption/ssss.dart @@ -24,7 +24,10 @@ import 'dart:async'; import 'package:base58check/base58.dart'; import 'package:crypto/crypto.dart'; import 'package:encrypt/encrypt.dart'; -import 'package:password_hash/password_hash.dart'; +import 'package:pointycastle/digests/sha512.dart'; +import 'package:pointycastle/key_derivators/api.dart'; +import 'package:pointycastle/key_derivators/pbkdf2.dart'; +import 'package:pointycastle/macs/hmac.dart'; import '../famedlysdk.dart'; import '../src/database/database.dart'; @@ -155,9 +158,12 @@ class SSSS { if (info.algorithm != AlgorithmTypes.pbkdf2) { throw Exception('Unknown algorithm'); } - final generator = PBKDF2(hashAlgorithm: sha512); - return Uint8List.fromList(generator.generateKey(passphrase, info.salt, - info.iterations, info.bits != null ? (info.bits / 8).ceil() : 32)); + final out = Uint8List(info.bits != null ? (info.bits / 8).ceil() : 32); + final generator = PBKDF2KeyDerivator(HMac(SHA512Digest(), 128)); + generator.init( + Pbkdf2Parameters(utf8.encode(info.salt), info.iterations, out.length)); + generator.deriveKey(utf8.encode(passphrase), 0, out, 0); + return out; } void setValidator(String type, FutureOr Function(String) validator) { diff --git a/pubspec.yaml b/pubspec.yaml index e0f32195..17edca7c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,15 +15,18 @@ dependencies: html_unescape: ^1.0.2 moor: ^4.0.0 random_string: ^2.1.0 - encrypt: ^4.1.0 - crypto: ^2.1.5 - base58check: ^1.0.1 - password_hash: ^2.0.0 + encrypt: ^5.0.0-beta.1 + crypto: ^3.0.0 + base58check: ^2.0.0 olm: ^2.0.0 - matrix_file_e2ee: ^1.1.0 + matrix_file_e2ee: + git: + url: https://gitlab.com/famedly/libraries/matrix_file_e2ee.git + ref: nullsafety isolate: ^2.0.3 logger: ^1.0.0 matrix_api_lite: ^0.2.4 + pointycastle: ^3.0.0-nullsafety.2 dev_dependencies: test: ^1.15.7 @@ -35,5 +38,4 @@ dev_dependencies: #flutter_test: {sdk: flutter} dependency_overrides: - # needed until crypto packages upgrade - convert: ^3.0.0 + args: ^2.0.0