newSsss method
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();
}