# HG changeset patch # User Magnus Therning # Date 1280415242 -3600 # Node ID 45735e09188a2445ff0e8c9fd5dbf339969a8c90 # Parent 9cfe318cc350e0efbea7e652eedc5aeb4116e4f3 Minor clean-up. diff -r 9cfe318cc350 -r 45735e09188a uuid/uuid.ml --- a/uuid/uuid.ml Thu Jul 29 11:37:29 2010 +0100 +++ b/uuid/uuid.ml Thu Jul 29 15:54:02 2010 +0100 @@ -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 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 @@ 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 diff -r 9cfe318cc350 -r 45735e09188a uuid/uuid.mli --- a/uuid/uuid.mli Thu Jul 29 11:37:29 2010 +0100 +++ b/uuid/uuid.mli Thu Jul 29 15:54:02 2010 +0100 @@ -13,23 +13,20 @@ *) (** 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. *) 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. *) val of_string : string -> 'a t @@ -37,19 +34,27 @@ (** Marshal a UUID to a (type-unsafe) 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 + +(* deprecated alias for {! Uuid.to_string} *) val string_of_uuid : 'a t -> string - -val cookie_of_string : string -> cookie - -val string_of_cookie : cookie -> string val uuid_of_int_array : int array -> 'a t val int_array_of_uuid : 'a t -> int array -(* check if 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