53 lines
1.3 KiB
Dart
53 lines
1.3 KiB
Dart
// Dart imports:
|
||
import 'dart:convert';
|
||
import 'dart:typed_data';
|
||
|
||
import 'package:hive_ce/hive.dart';
|
||
import 'package:remever/common/storage.dart';
|
||
|
||
import 'core_service.dart';
|
||
|
||
///
|
||
/// Сервис для работы с ключами шифрования
|
||
///
|
||
class EncKeysService extends CoreService {
|
||
///
|
||
/// Получение ключа для шифрования
|
||
///
|
||
Future<String> getRawKey(String keyFor) async {
|
||
String? encKey = await hiveKeysStorage.read(key: keyFor);
|
||
|
||
if (encKey == null) {
|
||
final List<int> hiveKey = Hive.generateSecureKey();
|
||
|
||
encKey = base64UrlEncode(hiveKey);
|
||
|
||
await hiveKeysStorage.write(key: keyFor, value: encKey);
|
||
}
|
||
|
||
return encKey;
|
||
}
|
||
|
||
///
|
||
/// Получение ключа шифрования
|
||
///
|
||
/// Если ключа ранее не существовало - он будет создан
|
||
///
|
||
Future<Uint8List> getKey(String keyFor) async {
|
||
String? encKey = await getRawKey(keyFor);
|
||
|
||
return base64Url.decode(encKey);
|
||
}
|
||
|
||
///
|
||
/// Получение ключа шифрования в виде строки
|
||
///
|
||
/// Если ключа ранее не существовало - он будет создан
|
||
///
|
||
Future<String> getStringKey(String keyFor) async {
|
||
final Uint8List key = await getKey(keyFor);
|
||
|
||
return String.fromCharCodes(key);
|
||
}
|
||
}
|