encrypt/decrypt secret data

This commit is contained in:
2025-03-20 12:54:43 -05:00
parent 0101e92d97
commit 4b45e71193
2 changed files with 44 additions and 8 deletions

View File

@@ -227,6 +227,8 @@ bool validateSettings(
}
Map<String, dynamic> convertAllToString(Map<String, dynamic> settings) {
final password = 'test';
settings.forEach((key, value) {
if (value is Map<String, dynamic>) {
convertAllToString(value);
@@ -236,7 +238,7 @@ Map<String, dynamic> convertAllToString(Map<String, dynamic> settings) {
if (key == 'ApiPassword' ||
key == 'EncryptionToken' ||
key == 'SecretKey') {
value = encryptValue(value);
value = encryptValue(value, password);
} else if (value is String) {
return;
}
@@ -247,7 +249,7 @@ Map<String, dynamic> convertAllToString(Map<String, dynamic> settings) {
return settings;
}
String encryptValue(String value) {
String encryptValue(String value, String password) {
final sodium = constants.sodium;
if (sodium == null) {
return value;
@@ -255,19 +257,18 @@ String encryptValue(String value) {
final keyHash = sodium.crypto.genericHash(
outLen: sodium.crypto.aeadChaCha20Poly1305.keyBytes,
message: Uint8List.fromList('test'.toCharArray()),
message: Uint8List.fromList(password.toCharArray()),
);
final crypto = sodium.crypto.aeadXChaCha20Poly1305IETF;
final nonce = sodium.secureRandom(crypto.nonceBytes).extractBytes();
final data = crypto.encrypt(
additionalData: Uint8List.fromList(
'repertory'.toCharArray(),
),
additionalData: Uint8List.fromList('repertory'.toCharArray()),
key: SecureKey.fromList(sodium, keyHash),
message: Uint8List.fromList(value.toCharArray()),
nonce: sodium.secureRandom(crypto.nonceBytes).extractBytes(),
nonce: nonce,
);
return base64Encode(data);
return base64Encode(Uint8List.fromList([...nonce, ...data]));
}