{"record":{"id":"ece3acdbe48584ab","repo":"microg/GmsCore","slug":"null-devicekeymd5","errorCode":null,"errorMessage":"Null deviceKeyMd5.","messagePattern":"Null deviceKeyMd5\\.","errorType":"error_code","errorClass":"StandardIntegrityException","httpStatus":null,"severity":"error","filePath":"vending-app/src/main/kotlin/com/google/android/finsky/expressintegrityservice/ExpressIntegrityService.kt","lineNumber":169,"sourceCode":"                val creationTime = tokenWrapper.deviceIntegrityWrapper?.creationTime ?: Timestamp()\n                val lastManualSoftRefreshTime = tokenWrapper.lastManualSoftRefreshTime ?: Timestamp()\n\n                val deviceIntegrityAndExpiredKey = DeviceIntegrityAndExpiredKey(\n                    deviceIntegrity = DeviceIntegrity(\n                        tokenClientKey, deviceIntegrityWrapper.deviceIntegrityToken, creationTime, lastManualSoftRefreshTime\n                    ), expressFilePB.expiredDeviceKey ?: ClientKey()\n                )\n\n                val deviceIntegrity = deviceIntegrityAndExpiredKey.deviceIntegrity\n                if (deviceIntegrity.deviceIntegrityToken?.size == 0 || deviceIntegrity.clientKey?.keySetHandle?.size == 0) {\n                    throw StandardIntegrityException(\"DroidGuard token is empty.\")\n                }\n\n                val deviceKeyMd5 = Base64.encodeToString(\n                    deviceIntegrity.clientKey?.keySetHandle?.md5()?.toByteArray(), Base64.NO_PADDING or Base64.NO_WRAP or Base64.URL_SAFE\n                )\n                if (deviceKeyMd5.isNullOrEmpty()) {\n                    throw StandardIntegrityException(\"Null deviceKeyMd5.\")\n                }\n\n                val deviceIntegrityResponse = DeviceIntegrityResponse(\n                    deviceIntegrity, false, deviceKeyMd5, deviceIntegrityAndExpiredKey.expiredDeviceKey\n                )\n\n                val packageInfo = context.packageManager.getPackageInfoCompat(\n                    expressIntegritySession.packageName, PackageManager.GET_SIGNING_CERTIFICATES or PackageManager.GET_SIGNATURES\n                )\n                val certificateSha256Hashes = packageInfo.signaturesCompat.map {\n                    it.toByteArray().sha256().encodeBase64(noPadding = true, noWrap = true, urlSafe = true)\n                }\n\n                val packageInformation = PackageInformation(certificateSha256Hashes, packageInfo.versionCode)\n                val clientKeyExtend = buildClientKeyExtend(context, expressIntegritySession, packageInformation, clientKey)\n                val intermediateIntegrityRequest = IntermediateIntegrityRequest.Builder().apply {\n                    deviceIntegrityToken(deviceIntegrityResponse.deviceIntegrity.deviceIntegrityToken)\n                    readAes128GcmBuilderFromClientKey(deviceIntegrityResponse.deviceIntegrity.clientKey)?.let {","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/vending-app/src/main/kotlin/com/google/android/finsky/expressintegrityservice/ExpressIntegrityService.kt#L151-L187","documentation":"ExpressIntegrityService.warmUpIntegrityToken throws with this message when the MD5 hash of the device key cannot be computed or is missing from the integrity payload, preventing construction of the device-integrity record for the express integrity response.","triggerScenarios":"Thrown at vending-app/src/main/kotlin/com/google/android/finsky/expressintegrityservice/ExpressIntegrityService.kt:169 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry warm-up to obtain a well-formed client key","Validate the session key material before finalizing the token wrapper"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}