crypto: Throw exceptions when restoring a recovery key from a passphrase
This commit is contained in:
		
							parent
							
								
									e5af7e6109
								
							
						
					
					
						commit
						097f05af57
					
				| @ -398,15 +398,10 @@ internal class RustKeyBackupService @Inject constructor( | ||||
|         cryptoCoroutineScope.launch { | ||||
|             try { | ||||
|                 val key = recoveryKeyFromPassword(password, keysBackupVersion) | ||||
| 
 | ||||
|                 if (key == null) { | ||||
|                     Timber.w("trustKeysBackupVersionWithPassphrase: Key backup is missing required data") | ||||
|                     callback.onFailure(IllegalArgumentException("Missing element")) | ||||
|                 } else { | ||||
|                     checkRecoveryKey(key, keysBackupVersion) | ||||
|                     trustKeysBackupVersion(keysBackupVersion, true, callback) | ||||
|                 } | ||||
|                 checkRecoveryKey(key, keysBackupVersion) | ||||
|                 trustKeysBackupVersion(keysBackupVersion, true, callback) | ||||
|             } catch (exception: Throwable) { | ||||
|                 Timber.w(exception) | ||||
|                 callback.onFailure(exception) | ||||
|             } | ||||
|         } | ||||
| @ -595,15 +590,7 @@ internal class RustKeyBackupService @Inject constructor( | ||||
|         cryptoCoroutineScope.launch(coroutineDispatchers.main) { | ||||
|             runCatching { | ||||
|                 val recoveryKey = withContext(coroutineDispatchers.crypto) { | ||||
|                     val key = recoveryKeyFromPassword(password, keysBackupVersion) | ||||
| 
 | ||||
|                     if (key == null) { | ||||
|                         Timber.w("trustKeysBackupVersionWithPassphrase: Key backup is missing required data") | ||||
| 
 | ||||
|                         throw IllegalArgumentException("Missing element") | ||||
|                     } else { | ||||
|                         key | ||||
|                     } | ||||
|                     recoveryKeyFromPassword(password, keysBackupVersion) | ||||
|                 } | ||||
| 
 | ||||
|                 restoreBackup(keysBackupVersion, recoveryKey, roomId, sessionId, stepProgressListener) | ||||
| @ -772,22 +759,20 @@ internal class RustKeyBackupService @Inject constructor( | ||||
|      * @return the recovery key if successful, null in other cases | ||||
|      */ | ||||
|     @WorkerThread | ||||
|     private fun recoveryKeyFromPassword(password: String, keysBackupData: KeysVersionResult): BackupRecoveryKey? { | ||||
|     private fun recoveryKeyFromPassword(password: String, keysBackupData: KeysVersionResult): BackupRecoveryKey { | ||||
|         val authData = getMegolmBackupAuthData(keysBackupData) | ||||
| 
 | ||||
|         if (authData == null) { | ||||
|             Timber.w("recoveryKeyFromPassword: invalid parameter") | ||||
|             return null | ||||
|         return when { | ||||
|             authData == null                                                                 -> { | ||||
|                 throw IllegalArgumentException("recoveryKeyFromPassword: invalid parameter") | ||||
|             } | ||||
|             authData.privateKeySalt.isNullOrBlank() || authData.privateKeyIterations == null -> { | ||||
|                 throw java.lang.IllegalArgumentException("recoveryKeyFromPassword: Salt and/or iterations not found in key backup auth data") | ||||
|             } | ||||
|             else                                                                             -> { | ||||
|                 BackupRecoveryKey.fromPassphrase(password, authData.privateKeySalt, authData.privateKeyIterations) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (authData.privateKeySalt.isNullOrBlank() | ||||
|                 || authData.privateKeyIterations == null) { | ||||
|             Timber.w("recoveryKeyFromPassword: Salt and/or iterations not found in key backup auth data") | ||||
| 
 | ||||
|             return null | ||||
|         } | ||||
| 
 | ||||
|         return BackupRecoveryKey.fromPassphrase(password, authData.privateKeySalt, authData.privateKeyIterations) | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user