Skip to content

Commit 8d88a2a

Browse files
Optimize Long encryption
1 parent a675955 commit 8d88a2a

File tree

2 files changed

+7
-10
lines changed

2 files changed

+7
-10
lines changed

grunt-main/src/main/kotlin/net/spartanb312/grunt/process/transformers/encrypt/number/NumberEncryptorArrayed.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ object NumberEncryptorArrayed : NumberEncryptor {
8282
+values.size.toInsnNode()
8383
NEWARRAY(Opcodes.T_LONG)
8484
PUTSTATIC(owner.name, field.name, field.desc)
85-
var localKey = Random.nextLong()
85+
val localKey = Random.nextLong()
8686
val arrayInitMethod = method(
8787
(if (owner.isInterface) PUBLIC else PRIVATE) + STATIC,
8888
getRandomString(16),

grunt-main/src/main/kotlin/net/spartanb312/grunt/process/transformers/encrypt/number/NumberEncryptorClassic.kt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,13 @@ object NumberEncryptorClassic : NumberEncryptor {
5959
}
6060
}
6161

62-
// TODO: VERY SLOW via parse string, using 2 int with bit operation instead
6362
fun encrypt(value: Long): InsnList = instructions {
64-
val key = Random.nextLong()
65-
val unsignedString = java.lang.Long.toUnsignedString(key, 32)
66-
LDC(unsignedString)
67-
INT(32)
68-
INVOKESTATIC("java/lang/Long", "parseUnsignedLong", "(Ljava/lang/String;I)J")
69-
val obfuscated = key xor value
70-
+obfuscated.toInsnNode()
71-
LXOR
63+
val mask = Random.nextLong()
64+
val first = Random.nextLong() and mask or value
65+
val second = Random.nextLong() and mask.inv() or value
66+
LDC(first)
67+
LDC(second)
68+
LAND
7269
}
7370

7471
}

0 commit comments

Comments
 (0)