glp-companion/lib/core/security/crypto_manager.dart

26 lines
843 B
Dart

import 'dart:convert';
import 'dart:math';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class CryptoManager {
static const _databaseKeyName = 'glp1_sqlcipher_master_key';
final FlutterSecureStorage _secureStorage;
CryptoManager({FlutterSecureStorage? secureStorage})
: _secureStorage = secureStorage ?? const FlutterSecureStorage();
Future<String> getOrCreateDatabaseEncryptionKey() async {
final existingKey = await _secureStorage.read(key: _databaseKeyName);
if (existingKey != null && existingKey.isNotEmpty) {
return existingKey;
}
final random = Random.secure();
final values = List<int>.generate(32, (i) => random.nextInt(256));
final newKey = base64UrlEncode(values);
await _secureStorage.write(key: _databaseKeyName, value: newKey);
return newKey;
}
}