newSsss method

Future<void> newSsss([
  1. String? passphrase,
  2. String? name
])

Implementation

Future<void> newSsss([String? passphrase, String? name]) async {
  if (state != BootstrapState.askNewSsss) {
    throw BootstrapBadStateException('Wrong State');
  }
  state = BootstrapState.loading;
  try {
    Logs().v('Create key...');
    newSsssKey = await encryption.ssss.createKey(passphrase, name);
    if (oldSsssKeys != null) {
      final existingOldKeys = oldSsssKeys!;
      if (existingOldKeys.isNotEmpty) {
        final primaryUnlockedKey =
            existingOldKeys[encryption.ssss.defaultKeyId] ??
                existingOldKeys.values.first;
        await encryption.ssss.migrateSecretsToKey(
          primaryUnlockedKey: primaryUnlockedKey,
          destinationKey: newSsssKey!,
          candidateOldKeys: existingOldKeys,
          stripKeys: true,
        );
      }
    }
    await encryption.ssss.setDefaultKeyId(newSsssKey!.keyId);
    while (encryption.ssss.defaultKeyId != newSsssKey!.keyId) {
      Logs().v(
        'Waiting accountData to have the correct m.secret_storage.default_key',
      );
      await client.oneShotSync();
    }
  } catch (e, s) {
    Logs().e('[Bootstrapping] Error trying to migrate old secrets', e, s);
    state = BootstrapState.error;
    return;
  }
  // alright, we successfully migrated all secrets, if needed

  checkCrossSigning();
}