aboutsummaryrefslogtreecommitdiff
path: root/module/hnh/util/uuid.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/hnh/util/uuid.scm')
-rw-r--r--module/hnh/util/uuid.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/module/hnh/util/uuid.scm b/module/hnh/util/uuid.scm
new file mode 100644
index 00000000..68455243
--- /dev/null
+++ b/module/hnh/util/uuid.scm
@@ -0,0 +1,19 @@
+(define-module (hnh util uuid)
+ :use-module (ice-9 format)
+ :export (uuid uuid-v4))
+
+(define %seed (random-state-from-platform))
+
+(define (uuid-v4)
+ (define version 4)
+ (define variant #b10)
+ (format #f "~8'0x-~4'0x-~4'0x-~4'0x-~12'0x"
+ (random (ash 1 (* 4 8)) %seed)
+ (random (ash 1 (* 4 4)) %seed)
+ (logior (ash version (* 4 3))
+ (random (1- (ash 1 (* 4 3))) %seed))
+ (logior (ash variant (+ 2 (* 4 3)))
+ (random (ash 1 (+ 2 (* 4 3))) %seed))
+ (random (ash 1 (* 4 12)) %seed)))
+
+(define uuid uuid-v4)