Skip to content

Commit d34a23f

Browse files
authored
Signature verification logic (#3924)
1 parent 98febe6 commit d34a23f

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

Ports/Android/src/com/codename1/impl/android/CodenameOneActivity.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import com.codename1.ui.Toolbar;
4646
import com.codename1.ui.events.ActionEvent;
4747

48+
import java.util.Arrays;
49+
import java.util.List;
4850
import java.util.Vector;
4951

5052
public class CodenameOneActivity extends Activity {
@@ -110,7 +112,33 @@ protected void onResume() {
110112
billingSupport.consumeAndAcknowlegePurchases();
111113
}
112114
background = false;
115+
116+
/*VERIFY-CODE-START
117+
verifySignature("EXPECTED_SIGNATURE_VALUE");
118+
VERIFY-CODE-END*/
119+
}
120+
121+
/*VERIFY-CODE-START
122+
private void verifySignature(String expectedSignature) {
123+
try {
124+
String[] split = expectedSignature.split(",");
125+
List<String> splitString = Arrays.asList(split);
126+
android.content.pm.PackageInfo packageInfo =
127+
getPackageManager().getPackageInfo(getPackageName(),
128+
PackageManager.GET_SIGNATURES);
129+
for (android.content.pm.Signature signature : packageInfo.signatures) {
130+
java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA");
131+
md.update(signature.toByteArray());
132+
String currentSignature = android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT);
133+
if (!splitString.contains(currentSignature)) {
134+
throw new RuntimeException("App integrity check failed for: " + currentSignature);
135+
}
136+
}
137+
} catch (Exception e) {
138+
throw new RuntimeException(e);
139+
}
113140
}
141+
VERIFY-CODE-END*/
114142

115143
/**
116144
* Overriden by subclasses to return true if billing is supported on this

0 commit comments

Comments
 (0)