1
1
package fr.acinq.lightning.utils
2
2
3
+ import java.lang.management.ManagementFactory
3
4
import java.security.SecureRandom
4
5
import kotlin.random.Random
5
6
@@ -30,11 +31,25 @@ class SecureRandomJvm : Random() {
30
31
actual fun Random.Default.secure (): Random = SecureRandomJvm ()
31
32
32
33
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()
40
55
}
0 commit comments