After passbolt migration, desktop plugin works, but mobile app does not

Checklist
[ Y] I have read intro post: About the Installation Issues category
[Y ] I have read the tutorials, help and searched for similar issues
[Y ] I provide relevant information about my server (component names and versions, etc.)
[ NA] I provide a copy of my logs and healthcheck
[Y ] I describe the steps I have taken to trouble shoot the problem
[ Y] I describe the steps on how to reproduce the issue

When attempting to add my mobile device to my passbolt server (I migrated from an older version. I don’t remember what it is), I am getting a NullPointerException in the debug logs within the app.

This seems to me that it is trying to do an x509 type of deal, but am not entirely sure (I have not looked at the source code for the app, so I will probably byte my tongue on that later).

Here is the mobile app logs:

Device: Google Pixel 7 Pro
Android 14 (34)
Passbolt 1.20.0-30

17:35:44 --> PUT [URL_QR_CODE] h2 (41-byte body)
17:35:44 <-- 200 [URL_QR_CODE] (109ms, unknown-length body)
17:35:45 --> PUT [URL_QR_CODE] h2 (41-byte body)
17:35:45 <-- 200 [URL_QR_CODE] (107ms, unknown-length body)
17:35:45 --> PUT [URL_QR_CODE] h2 (41-byte body)
17:35:46 <-- 200 [URL_QR_CODE] (120ms, unknown-length body)
17:35:46 --> PUT [URL_QR_CODE] h2 (41-byte body)
17:35:46 <-- 200 [URL_QR_CODE] (108ms, unknown-length body)
17:35:47 Saving private key.
17:35:47 --> PUT [URL_QR_CODE]?[URL_PARAMS] h2 (38-byte body)
17:35:47 <-- 200 [URL_QR_CODE]?[URL_PARAMS] (134ms, unknown-length body)
17:35:50 Checking biometry state
17:35:59 Passphrase cache cleared
17:35:59 Passphrase cached
17:35:59 Getting server pgp and rsa keys
17:35:59 --> GET [URL_VERIFY_AUTH] h2
17:35:59 <-- 200 [URL_VERIFY_AUTH] (90ms, unknown-length body)
17:35:59 Uncaught exception in thread: main
java.lang.NullPointerException: Parameter specified as non-null is null: method com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$Output$Success.<init>, parameter publicKey
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$Output$Success.<init>(Unknown Source:2)
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase.execute(SourceFile:38)
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$execute$1.invokeSuspend(Unknown Source:12)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
	at kotlinx.coroutines.DispatchedTask.run(SourceFile:108)
	at android.os.Handler.handleCallback(Handler.java:959)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loopOnce(Looper.java:232)
	at android.os.Looper.loop(Looper.java:317)
	at android.app.ActivityThread.main(ActivityThread.java:8592)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@cb52070, Dispatchers.Main]

java.lang.NullPointerException: Parameter specified as non-null is null: method com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$Output$Success.<init>, parameter publicKey
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$Output$Success.<init>(Unknown Source:2)
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase.execute(SourceFile:38)
	at com.passbolt.mobile.android.feature.authentication.auth.usecase.GetServerPublicPgpKeyUseCase$execute$1.invokeSuspend(Unknown Source:12)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33)
	at kotlinx.coroutines.DispatchedTask.run(SourceFile:108)
	at android.os.Handler.handleCallback(Handler.java:959)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loopOnce(Looper.java:232)
	at android.os.Looper.loop(Looper.java:317)
	at android.app.ActivityThread.main(ActivityThread.java:8592)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@cb52070, Dispatchers.Main]
17:36:06 File logging tree planted

I do not seem to have logs for the server :confused:

Is there some configuration that I need to do that I am missing?

Relevant versions:
App: 1.20.0-30
Android 14 (api 34)
Server 4.8.0
Desktop extension: 4.8.2 firefox

Hello @soccermomisqueen, welcome to the community :slight_smile:

I have seen similar issues in the past where it was related to time synchronisation issues, could you ensure that both of the devices are time synchronized (client on web, google pixel) and that the server is also time synchronized?

Also, do you have a WAF configured?

I am looking, and it seems all devices are in sync within 1 second of eachother.

I am not currently using a WAF for my passbolt install.

Apparently it was due to the server key being put in an incorrect format (the server key files were encoded in a binary format rather than an ascii armored format). I may have a bug report that gives a better error message rather than no public key (instead it would say something like incorrect public key format).