26 lines
843 B
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;
|
|
}
|
|
}
|