]> xenbits.xensource.com Git - xcp/xen-api-libs.git/commitdiff
Minor clean-up in the UUID module.
authorMagnus Therning <magnus.therning@citrix.com>
Tue, 12 Oct 2010 11:06:56 +0000 (12:06 +0100)
committerMagnus Therning <magnus.therning@citrix.com>
Tue, 12 Oct 2010 11:06:56 +0000 (12:06 +0100)
Signed-off-by: Magnus Therning <magnus.therning@citrix.com>
uuid/uuid.ml
uuid/uuid.mli

index 83c84f48ad5fe1af7d6c8601f82b89236d74cac6..116ffd23b3403114aa336c9cee5e0dffcb41d20f 100644 (file)
@@ -11,9 +11,8 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
  *)
-(** Type-safe UUIDs. *)
 
-(** Internally, a UUID is simply a string. *)
+(* Internally, a UUID is simply a string. *)
 type 'a t = string
 
 type cookie = string
@@ -31,7 +30,7 @@ let string_of_cookie s = s
 
 let cookie_of_string s = s
 
-(** FIXME: using /dev/random is too slow but using /dev/urandom is too
+(* FIXME: using /dev/random is too slow but using /dev/urandom is too
     deterministic. *)
 let dev_random = "/dev/urandom"
 
@@ -51,30 +50,11 @@ let uuid_of_int_array uuid =
     uuid.(6) uuid.(7) uuid.(8) uuid.(9) uuid.(10) uuid.(11)
     uuid.(12) uuid.(13) uuid.(14) uuid.(15)
 
-(** Return a new random UUID *)
 let make_uuid() = uuid_of_int_array (read_random 16)
 
-(** Return a new random, big UUID (hopefully big and random enough to be
-    unguessable) *)
 let make_cookie() =
   let bytes = Array.to_list (read_random 64) in
   String.concat "" (List.map (Printf.sprintf "%1x") bytes)
-(*
-  let hexencode x = 
-    let nibble x =
-      char_of_int (if x < 10 
-                  then int_of_char '0' + x
-                  else int_of_char 'a' + (x - 10)) in
-    let result = String.make (String.length x * 2) ' ' in
-    for i = 0 to String.length x - 1 do
-      let byte = int_of_char x.[i] in
-      result.[i * 2 + 0] <- nibble((byte lsr 4) land 15);
-      result.[i * 2 + 1] <- nibble((byte lsr 0) land 15);
-    done;
-    result in
-  let n = 64 in
-  hexencode (String.concat "" (List.map (fun x -> String.make 1 (char_of_int x)) (Array.to_list (read_n_random_bytes n))))
-*)
 
 let int_array_of_uuid s =
   try
index 7199a85a9e047b996df3825e8e3dd1260d2b0dd3..51859485682e29b51c40423ac175757d17134a58 100644 (file)
  *)
 (** Type-safe UUIDs.
     Probably need to refactor this; UUIDs are used in two places:
-    1. to uniquely name things across the cluster
-    2. as secure session IDs
+    + to uniquely name things across the cluster
+    + as secure session IDs
+
     There is the additional constraint that current Xen tools use 
     a particular format of UUID (the 16 byte variety generated by fresh ())
+
+       Also, cookies aren't UUIDs and should be put somewhere else.
 *)
 
-(** A 128-bit UUID referencing a value of type 'a. *)
+(** A 128-bit UUID.  Using phantom types ('a) to achieve the requires type-safety. *)
 type 'a t
 
-(** A 512-bit UUID. *)
-type cookie
-
-(** Create a fresh (unique!) UUID *)
+(** Create a fresh UUID *)
 val make_uuid : unit -> 'a t
 
-(** Create a fresh secure (bigger and hopefully unguessable) UUID *)
-val make_cookie : unit -> cookie
-
-(** Create a type-safe UUID. *)
+(** Create a UUID from a string. *)
 val of_string : string -> 'a t
 
-(** Marshal a UUID to a (type-unsafe) string. *)
+(** Marshal a UUID to a string. *)
 val to_string : 'a t -> string
 
+(** A null UUID, as if such a thing actually existed.  It turns out to be
+ * useful though. *)
 val null : 'a t
 
-(* deprecated alias for previous one *)
+(** Deprecated alias for {! Uuid.of_string} *)
 val uuid_of_string : string -> 'a t
-val string_of_uuid : 'a t -> string
 
-val cookie_of_string : string -> cookie
-
-val string_of_cookie : cookie -> string
+(** Deprecated alias for {! Uuid.to_string} *)
+val string_of_uuid : 'a t -> string
 
+(** Convert an array to a UUID. *)
 val uuid_of_int_array : int array -> 'a t
 
+(** Convert a UUID to an array. *)
 val int_array_of_uuid : 'a t -> int array
 
-(* check if a string is a uuid *)
+(** Check whether a string is a UUID. *)
 val is_uuid : string -> bool
+
+(** A 512-bit cookie. *)
+type cookie
+
+val make_cookie : unit -> cookie
+
+val cookie_of_string : string -> cookie
+
+val string_of_cookie : cookie -> string