decryptWithCallback method

Future<Uint8List> decryptWithCallback(
  1. Uint8List senderKeyMessageBytes,
  2. 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);
  }
}