For this situation, we created Brain Key technology. So, when the user changes his/her password, you can re-encrypt the same user private key with the new password's BrainKey. BrainKey should be created on the client side using one of our available SDKs.
This is a use-case can be implemented if you want to use the user's password for authorization. That means that Bob (for example) creates a password on the personal device, based on the password Bob generates a private key, which he uses for message encryption. If Bob changes his device, on a new device he should type the old password and based on the old password there will be generated the SAME private key (which was on the old device). Without the same private key you won't be able to decrypt the previous history.
If you store the encrypted history on the server, Bob won't be able to read the history after changing the password. In this case Bob should re-encrypt his history on the new key.
Brain Key can be implemented only on the client side.
For more details, you can read the article here: https://stackoverflow.com/questions/51606458/how-to-encrypt-and-decrypt-messages-using-virgil-security/51676872#51676872