decryptWithCallback method
Future<Uint8List>
decryptWithCallback(
- Uint8List senderKeyMessageBytes,
- DecryptionCallback? callback
Implementation
Future<Uint8List> decryptWithCallback(
Uint8List senderKeyMessageBytes, DecryptionCallback? callback) async {
try {
final record = await _senderKeyStore.loadSenderKey(_senderKeyId);
if (record.isEmpty) {
throw NoSessionException(
'No group sender key for: ${_senderKeyId.serialize()}');
}
final senderKeyMessage =
SenderKeyMessage.fromSerialized(senderKeyMessageBytes);
final senderKeyState =
record.getSenderKeyStateById(senderKeyMessage.keyId);
senderKeyMessage.verifySignature(senderKeyState.signingKeyPublic);
final senderKey =
getSenderKey(senderKeyState, senderKeyMessage.iteration);
final plaintext = aesCbcDecrypt(
senderKey.cipherKey, senderKey.iv, senderKeyMessage.ciphertext);
if (callback != null) {
callback(plaintext);
}
await _senderKeyStore.storeSenderKey(_senderKeyId, record);
return plaintext;
} on InvalidKeyIdException catch (e) {
throw InvalidMessageException(e.detailMessage);
} on InvalidKeyException catch (e) {
throw InvalidMessageException(e.detailMessage);
}
}