Skip to content

Commit b469710

Browse files
committed
Add native entropy for JVM
Collect some JVM statistics.
1 parent 5cabd28 commit b469710

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/jvmMain/kotlin/fr/acinq/lightning/utils/SecureRandomJvm.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.acinq.lightning.utils
22

3+
import java.lang.management.ManagementFactory
34
import java.security.SecureRandom
45
import kotlin.random.Random
56

@@ -30,11 +31,25 @@ class SecureRandomJvm : Random() {
3031
actual fun Random.Default.secure(): Random = SecureRandomJvm()
3132

3233
actual fun runtimeEntropy(): ByteArray {
33-
val freeMemory = Runtime.getRuntime().freeMemory()
34-
val b = ByteArray(4)
35-
b.set(0, freeMemory.toByte())
36-
b.set(1, (freeMemory shr 8).toByte())
37-
b.set(2, (freeMemory shr 16).toByte())
38-
b.set(3, (freeMemory shr 24).toByte())
39-
return ByteArray(0)
34+
val memoryMXBean = ManagementFactory.getMemoryMXBean()
35+
val runtimeMXBean = ManagementFactory.getRuntimeMXBean()
36+
val threadMXBean = ManagementFactory.getThreadMXBean()
37+
38+
fun toBytes(l: Long): List<Byte> {
39+
return buildList {
40+
add(l.toByte())
41+
add((l shr 8).toByte())
42+
add((l shr 16).toByte())
43+
add((l shr 24).toByte())
44+
}
45+
}
46+
47+
return toBytes(memoryMXBean.getHeapMemoryUsage().getUsed())
48+
.plus(toBytes(memoryMXBean.getNonHeapMemoryUsage().getUsed()))
49+
.plus(toBytes(runtimeMXBean.getPid()))
50+
.plus(toBytes(runtimeMXBean.getUptime()))
51+
.plus(toBytes(threadMXBean.getCurrentThreadCpuTime()))
52+
.plus(toBytes(threadMXBean.getCurrentThreadUserTime()))
53+
.plus(toBytes(threadMXBean.getPeakThreadCount().toLong()))
54+
.toByteArray()
4055
}

0 commit comments

Comments
 (0)