mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-06-12 21:27:41 +02:00
Add zipadjust JNI code
This commit is contained in:
@ -30,7 +30,6 @@ import com.topjohnwu.magisk.utils.ZipUtils;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.List;
|
||||
|
||||
@ -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
|
||||
ZipUtils.removeTopFolder(mContext.getContentResolver().openInputStream(uri), outBuffer);
|
||||
inBuffer = new ByteArrayInputStream(outBuffer.toByteArray().clone());
|
||||
inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
|
||||
outBuffer.reset();
|
||||
|
||||
// Then sign the zip for the first time
|
||||
ZipUtils.signZip(mContext, inBuffer, outBuffer, false);
|
||||
inBuffer = new ByteArrayInputStream(outBuffer.toByteArray().clone());
|
||||
outBuffer.reset();
|
||||
|
||||
// ZipAdjust to be placed here
|
||||
// Call JNI for zipadjust...
|
||||
// Call zipadjust through JNI
|
||||
inBuffer = new ByteArrayInputStream(ZipUtils.zipAdjust(outBuffer.toByteArray(), outBuffer.size()));
|
||||
outBuffer.reset();
|
||||
|
||||
// Finally, sign the whole zip file again
|
||||
ZipUtils.signZip(mContext, inBuffer, outBuffer, true);
|
||||
|
@ -23,7 +23,6 @@ import org.spongycastle.util.encoders.Base64;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilterOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -74,6 +73,14 @@ public class ZipUtils {
|
||||
private static final int USE_SHA1 = 1;
|
||||
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) {
|
||||
try {
|
||||
JarInputStream source = new JarInputStream(in);
|
||||
@ -106,8 +113,6 @@ public class ZipUtils {
|
||||
|
||||
public static void signZip(Context context, InputStream inputStream,
|
||||
OutputStream outputStream, boolean signWholeFile) {
|
||||
sBouncyCastleProvider = new BouncyCastleProvider();
|
||||
Security.insertProviderAt(sBouncyCastleProvider, 1);
|
||||
JarMap inputJar;
|
||||
int hashes = 0;
|
||||
try {
|
||||
|
Reference in New Issue
Block a user