Neeraj Gupta 2 years ago
parent
commit
fe6b5d7037
3 changed files with 12 additions and 14 deletions
  1. 1 5
      lib/core/configuration.dart
  2. 1 4
      lib/services/user_service.dart
  3. 10 5
      lib/utils/crypto_util.dart

+ 1 - 5
lib/core/configuration.dart

@@ -282,11 +282,7 @@ class Configuration {
       CryptoUtil.base642bin(attributes.kekSalt),
       attributes.memLimit!,
       attributes.opsLimit!,
-    ).onError((e, s) {
-      _logger.severe('key derivation failed', e, s);
-      throw KeyDerivationError();
-    });
-
+    );
     Uint8List key;
     try {
       // Decrypt the master key with the derived key

+ 1 - 4
lib/services/user_service.dart

@@ -563,10 +563,7 @@ class UserService {
         CryptoUtil.base642bin(srpAttributes.kekSalt),
         srpAttributes.memLimit,
         srpAttributes.opsLimit,
-      ).onError((e, s) {
-        _logger.severe('key derivation failed', e, s);
-        throw KeyDerivationError();
-      });
+      );
       final loginKey = await CryptoUtil.deriveLoginKey(kek);
       final Uint8List identity = Uint8List.fromList(
         utf8.encode(srpAttributes.srpUserID),

+ 10 - 5
lib/utils/crypto_util.dart

@@ -5,6 +5,7 @@ import 'dart:typed_data';
 import 'package:computer/computer.dart';
 import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:logging/logging.dart';
+import "package:photos/core/errors.dart";
 import 'package:photos/models/derived_key_result.dart';
 import 'package:photos/models/encryption_result.dart';
 import "package:photos/utils/device_info.dart";
@@ -405,11 +406,8 @@ class CryptoUtil {
         key = await deriveKey(password, salt, memLimit, opsLimit);
         return DerivedKeyResult(key, memLimit, opsLimit);
       } catch (e, s) {
-        logger.severe(
-          "failed to derive memLimit: $memLimit and opsLimit: $opsLimit",
-          e,
-          s,
-        );
+        logger.warning(
+          "failed to deriveKey mem: $memLimit, ops: $opsLimit", e, s,);
       }
       memLimit = (memLimit / 2).round();
       opsLimit = opsLimit * 2;
@@ -440,6 +438,7 @@ class CryptoUtil {
       int memLimit,
       int opsLimit,
       ) {
+    try {
     return _computer.compute(
       cryptoPwHash,
       param: {
@@ -450,6 +449,12 @@ class CryptoUtil {
       },
       taskName: "deriveKey",
     );
+    } catch(e,s) {
+      final String errMessage = 'failed to deriveKey memLimit: $memLimit and '
+          'opsLimit: $opsLimit';
+      Logger("CryptoUtilDeriveKey").warning(errMessage, e, s);
+      throw KeyDerivationError();
+    }
   }
 
   static Future<Uint8List> deriveLoginKey(