KeyManager constructor

KeyManager(
  1. Encryption encryption
)

Implementation

KeyManager(this.encryption) {
  encryption.ssss.setValidator(megolmKey, (String secret) async {
    final keyObj = olm.PkDecryption();
    try {
      final info = await getRoomKeysBackupInfo(false);
      if (info.algorithm !=
          BackupAlgorithm.mMegolmBackupV1Curve25519AesSha2) {
        return false;
      }
      return keyObj.init_with_private_key(base64decodeUnpadded(secret)) ==
          info.authData['public_key'];
    } catch (_) {
      return false;
    } finally {
      keyObj.free();
    }
  });
  encryption.ssss.setCacheCallback(megolmKey, (String secret) {
    // we got a megolm key cached, clear our requested keys and try to re-decrypt
    // last events
    _requestedSessionIds.clear();
    for (final room in client.rooms) {
      final lastEvent = room.lastEvent;
      if (lastEvent != null &&
          lastEvent.type == EventTypes.Encrypted &&
          lastEvent.content['can_request_session'] == true) {
        final sessionId = lastEvent.content.tryGet<String>('session_id');
        final senderKey = lastEvent.content.tryGet<String>('sender_key');
        if (sessionId != null && senderKey != null) {
          maybeAutoRequest(
            room.id,
            sessionId,
            senderKey,
          );
        }
      }
    }
  });
}