diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 3c4912bcde7..25d50db8dd9 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -17,7 +17,6 @@ import( "//brave/components/cached_flags/brave_components_cached_flags_java_sources.gni") import("//brave/components/embedder_support/android/java_sources.gni") import("//brave/components/permissions/android/java_sources.gni") -import("//brave/components/safetynet/java_sources.gni") import("//brave/components/signin/public/android/java_sources.gni") brave_java_sources = [ @@ -452,7 +451,6 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/ui/system/BraveStatusBarColorController.java", "../../brave/android/java/org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarControllerBase.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java", - "../../brave/android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentServiceImpl.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java", "../../brave/android/java/org/chromium/chrome/browser/util/BraveConstants.java", "../../brave/android/java/org/chromium/chrome/browser/util/BraveDbUtil.java", @@ -521,7 +519,6 @@ brave_java_sources = [ brave_java_sources += brave_ads_java_sources brave_java_sources += brave_components_embedder_support_java_sources brave_java_sources += brave_components_signin_java_sources -brave_java_sources += brave_rewards_java_sources brave_java_sources += brave_feed_java_sources brave_java_sources += brave_public_tab_management_java_sources brave_java_sources += brave_share_java_sources @@ -551,7 +548,6 @@ brave_java_base_sources = [ brave_java_base_module_sources = [ "//brave/android/java/org/chromium/chrome/browser/base/SplitCompatJobIntentService.java", "//brave/android/java/org/chromium/chrome/browser/playlist/hls_content/HlsService.java", - "//brave/android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentService.java", "//brave/android/java/org/chromium/chrome/browser/vpn/wireguard/WireguardService.java", ] diff --git a/android/java/AndroidManifest.xml b/android/java/AndroidManifest.xml index f948e496af1..beceb2a0704 100644 --- a/android/java/AndroidManifest.xml +++ b/android/java/AndroidManifest.xml @@ -173,10 +173,6 @@ android:resource="@xml/quick_action_search_and_bookmark_widget_info" /> - - { - BrowserStartupController.getInstance() - .addStartupCompletedObserver( - new BrowserStartupController.StartupCallback() { - @Override - public void onSuccess() { - BraveRewardsNativeWorker braveRewardsNativeWorker = - BraveRewardsNativeWorker.getInstance(); - if (braveRewardsNativeWorker != null - && braveRewardsNativeWorker.isSupported() - && BravePrefServiceBridge.getInstance() - .getSafetynetCheckFailed()) { - Callback callback = - value -> { - if (value == null - || !value.booleanValue()) { - return; - } - // Reset flag and update UI - BravePrefServiceBridge.getInstance() - .setSafetynetCheckFailed(false); - TabUtils.enableRewardsButton(); - }; - // Re-perform safetynet check - SafetyNetCheck.updateSafetynetStatus(callback); - } - } - - @Override - public void onFailure() { - Log.e( - TAG, - "Failed to perform upgrade tasks:" - + " BrowserStartupController.StartupCallback" - + " failed"); - } - }); - }); - } -} diff --git a/browser/android/preferences/brave_pref_service_bridge.cc b/browser/android/preferences/brave_pref_service_bridge.cc index fb69e596209..c6ff7af7ed2 100644 --- a/browser/android/preferences/brave_pref_service_bridge.cc +++ b/browser/android/preferences/brave_pref_service_bridge.cc @@ -188,15 +188,6 @@ void JNI_BravePrefServiceBridge_SetOldHttpsUpgradesCount( kHttpsUpgrades, count + profile->GetPrefs()->GetUint64(kHttpsUpgrades)); } -void JNI_BravePrefServiceBridge_SetSafetynetCheckFailed(JNIEnv* env, - jboolean value) { - GetOriginalProfile()->GetPrefs()->SetBoolean(kSafetynetCheckFailed, value); -} - -jboolean JNI_BravePrefServiceBridge_GetSafetynetCheckFailed(JNIEnv* env) { - return GetOriginalProfile()->GetPrefs()->GetBoolean(kSafetynetCheckFailed); -} - void JNI_BravePrefServiceBridge_ResetPromotionLastFetchStamp(JNIEnv* env) { GetOriginalProfile()->GetPrefs()->SetUint64( brave_rewards::prefs::kPromotionLastFetchStamp, 0); diff --git a/browser/brave_profile_prefs.cc b/browser/brave_profile_prefs.cc index b7fb794fde9..73bc4a4e521 100644 --- a/browser/brave_profile_prefs.cc +++ b/browser/brave_profile_prefs.cc @@ -281,6 +281,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(kPlayYTVideoInBrowserEnabled, true); registry->RegisterBooleanPref(kBackgroundVideoPlaybackEnabled, false); registry->RegisterBooleanPref(kSafetynetCheckFailed, false); + registry->RegisterStringPref(kSafetynetStatus, ""); // clear default popular sites registry->SetDefaultPrefValue(ntp_tiles::prefs::kPopularSitesJsonPref, base::Value(base::Value::Type::LIST)); diff --git a/browser/ui/webui/brave_rewards/rewards_web_ui_utils.cc b/browser/ui/webui/brave_rewards/rewards_web_ui_utils.cc index 405a3c05cea..88912c4bf81 100644 --- a/browser/ui/webui/brave_rewards/rewards_web_ui_utils.cc +++ b/browser/ui/webui/brave_rewards/rewards_web_ui_utils.cc @@ -36,12 +36,6 @@ bool ShouldBlockRewardsWebUI(content::BrowserContext* browser_context, : brave_rewards::IsSupportedOptions::kNone)) { return true; } -#if BUILDFLAG(IS_ANDROID) - auto* prefs = profile->GetPrefs(); - if (prefs && prefs->GetBoolean(kSafetynetCheckFailed)) { - return true; - } -#endif // BUILDFLAG(IS_ANDROID) } return false; } diff --git a/build/android/config.gni b/build/android/config.gni index 778afe4557a..35b28571fb1 100644 --- a/build/android/config.gni +++ b/build/android/config.gni @@ -136,5 +136,4 @@ brave_jni_headers_sources = [ "//brave/android/java/org/chromium/chrome/browser/vpn/BraveVpnServiceFactoryAndroid.java", "//brave/android/java/org/chromium/chrome/browser/webcompat_reporter/WebcompatReporterServiceFactory.java", "//brave/browser/brave_ads/android/java/org/chromium/chrome/browser/BraveAdsNativeHelper.java", - "//brave/components/safetynet/java/org/chromium/chrome/browser/util/SafetyNetCheck.java", ] diff --git a/build/commands/lib/config.js b/build/commands/lib/config.js index 4cf855d5f79..cc0b6130e64 100644 --- a/build/commands/lib/config.js +++ b/build/commands/lib/config.js @@ -238,7 +238,6 @@ const Config = function () { this.extraGnGenOpts = getEnvConfig(['brave_extra_gn_gen_opts']) || '' this.extraNinjaOpts = [] this.braveAndroidSafeBrowsingApiKey = getEnvConfig(['brave_safebrowsing_api_key']) || '' - this.braveSafetyNetApiKey = getEnvConfig(['brave_safetynet_api_key']) || '' this.braveAndroidDeveloperOptionsCode = getEnvConfig(['brave_android_developer_options_code']) || '' this.braveAndroidKeystorePath = getEnvConfig(['brave_android_keystore_path']) this.braveAndroidKeystoreName = getEnvConfig(['brave_android_keystore_name']) @@ -609,7 +608,6 @@ Config.prototype.buildArgs = function () { args.android_override_version_name = this.androidOverrideVersionName args.brave_android_developer_options_code = this.braveAndroidDeveloperOptionsCode - args.brave_safetynet_api_key = this.braveSafetyNetApiKey args.brave_safebrowsing_api_key = this.braveAndroidSafeBrowsingApiKey args.safe_browsing_mode = 2 diff --git a/chromium_presubmit_config.json5 b/chromium_presubmit_config.json5 index 26e4fe6fa6c..44cec718606 100644 --- a/chromium_presubmit_config.json5 +++ b/chromium_presubmit_config.json5 @@ -111,7 +111,6 @@ "android/java/org/chromium/chrome/browser/help/BraveHelpAndFeedbackLauncher\\.java", "android/java/org/chromium/chrome/browser/search_engines/settings/BraveSearchEngineAdapter\\.java", "android/java/org/chromium/chrome/browser/settings/BravePreferenceDialogFragment\\.java", - "android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentServiceImpl\\.java", ], "_CheckAndroidToastUsage": [ "android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment\\.java", diff --git a/chromium_src/chrome/browser/prefs/browser_prefs.cc b/chromium_src/chrome/browser/prefs/browser_prefs.cc index 421e8575b37..ef1db4b5dd8 100644 --- a/chromium_src/chrome/browser/prefs/browser_prefs.cc +++ b/chromium_src/chrome/browser/prefs/browser_prefs.cc @@ -188,6 +188,12 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, // Added 2024-10 brave_adaptive_captcha::MigrateObsoleteProfilePrefs(profile_prefs); +#if BUILDFLAG(IS_ANDROID) + // Added 27/11/2024: https://github.com/brave/brave-core/pull/26719 + profile_prefs->ClearPref(kSafetynetCheckFailed); + profile_prefs->ClearPref(kSafetynetStatus); +#endif // BUILDFLAG(IS_ANDROID) + // END_MIGRATE_OBSOLETE_PROFILE_PREFS } diff --git a/components/brave_referrals/browser/BUILD.gn b/components/brave_referrals/browser/BUILD.gn index 0192e6cfce3..310573e49e6 100644 --- a/components/brave_referrals/browser/BUILD.gn +++ b/components/brave_referrals/browser/BUILD.gn @@ -44,10 +44,7 @@ static_library("browser") { "android_brave_referrer.h", ] - deps += [ - ":jni_headers", - "//brave/components/safetynet:android", - ] + deps += [ ":jni_headers" ] } } diff --git a/components/brave_referrals/browser/brave_referrals_service.cc b/components/brave_referrals/browser/brave_referrals_service.cc index d381fd33710..389440d22d1 100644 --- a/components/brave_referrals/browser/brave_referrals_service.cc +++ b/components/brave_referrals/browser/brave_referrals_service.cc @@ -463,9 +463,6 @@ std::string BraveReferralsService::BuildReferralFinalizationCheckPayload() base::Value::Dict root; root.Set("api_key", api_key_); root.Set("download_id", pref_service_->GetString(kReferralDownloadID)); -#if BUILDFLAG(IS_ANDROID) - root.Set("safetynet_status", pref_service_->GetString(kSafetynetStatus)); -#endif std::string result; base::JSONWriter::Write(root, &result); @@ -518,31 +515,7 @@ void BraveReferralsService::InitReferral() { kMaxReferralServerResponseSizeBytes); } -#if BUILDFLAG(IS_ANDROID) -void BraveReferralsService::GetSafetynetStatusResult( - const bool token_received, - const std::string& result_string, - const bool attestation_passed) { - if (pref_service_->GetString(kSafetynetStatus).empty()) { - // The device could not support SafetyNet. - pref_service_->SetString(kSafetynetStatus, "not verified"); - } - CheckForReferralFinalization(); -} -#endif - void BraveReferralsService::CheckForReferralFinalization() { -#if BUILDFLAG(IS_ANDROID) - if (pref_service_->GetString(kSafetynetStatus).empty()) { - // Get safetynet status before finalization - safetynet_check::ClientAttestationCallback attest_callback = - base::BindOnce(&BraveReferralsService::GetSafetynetStatusResult, - weak_factory_.GetWeakPtr()); - safetynet_check_runner_.performSafetynetCheck( - "", std::move(attest_callback), true); - return; - } -#endif net::NetworkTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("brave_referral_finalization_checker", R"( @@ -618,7 +591,6 @@ void RegisterPrefsForBraveReferralsService(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(kReferralAttemptCount, 0); #if BUILDFLAG(IS_ANDROID) registry->RegisterTimePref(kReferralAndroidFirstRunTimestamp, base::Time()); - registry->RegisterStringPref(kSafetynetStatus, std::string()); #endif } diff --git a/components/brave_referrals/browser/brave_referrals_service.h b/components/brave_referrals/browser/brave_referrals_service.h index db1a94c7eac..ab1387fecf7 100644 --- a/components/brave_referrals/browser/brave_referrals_service.h +++ b/components/brave_referrals/browser/brave_referrals_service.h @@ -20,7 +20,6 @@ #if BUILDFLAG(IS_ANDROID) #include "brave/components/brave_referrals/browser/android_brave_referrer.h" -#include "brave/components/safetynet/safetynet_check.h" #endif class PrefRegistrySimple; @@ -105,11 +104,6 @@ class BraveReferralsService { void OnReadPromoCodeComplete(const std::string& promo_code); #if BUILDFLAG(IS_ANDROID) - void GetSafetynetStatusResult(const bool token_received, - const std::string& result_string, - const bool attestation_passed); - safetynet_check::SafetyNetCheckRunner safetynet_check_runner_; - void InitAndroidReferrer(); void OnAndroidBraveReferrerReady(); android_brave_referrer::BraveReferrer android_brave_referrer_; diff --git a/components/brave_rewards/content/BUILD.gn b/components/brave_rewards/content/BUILD.gn index 296902f297d..57163177ee6 100644 --- a/components/brave_rewards/content/BUILD.gn +++ b/components/brave_rewards/content/BUILD.gn @@ -66,10 +66,6 @@ static_library("content") { ] public_deps = [ "//brave/components/brave_rewards/core/engine:headers" ] - - if (is_android) { - deps += [ "//brave/components/safetynet:android" ] - } } source_set("testutil") { diff --git a/components/brave_rewards/content/rewards_service_impl.h b/components/brave_rewards/content/rewards_service_impl.h index 6a7022c2044..4a23a5d0639 100644 --- a/components/brave_rewards/content/rewards_service_impl.h +++ b/components/brave_rewards/content/rewards_service_impl.h @@ -39,10 +39,6 @@ #include "mojo/public/cpp/bindings/remote.h" #include "ui/gfx/image/image.h" -#if BUILDFLAG(IS_ANDROID) -#include "brave/components/safetynet/safetynet_check.h" -#endif - namespace base { class OneShotTimer; class SequencedTaskRunner; @@ -489,7 +485,6 @@ class RewardsServiceImpl final : public RewardsService, #if BUILDFLAG(IS_ANDROID) mojom::Environment GetDefaultServerEnvironmentForAndroid(); - safetynet_check::SafetyNetCheckRunner safetynet_check_runner_; #endif raw_ptr prefs_; // NOT OWNED raw_ptr favicon_service_; diff --git a/components/safetynet/BUILD.gn b/components/safetynet/BUILD.gn deleted file mode 100644 index 3775b987b0a..00000000000 --- a/components/safetynet/BUILD.gn +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2023 The Brave Authors. All rights reserved. -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at https://mozilla.org/MPL/2.0/. - -import("//build/buildflag_header.gni") -import("//build/config/android/rules.gni") -import("//third_party/jni_zero/jni_zero.gni") - -declare_args() { - brave_safetynet_api_key = "" -} - -buildflag_header("buildflags") { - header = "buildflags.h" - flags = [ "SAFETYNET_API_KEY=\"$brave_safetynet_api_key\"" ] -} - -group("android") { - public_deps = [ ":safetynet" ] -} - -source_set("safetynet") { - sources = [ - "safetynet_check.cc", - "safetynet_check.h", - ] - - deps = [ - ":buildflags", - ":jni_headers", - "//base", - "//net", - ] -} - -generate_jni("jni_headers") { - sources = [ "java/org/chromium/chrome/browser/util/SafetyNetCheck.java" ] -} diff --git a/components/safetynet/java/org/chromium/chrome/browser/util/SafetyNetCheck.java b/components/safetynet/java/org/chromium/chrome/browser/util/SafetyNetCheck.java deleted file mode 100644 index 502cf4fddd6..00000000000 --- a/components/safetynet/java/org/chromium/chrome/browser/util/SafetyNetCheck.java +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (c) 2020 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at https://mozilla.org/MPL/2.0/. */ - -package org.chromium.chrome.browser.util; - -import android.app.Activity; -import android.content.SharedPreferences; -import android.util.Base64; - -import androidx.annotation.NonNull; - -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; -import com.google.android.gms.safetynet.SafetyNet; -import com.google.android.gms.safetynet.SafetyNetApi; -import com.google.android.gms.safetynet.SafetyNetClient; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; - -import org.jni_zero.CalledByNative; -import org.jni_zero.JNINamespace; -import org.jni_zero.NativeMethods; -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.base.Callback; -import org.chromium.base.ContextUtils; -import org.chromium.base.Log; -import org.chromium.chrome.browser.BraveLocalState; -import org.chromium.chrome.browser.BraveRewardsHelper; -import org.chromium.chrome.browser.preferences.BravePref; - -import java.security.SecureRandom; -import java.util.Calendar; -import java.util.Random; -import java.util.regex.Pattern; - -/** - * Utility class for providing additional safety checks. - */ -@JNINamespace("safetynet_check") -public class SafetyNetCheck { - private static final String TAG = "SafetyNetCheck"; - - private static final String PREF_SAFETYNET_RESULT = "safetynet_result"; - private static final String PREF_SAFETYNET_LAST_TIME_CHECK = "safetynet_last_time_check"; - - private static final String SAFETYNET_STATUS_VERIFIED_PASSED = "verified, passed"; - private static final String SAFETYNET_STATUS_VERIFIED_NOT_PASSED = "verified, not passed"; - private static final String SAFETYNET_STATUS_NOT_VERIFIED = "not verified"; - - private static final long TEN_DAYS = 10 * 24 * 60 * 60 * 1000; - - private long mNativeSafetyNetCheck; - private Callback mSafetyNetCheckCallback; - - private SafetyNetCheck(long staticSafetyNetCheck) { - mNativeSafetyNetCheck = staticSafetyNetCheck; - mSafetyNetCheckCallback = null; - } - - private SafetyNetCheck(Callback safetyNetCheckCallback) { - mNativeSafetyNetCheck = 0; - mSafetyNetCheckCallback = safetyNetCheckCallback; - } - - @CalledByNative - private static SafetyNetCheck create(long staticSafetyNetCheck) { - return new SafetyNetCheck(staticSafetyNetCheck); - } - - @CalledByNative - private void destroy() { - assert mNativeSafetyNetCheck != 0; - mNativeSafetyNetCheck = 0; - } - - /** - * Performs client attestation - */ - @CalledByNative - public boolean clientAttestation(String nonceData, String apiKey, - boolean performAttestationOnClient) { - return clientAttestation(nonceData, apiKey, performAttestationOnClient, false); - } - - private boolean clientAttestation(String nonceData, String apiKey, - boolean performAttestationOnClient, boolean forceCheck) { - boolean res = false; - try { - Activity activity = (Activity)BraveRewardsHelper.getChromeTabbedActivity(); - if (activity == null) return false; - if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity) == ConnectionResult.SUCCESS) { - SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); - String safetyNetResult = sharedPreferences.getString(PREF_SAFETYNET_RESULT, ""); - long lastTimeCheck = sharedPreferences.getLong(PREF_SAFETYNET_LAST_TIME_CHECK, 0); - Calendar currentTime = Calendar.getInstance(); - long milliSeconds = currentTime.getTimeInMillis(); - if (!forceCheck && nonceData.isEmpty() && !safetyNetResult.isEmpty() - && (milliSeconds - lastTimeCheck < TEN_DAYS)) { - clientAttestationResult(true, safetyNetResult, performAttestationOnClient); - return true; - } - byte[] nonce = nonceData.isEmpty() ? getRequestNonce() : nonceData.getBytes(); - SafetyNetClient client = SafetyNet.getClient(ContextUtils.getApplicationContext()); - Task attestTask = client.attest(nonce, apiKey); - attestTask.addOnSuccessListener(activity, - new OnSuccessListener() { - @Override - public void onSuccess(SafetyNetApi.AttestationResponse response) { - SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit(); - sharedPreferencesEditor.putString(PREF_SAFETYNET_RESULT, response.getJwsResult()); - sharedPreferencesEditor.putLong(PREF_SAFETYNET_LAST_TIME_CHECK, milliSeconds); - sharedPreferencesEditor.apply(); - clientAttestationResult(true, response.getJwsResult(), performAttestationOnClient); - } - }).addOnFailureListener(activity, new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Log.e(TAG, "Failed to perform SafetyNetCheck: " + e); - clientAttestationResult(false, e.toString(), performAttestationOnClient); - } - }); - res = true; - } else { - clientAttestationResult( - false, - "Google Play Services are not available", - performAttestationOnClient); - // This result just indicates that callback with the actual result was called - res = true; - } - } catch (Exception e) { - Log.e(TAG, "SafetyNetCheck error: " + e); - } - - return res; - } - - /** - * Generates a random 24-byte nonce. - */ - private byte[] getRequestNonce() { - byte[] bytes = new byte[24]; - Random random = new SecureRandom(); - random.nextBytes(bytes); - return bytes; - } - - /** - * Returns client attestation final result - */ - private void clientAttestationResult( - boolean tokenReceived, String resultString, boolean performAttestationOnClient) { - boolean attestationPassed = false; - if (performAttestationOnClient) { - if (tokenReceived) { - String[] tokenParts = resultString.split(Pattern.quote(".")); - if (tokenParts.length >= 2) { - String tokenPart2 = new String(Base64.decode(tokenParts[1], Base64.DEFAULT)); - boolean ctsProfileMatch = false; - boolean basicIntegrity = false; - try { - JSONObject json = new JSONObject(tokenPart2); - if (json.has("ctsProfileMatch")) { - ctsProfileMatch = json.getBoolean("ctsProfileMatch"); - } - if (json.has("basicIntegrity")) { - basicIntegrity = json.getBoolean("basicIntegrity"); - } - } catch (JSONException e) { - Log.e(TAG, "Unable to perform SafetyNet attestation: " + e); - } - attestationPassed = ctsProfileMatch && basicIntegrity; - BraveLocalState.get().setString(BravePref.SAFETYNET_STATUS, - attestationPassed ? SAFETYNET_STATUS_VERIFIED_PASSED - : SAFETYNET_STATUS_VERIFIED_NOT_PASSED); - if (mSafetyNetCheckCallback != null) { - mSafetyNetCheckCallback.onResult(attestationPassed); - } - } - } else { - BraveLocalState.get().setString( - BravePref.SAFETYNET_STATUS, SAFETYNET_STATUS_NOT_VERIFIED); - } - } - if (mNativeSafetyNetCheck == 0) return; - SafetyNetCheckJni.get().clientAttestationResult( - mNativeSafetyNetCheck, tokenReceived, resultString, attestationPassed); - } - - public String getApiKey() { - return SafetyNetCheckJni.get().getApiKey(); - } - - public static boolean updateSafetynetStatus(Callback safetyNetCheckCallback) { - SafetyNetCheck safetyNet = new SafetyNetCheck(safetyNetCheckCallback); - return safetyNet.clientAttestation("", safetyNet.getApiKey(), true, true); - } - - @NativeMethods - interface Natives { - void clientAttestationResult(long nativeSafetyNetCheck, boolean tokenReceived, - String resultString, boolean attestationPassed); - String getApiKey(); - } -} diff --git a/components/safetynet/java_sources.gni b/components/safetynet/java_sources.gni deleted file mode 100644 index 52817e64d48..00000000000 --- a/components/safetynet/java_sources.gni +++ /dev/null @@ -1 +0,0 @@ -brave_rewards_java_sources = [ "../../brave/components/safetynet/java/org/chromium/chrome/browser/util/SafetyNetCheck.java" ] diff --git a/components/safetynet/safetynet_check.cc b/components/safetynet/safetynet_check.cc deleted file mode 100644 index cdb01ceeaf0..00000000000 --- a/components/safetynet/safetynet_check.cc +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/components/safetynet/safetynet_check.h" - -#include -#include - -#include "base/android/jni_android.h" -#include "base/android/jni_string.h" -#include "brave/components/safetynet/buildflags.h" -#include "brave/components/safetynet/jni_headers/SafetyNetCheck_jni.h" - -namespace safetynet_check { - -static base::android::ScopedJavaLocalRef JNI_SafetyNetCheck_GetApiKey( - JNIEnv* env) { - return base::android::ConvertUTF8ToJavaString(env, - BUILDFLAG(SAFETYNET_API_KEY)); -} - -SafetyNetCheck::SafetyNetCheck(SafetyNetCheckRunner* runner) { - JNIEnv* env = base::android::AttachCurrentThread(); - java_obj_.Reset(env, Java_SafetyNetCheck_create(env, - reinterpret_cast(this)).obj()); - runner_ = runner; -} - -SafetyNetCheck::~SafetyNetCheck() { - Java_SafetyNetCheck_destroy(base::android::AttachCurrentThread(), java_obj_); -} - -bool SafetyNetCheck::clientAttestation(const std::string& nonce, - ClientAttestationCallback attest_callback, - const bool perform_attestation_on_client) { - attest_callback_ = std::move(attest_callback); - JNIEnv* env = base::android::AttachCurrentThread(); - base::android::ScopedJavaLocalRef jnonce = - base::android::ConvertUTF8ToJavaString(env, nonce); - base::android::ScopedJavaLocalRef japiKey = - base::android::ConvertUTF8ToJavaString(env, BUILDFLAG(SAFETYNET_API_KEY)); - return Java_SafetyNetCheck_clientAttestation(env, java_obj_, jnonce, - japiKey, perform_attestation_on_client); -} - -void SafetyNetCheck::ClientAttestationResult( - JNIEnv* env, - jboolean jtoken_received, - const base::android::JavaParamRef& jresult_string, - jboolean jattestation_passed) { - bool token_received = jtoken_received; - bool attestation_passed = jattestation_passed; - std::string result_string = base::android::ConvertJavaStringToUTF8(env, - jresult_string); - std::move(attest_callback_) - .Run(token_received, result_string, attestation_passed); - if (runner_ != nullptr) { - runner_->jobFinished(this); - } -} - -SafetyNetCheckRunner::SafetyNetCheckRunner() { -} - -SafetyNetCheckRunner::~SafetyNetCheckRunner() { -} - -void SafetyNetCheckRunner::performSafetynetCheck(const std::string& nonce, - ClientAttestationCallback attest_callback, - const bool perform_attestation_on_client) { - jobs_.push_back(std::make_unique(this)); - if (!jobs_.back()->clientAttestation(nonce, std::move(attest_callback), - perform_attestation_on_client)) { - std::move(jobs_.back()->attest_callback_).Run(false, "", false); - jobFinished(jobs_.back().get()); - } -} - -void SafetyNetCheckRunner::jobFinished(SafetyNetCheck* finished_job) { - auto it = find_if(jobs_.begin(), jobs_.end(), - [finished_job] (const std::unique_ptr& job) { - return static_cast(job.get() == finished_job); - }); - CHECK(it != jobs_.end()) - << "SafetyNetCheck code is obsolete and should not be called anymore"; - jobs_.erase(it); -} - -} // namespace safetynet_check diff --git a/components/safetynet/safetynet_check.h b/components/safetynet/safetynet_check.h deleted file mode 100644 index ff4ba888ed6..00000000000 --- a/components/safetynet/safetynet_check.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BRAVE_COMPONENTS_SAFETYNET_SAFETYNET_CHECK_H_ -#define BRAVE_COMPONENTS_SAFETYNET_SAFETYNET_CHECK_H_ - -#include -#include -#include -#include - -#include "base/android/scoped_java_ref.h" -#include "base/memory/raw_ptr.h" -#include "net/base/completion_once_callback.h" - -namespace safetynet_check { - -class SafetyNetCheckRunner; -using ClientAttestationCallback = - base::OnceCallback; - -class SafetyNetCheck { - public: - explicit SafetyNetCheck(SafetyNetCheckRunner* runner); - SafetyNetCheck(const SafetyNetCheck&) = delete; - SafetyNetCheck& operator=(const SafetyNetCheck&) = delete; - ~SafetyNetCheck(); - - // Performs client attestation, called from C++ - bool clientAttestation(const std::string& nonce, - ClientAttestationCallback attest_callback, - const bool perform_attestation_on_client); - // Callback returns client attestation final result, called from Java - void ClientAttestationResult( - JNIEnv* env, - jboolean token_received, - const base::android::JavaParamRef& jresult_string, - jboolean attestation_passed); - friend class SafetyNetCheckRunner; - private: - base::android::ScopedJavaGlobalRef java_obj_; - ClientAttestationCallback attest_callback_; - raw_ptr runner_ = nullptr; -}; - -class SafetyNetCheckRunner { - public: - SafetyNetCheckRunner(); - SafetyNetCheckRunner(const SafetyNetCheckRunner&) = delete; - SafetyNetCheckRunner& operator=(const SafetyNetCheckRunner&) = delete; - ~SafetyNetCheckRunner(); - - void performSafetynetCheck(const std::string& nonce, - ClientAttestationCallback attest_callback, - const bool perform_attestation_on_client = false); - void jobFinished(SafetyNetCheck* finished_job); - private: - std::vector> jobs_; -}; - -} // namespace safetynet_check - -#endif // BRAVE_COMPONENTS_SAFETYNET_SAFETYNET_CHECK_H_