11package fr.acinq.lightning.utils
22
3+ import java.lang.management.ManagementFactory
34import java.security.SecureRandom
45import kotlin.random.Random
56
@@ -30,11 +31,25 @@ class SecureRandomJvm : Random() {
3031actual fun Random.Default.secure (): Random = SecureRandomJvm ()
3132
3233actual 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