Files
libmc/docs/Embedded-cryptography.md

3.0 KiB

Starting with version 0.2.0 (26.2-0.2.0), libmc includes a built-in cryptography implementation. It uses the JDK's built-in cryptographic APIs on the JVM platform and a pure-Kotlin implementation on kotlin-native platforms. However, due to a lack of low-level optimizations, performance results in encoding and decoding tests are significantly slower than JDK's built-in implementations

A simplified table below shows the benchmark results:

Algorithm Data Size (Bytes) libmc's Built-in (ops/s) JDK's Built-in (ops/s) Gap
AES-128-CFB8 Encrypt 32 112,554.27 1,527,235.11 ~13.6 times slower than JDK's built-in
1,024 2,976.95 49,842.94 ~16.7 times slower than JDK's built-in
65,536 45.04 773.46 ~17.2 times slower than JDK's built-in
AES-128-CFB8 Decrypt 32 115,031.69 1,515,218.15 ~13.2 times slower than JDK's built-in
1,024 2,925.74 49,868.55 ~17.0 times slower than JDK's built-in
65,536 48.47 777.11 ~16.0 times slower than JDK's built-in
RSA-1024 Encrypt 16 163.87 91,600.51 ~559 times slower than JDK's built-in
64 158.27 93,042.81 ~587 times slower than JDK's built-in
117 160.95 94,826.94 ~589 times slower than JDK's built-in
SHA-1 Hashing 64 2,134,974.72 11,609,497.92 ~5.4 times slower than JDK's built-in
1,024 259,804.80 1,856,575.14 ~7.1 times slower than JDK's built-in
65,536 4,485.95 32,132.67 ~7.2 times slower than JDK's built-in

Benchmark Environment:

  • CPU: AMD Ryzen 5 5500U (6 Cores / 12 Threads @ 2.10GHz)
  • RAM: 16GB DDR4 2667MHz
  • OS: Windows 11 64-bit
  • Runtime: Microsoft Build of OpenJDK 17.0.8, Kotlin 2.4.10 (MingwX64 & JVM)

Fortunately, except for AES-128-CFB8 (which requires continuous stream encryption/decryption during networking), the other operations (RSA & SHA-1) are only executed once during the initial server authentication phase

If you have optimized native algorithm implementations (via cinterop or other approaches), PRs are welcome