ente/lib/utils/validator_util.dart

51 lines
1.5 KiB
Dart

import 'dart:convert';
import 'dart:typed_data';
import 'package:logging/logging.dart';
import 'package:photos/models/key_attributes.dart';
Logger _logger = Logger("Validator");
void validatePreVerificationStateCheck(
KeyAttributes keyAttr,
String password,
String encryptedToken,
) {
nullOrEmptyArgCheck(encryptedToken, "encryptedToken");
nullOrEmptyArgCheck(password, "userPassword");
if (keyAttr == null) {
throw ArgumentError("key Attributes can not be null");
}
nullOrEmptyArgCheck(keyAttr.kekSalt, "keySalt");
nullOrEmptyArgCheck(keyAttr.encryptedKey, "encryptedKey");
nullOrEmptyArgCheck(keyAttr.keyDecryptionNonce, "keyDecryptionNonce");
nullOrEmptyArgCheck(keyAttr.encryptedSecretKey, "encryptedSecretKey");
nullOrEmptyArgCheck(
keyAttr.secretKeyDecryptionNonce,
"secretKeyDecryptionNonce",
);
nullOrEmptyArgCheck(keyAttr.publicKey, "publicKey");
if ((keyAttr.memLimit ?? 0) <= 0 || (keyAttr.opsLimit ?? 0) <= 0) {
throw ArgumentError("Key mem/OpsLimit can not be null or <0");
}
// check password encoding issues
try {
Uint8List passwordL = utf8.encode(password);
try {
utf8.decode(passwordL);
} catch (e) {
_logger.severe("CRITICAL: password decode failed", e);
rethrow;
}
} catch (e) {
_logger.severe('CRITICAL: password encode failed');
rethrow;
}
}
void nullOrEmptyArgCheck(String value, String name) {
if (value == null || value.isEmpty) {
throw ArgumentError("Critical: $name is nullOrEmpty");
}
}