diff options
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.java | 46 |
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; |