Commit 403e30fe authored by topjohnwu's avatar topjohnwu

Add zipadjust JNI code

parent f58c73b7
...@@ -5,3 +5,4 @@ ...@@ -5,3 +5,4 @@
/build /build
app/app-release.apk app/app-release.apk
*.hprof *.hprof
app/.externalNativeBuild/
cmake_minimum_required(VERSION 3.6)
add_library(zipadjust SHARED src/main/jni/zipadjust.c)
find_library(libz z)
find_library(liblog log)
target_link_libraries(zipadjust ${libz} ${liblog})
\ No newline at end of file
...@@ -13,6 +13,11 @@ android { ...@@ -13,6 +13,11 @@ android {
jackOptions { jackOptions {
enabled true enabled true
} }
ndk {
moduleName 'zipadjust'
// abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
abiFilters 'x86', 'x86_64', 'armeabi'
}
} }
buildTypes { buildTypes {
...@@ -27,6 +32,11 @@ android { ...@@ -27,6 +32,11 @@ android {
dexOptions { dexOptions {
preDexLibraries = false preDexLibraries = false
} }
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
} }
repositories { repositories {
jcenter() jcenter()
......
...@@ -30,7 +30,6 @@ import com.topjohnwu.magisk.utils.ZipUtils; ...@@ -30,7 +30,6 @@ import com.topjohnwu.magisk.utils.ZipUtils;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.List; import java.util.List;
...@@ -113,16 +112,15 @@ public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder> ...@@ -113,16 +112,15 @@ public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder>
// First remove top folder (the folder with the repo name) in Github source zip // First remove top folder (the folder with the repo name) in Github source zip
ZipUtils.removeTopFolder(mContext.getContentResolver().openInputStream(uri), outBuffer); ZipUtils.removeTopFolder(mContext.getContentResolver().openInputStream(uri), outBuffer);
inBuffer = new ByteArrayInputStream(outBuffer.toByteArray().clone()); inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
outBuffer.reset(); outBuffer.reset();
// Then sign the zip for the first time // Then sign the zip for the first time
ZipUtils.signZip(mContext, inBuffer, outBuffer, false); ZipUtils.signZip(mContext, inBuffer, outBuffer, false);
inBuffer = new ByteArrayInputStream(outBuffer.toByteArray().clone());
outBuffer.reset();
// ZipAdjust to be placed here // Call zipadjust through JNI
// Call JNI for zipadjust... inBuffer = new ByteArrayInputStream(ZipUtils.zipAdjust(outBuffer.toByteArray(), outBuffer.size()));
outBuffer.reset();
// Finally, sign the whole zip file again // Finally, sign the whole zip file again
ZipUtils.signZip(mContext, inBuffer, outBuffer, true); ZipUtils.signZip(mContext, inBuffer, outBuffer, true);
......
...@@ -23,7 +23,6 @@ import org.spongycastle.util.encoders.Base64; ...@@ -23,7 +23,6 @@ import org.spongycastle.util.encoders.Base64;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FilterOutputStream; import java.io.FilterOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -74,6 +73,14 @@ public class ZipUtils { ...@@ -74,6 +73,14 @@ public class ZipUtils {
private static final int USE_SHA1 = 1; private static final int USE_SHA1 = 1;
private static final int USE_SHA256 = 2; private static final int USE_SHA256 = 2;
static {
System.loadLibrary("zipadjust");
sBouncyCastleProvider = new BouncyCastleProvider();
Security.insertProviderAt(sBouncyCastleProvider, 1);
}
public native static byte[] zipAdjust(byte[] bytes, int size);
public static void removeTopFolder(InputStream in, OutputStream out) { public static void removeTopFolder(InputStream in, OutputStream out) {
try { try {
JarInputStream source = new JarInputStream(in); JarInputStream source = new JarInputStream(in);
...@@ -106,8 +113,6 @@ public class ZipUtils { ...@@ -106,8 +113,6 @@ public class ZipUtils {
public static void signZip(Context context, InputStream inputStream, public static void signZip(Context context, InputStream inputStream,
OutputStream outputStream, boolean signWholeFile) { OutputStream outputStream, boolean signWholeFile) {
sBouncyCastleProvider = new BouncyCastleProvider();
Security.insertProviderAt(sBouncyCastleProvider, 1);
JarMap inputJar; JarMap inputJar;
int hashes = 0; int hashes = 0;
try { try {
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment