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