getStored method
Implementation
Future<String> getStored(String type, String keyId, Uint8List key) async {
final secretInfo = client.accountData[type];
if (secretInfo == null) {
throw Exception('Not found');
}
final encryptedContent =
secretInfo.content.tryGetMap<String, Object?>('encrypted');
if (encryptedContent == null) {
throw Exception('Content is not encrypted');
}
final enc = encryptedContent.tryGetMap<String, Object?>(keyId);
if (enc == null) {
throw Exception('Wrong / unknown key: $type, $keyId');
}
final ciphertext = enc.tryGet<String>('ciphertext');
final iv = enc.tryGet<String>('iv');
final mac = enc.tryGet<String>('mac');
if (ciphertext == null || iv == null || mac == null) {
throw Exception('Wrong types for encrypted content or missing keys.');
}
final encryptInfo = EncryptedContent(
iv: iv,
ciphertext: ciphertext,
mac: mac,
);
final decrypted = await decryptAes(encryptInfo, key, type);
final db = client.database;
if (cacheTypes.contains(type) && db != null) {
// cache the thing
await db.storeSSSSCache(type, keyId, ciphertext, decrypted);
onSecretStored.add(keyId);
if (_cacheCallbacks.containsKey(type) && await getCached(type) == null) {
_cacheCallbacks[type]!(decrypted);
}
}
return decrypted;
}