summaryrefslogtreecommitdiff
path: root/main/src/main/java/de/blinkt/openvpn/core/LogItem.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/main/java/de/blinkt/openvpn/core/LogItem.java')
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/LogItem.java46
1 files changed, 39 insertions, 7 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/core/LogItem.java b/main/src/main/java/de/blinkt/openvpn/core/LogItem.java
index c61cbc44..65714c43 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/LogItem.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/LogItem.java
@@ -13,11 +13,14 @@ import android.content.pm.Signature;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Array;
import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
@@ -26,7 +29,9 @@ import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.FormatFlagsConversionMismatchException;
import java.util.Locale;
+import java.util.MissingFormatArgumentException;
import java.util.UnknownFormatConversionException;
+import java.util.Vector;
import de.blinkt.openvpn.R;
@@ -47,6 +52,14 @@ public class LogItem implements Parcelable {
mArgs = args;
}
+ public LogItem(VpnStatus.LogLevel level, int verblevel, String message, long eventLogTime) {
+ mMessage = message;
+ mLevel = level;
+ mVerbosityLevel = verblevel;
+ logtime = eventLogTime;
+ }
+
+
public LogItem(VpnStatus.LogLevel level, int verblevel, String message) {
mMessage = message;
mLevel = level;
@@ -84,8 +97,6 @@ public class LogItem implements Parcelable {
other.mLevel.equals(mLevel)) &&
mVerbosityLevel == other.mVerbosityLevel &&
logtime == other.logtime;
-
-
}
public byte[] getMarschaledBytes() throws UnsupportedEncodingException, BufferOverflowException {
@@ -195,7 +206,7 @@ public class LogItem implements Parcelable {
}
private void marschalString(String str, ByteBuffer bb) throws UnsupportedEncodingException {
- byte[] utf8bytes = str.getBytes("UTF-8");
+ byte[] utf8bytes = str.getBytes(StandardCharsets.UTF_8);
bb.putInt(utf8bytes.length);
bb.put(utf8bytes);
}
@@ -204,7 +215,7 @@ public class LogItem implements Parcelable {
int len = bb.getInt();
byte[] utf8bytes = new byte[len];
bb.get(utf8bytes);
- return new String(utf8bytes, "UTF-8");
+ return new String(utf8bytes, StandardCharsets.UTF_8);
}
@@ -240,6 +251,11 @@ public class LogItem implements Parcelable {
mMessage = msg;
}
+ public LogItem(VpnStatus.LogLevel loglevel, String msg, long logEventTime) {
+ mLevel = loglevel;
+ mMessage = msg;
+ logtime = logEventTime;
+ }
public LogItem(VpnStatus.LogLevel loglevel, int ressourceId) {
mRessourceId = ressourceId;
@@ -258,7 +274,11 @@ public class LogItem implements Parcelable {
if (mArgs == null)
return c.getString(mRessourceId);
else
- return c.getString(mRessourceId, mArgs);
+ try {
+ return c.getString(mRessourceId, mArgs);
+ } catch (MissingFormatArgumentException ie) {
+ return "ERROR MISSING ARGUMENT(" + ie.getMessage() + "): " + getString(null);
+ }
} catch (Resources.NotFoundException re) {
return getString(null);
}
@@ -324,10 +344,15 @@ public class LogItem implements Parcelable {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(raw.toByteArray()));
MessageDigest md = MessageDigest.getInstance("SHA-1");
+ MessageDigest mdsha256 = MessageDigest.getInstance("SHA-256");
+
byte[] der = cert.getEncoded();
md.update(der);
byte[] digest = md.digest();
+ mdsha256.update(der);
+ byte[] digestSha256 = mdsha256.digest();
+
if (Arrays.equals(digest, VpnStatus.officalkey))
apksign = c.getString(R.string.official_build);
else if (Arrays.equals(digest, VpnStatus.officaldebugkey))
@@ -336,8 +361,15 @@ public class LogItem implements Parcelable {
apksign = "amazon version";
else if (Arrays.equals(digest, VpnStatus.fdroidkey))
apksign = "F-Droid built and signed version";
- else
- apksign = c.getString(R.string.built_by, cert.getSubjectX500Principal().getName());
+ else if (Arrays.equals(digestSha256, VpnStatus.officialO2Key))
+ apksign = c.getString(R.string.official_o2build);
+ else {
+ Vector<String> hexnums = new Vector<>();
+ for (byte b: digestSha256) {
+ hexnums.add(String.format(Locale.US, "%02x", b));
+ }
+ apksign = c.getString(R.string.built_by, cert.getSubjectX500Principal().getName(), TextUtils.join(":", hexnums));
+ }
PackageInfo packageinfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0);
version = packageinfo.versionName;