kernel: Updated APK signature support, removed redundant definitions and adjusted indexing
Co-authored-by: rsuntk <rsuntk@yukiprjkt.my.id> Co-authored-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com>
This commit is contained in:
@@ -70,12 +70,15 @@ endif
|
|||||||
ccflags-y += -DKSU_VERSION=$(KSU_VERSION)
|
ccflags-y += -DKSU_VERSION=$(KSU_VERSION)
|
||||||
ccflags-y += -DKSU_VERSION_FULL=\"$(KSU_VERSION_FULL)\"
|
ccflags-y += -DKSU_VERSION_FULL=\"$(KSU_VERSION_FULL)\"
|
||||||
|
|
||||||
ifndef KSU_EXPECTED_SIZE
|
# Custom Signs
|
||||||
KSU_EXPECTED_SIZE := 0x35c
|
ifdef KSU_EXPECTED_SIZE
|
||||||
|
ccflags-y += -DEXPECTED_SIZE=$(KSU_EXPECTED_SIZE)
|
||||||
|
$(info -- Custom KernelSU Manager signature size: $(KSU_EXPECTED_SIZE))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef KSU_EXPECTED_HASH
|
ifdef KSU_EXPECTED_HASH
|
||||||
KSU_EXPECTED_HASH := 947ae944f3de4ed4c21a7e4f7953ecf351bfa2b36239da37a34111ad29993eef
|
ccflags-y += -DEXPECTED_HASH=\"$(KSU_EXPECTED_HASH)\"
|
||||||
|
$(info -- Custom KernelSU Manager signature hash: $(KSU_EXPECTED_HASH))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef KSU_MANAGER_PACKAGE
|
ifdef KSU_MANAGER_PACKAGE
|
||||||
@@ -83,9 +86,8 @@ ccflags-y += -DKSU_MANAGER_PACKAGE=\"$(KSU_MANAGER_PACKAGE)\"
|
|||||||
$(info -- SukiSU Manager package name: $(KSU_MANAGER_PACKAGE))
|
$(info -- SukiSU Manager package name: $(KSU_MANAGER_PACKAGE))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(info -- SukiSU Manager signature size: $(KSU_EXPECTED_SIZE))
|
|
||||||
$(info -- SukiSU Manager signature hash: $(KSU_EXPECTED_HASH))
|
|
||||||
$(info -- Supported Unofficial Manager: 5ec1cff (GKI) ShirkNeko udochina (GKI and KPM))
|
$(info -- Supported Unofficial Manager: 5ec1cff (GKI) ShirkNeko udochina (GKI and KPM))
|
||||||
|
|
||||||
KERNEL_VERSION := $(VERSION).$(PATCHLEVEL)
|
KERNEL_VERSION := $(VERSION).$(PATCHLEVEL)
|
||||||
KERNEL_TYPE := Non-GKI
|
KERNEL_TYPE := Non-GKI
|
||||||
# Check for GKI 2.0 (5.10+ or 6.x+)
|
# Check for GKI 2.0 (5.10+ or 6.x+)
|
||||||
@@ -107,10 +109,6 @@ else
|
|||||||
$(info -- KPM is disabled)
|
$(info -- KPM is disabled)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
ccflags-y += -DEXPECTED_SIZE=$(KSU_EXPECTED_SIZE)
|
|
||||||
ccflags-y += -DEXPECTED_HASH=\"$(KSU_EXPECTED_HASH)\"
|
|
||||||
|
|
||||||
ccflags-y += -Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-int-conversion -Wno-gcc-compat
|
ccflags-y += -Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-int-conversion -Wno-gcc-compat
|
||||||
ccflags-y += -Wno-declaration-after-statement -Wno-unused-function
|
ccflags-y += -Wno-declaration-after-statement -Wno-unused-function
|
||||||
|
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ int ksu_get_active_managers(struct manager_list_info *info)
|
|||||||
|
|
||||||
if (ksu_manager_uid != KSU_INVALID_UID && count < 2) {
|
if (ksu_manager_uid != KSU_INVALID_UID && count < 2) {
|
||||||
info->managers[count].uid = ksu_manager_uid;
|
info->managers[count].uid = ksu_manager_uid;
|
||||||
info->managers[count].signature_index = 1;
|
info->managers[count].signature_index = 0;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,9 +490,11 @@ static struct apk_sign_key {
|
|||||||
unsigned size;
|
unsigned size;
|
||||||
const char *sha256;
|
const char *sha256;
|
||||||
} apk_sign_keys[] = {
|
} apk_sign_keys[] = {
|
||||||
{EXPECTED_SIZE, EXPECTED_HASH},
|
|
||||||
{EXPECTED_SIZE_SHIRKNEKO, EXPECTED_HASH_SHIRKNEKO}, // ShirkNeko/SukiSU
|
{EXPECTED_SIZE_SHIRKNEKO, EXPECTED_HASH_SHIRKNEKO}, // ShirkNeko/SukiSU
|
||||||
{EXPECTED_SIZE_OTHER, EXPECTED_HASH_OTHER}, // Dynamic Sign
|
{EXPECTED_SIZE_OTHER, EXPECTED_HASH_OTHER}, // Dynamic Sign
|
||||||
|
#ifdef EXPECTED_SIZE
|
||||||
|
{EXPECTED_SIZE, EXPECTED_HASH}, // Custom
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sdesc *init_sdesc(struct crypto_shash *alg)
|
static struct sdesc *init_sdesc(struct crypto_shash *alg)
|
||||||
@@ -620,7 +622,7 @@ static int verify_signature_block(struct file *fp, u32 *size4, loff_t *pos, u32
|
|||||||
for (i = 0; i < ARRAY_SIZE(apk_sign_keys); i++) {
|
for (i = 0; i < ARRAY_SIZE(apk_sign_keys); i++) {
|
||||||
sign_key = apk_sign_keys[i];
|
sign_key = apk_sign_keys[i];
|
||||||
|
|
||||||
if (i == 2) {
|
if (i == 1) { // Dynamic Sign indexing
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
spin_lock_irqsave(&dynamic_sign_lock, flags);
|
spin_lock_irqsave(&dynamic_sign_lock, flags);
|
||||||
if (dynamic_sign.is_set) {
|
if (dynamic_sign.is_set) {
|
||||||
@@ -796,8 +798,8 @@ clean:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (check_multi_manager) {
|
if (check_multi_manager) {
|
||||||
// 1: ShirkNeko/SukiSU, 2: Dynamic Sign
|
// 0: ShirkNeko/SukiSU, 1: Dynamic Sign
|
||||||
if (matched_index == 1 || matched_index == 2) {
|
if (matched_index == 0 || matched_index == 1) {
|
||||||
pr_info("Multi-manager APK detected (dynamic_sign enabled): signature_index=%d\n", matched_index);
|
pr_info("Multi-manager APK detected (dynamic_sign enabled): signature_index=%d\n", matched_index);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -737,9 +737,9 @@ private fun InfoCard(
|
|||||||
append(" ")
|
append(" ")
|
||||||
append(
|
append(
|
||||||
when (signatureIndex) {
|
when (signatureIndex) {
|
||||||
1 -> "(${stringResource(R.string.default_signature)})"
|
0 -> "(${stringResource(R.string.default_signature)})"
|
||||||
2 -> "(${stringResource(R.string.dynamic_signature)})"
|
1 -> "(${stringResource(R.string.dynamic_signature)})"
|
||||||
else -> if (signatureIndex >= 0) "(${
|
else -> if (signatureIndex >= 2) "(${
|
||||||
stringResource(
|
stringResource(
|
||||||
R.string.signature_index,
|
R.string.signature_index,
|
||||||
signatureIndex
|
signatureIndex
|
||||||
|
|||||||
Reference in New Issue
Block a user