diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:02:17 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:02:17 +0200 |
commit | b9203ee84953006547f4afd58f405874c87bf0dc (patch) | |
tree | 9e41f1533f120e9268e86658c52458630ffd718a /shared/ossp_uuid/uuid.3 | |
parent | 3.0 (diff) | |
download | FreeFileSync-b9203ee84953006547f4afd58f405874c87bf0dc.tar.gz FreeFileSync-b9203ee84953006547f4afd58f405874c87bf0dc.tar.bz2 FreeFileSync-b9203ee84953006547f4afd58f405874c87bf0dc.zip |
3.1
Diffstat (limited to 'shared/ossp_uuid/uuid.3')
-rw-r--r-- | shared/ossp_uuid/uuid.3 | 578 |
1 files changed, 578 insertions, 0 deletions
diff --git a/shared/ossp_uuid/uuid.3 b/shared/ossp_uuid/uuid.3 new file mode 100644 index 00000000..3116d73e --- /dev/null +++ b/shared/ossp_uuid/uuid.3 @@ -0,0 +1,578 @@ +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.07) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` +. ds C' +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title ".::uuid 3" +.TH .::uuid 3 "OSSP uuid 1.6.2" "04-Jul-2008" "Universally Unique Identifier" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +\&\fB\s-1OSSP\s0 uuid\fR \- \fBUniversally Unique Identifier\fR +.SH "VERSION" +.IX Header "VERSION" +\&\s-1OSSP\s0 uuid \s-11.6.2 (04-Jul-2008)\s0 +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fB\s-1OSSP\s0 uuid\fR is a \s-1ISO\-C:1999\s0 application programming interface (\s-1API\s0) and +corresponding command line interface (\s-1CLI\s0) for the generation of \s-1DCE\s0 +1.1, \s-1ISO/IEC\s0 11578:1996 and \s-1IETF\s0 \s-1RFC\-4122\s0 compliant \fIUniversally Unique +Identifier\fR (\s-1UUID\s0). It supports \s-1DCE\s0 1.1 variant UUIDs of version 1 (time +and node based), version 3 (name based, \s-1MD5\s0), version 4 (random number +based) and version 5 (name based, \s-1SHA\-1\s0). Additional \s-1API\s0 bindings are +provided for the languages \s-1ISO\-\*(C+:1998\s0, Perl:5 and \s-1PHP:4/5\s0. Optional +backward compatibility exists for the ISO-C \s-1DCE\-1\s0.1 and Perl Data::UUID +APIs. +.PP +UUIDs are 128 bit numbers which are intended to have a high likelihood +of uniqueness over space and time and are computationally difficult +to guess. They are globally unique identifiers which can be locally +generated without contacting a global registration authority. UUIDs +are intended as unique identifiers for both mass tagging objects +with an extremely short lifetime and to reliably identifying very +persistent objects across a network. +.PP +This is the ISO-C application programming interface (\s-1API\s0) of \fB\s-1OSSP\s0 uuid\fR. +.Sh "\s-1UUID\s0 Binary Representation" +.IX Subsection "UUID Binary Representation" +According to the \s-1DCE\s0 1.1, \s-1ISO/IEC\s0 11578:1996 and \s-1IETF\s0 \s-1RFC\-4122\s0 +standards, a \s-1DCE\s0 1.1 variant \s-1UUID\s0 is a 128 bit number defined out of 7 +fields, each field a multiple of an octet in size and stored in network +byte order: +.PP +.Vb 11 +\& [4] +\& version +\& \-\->| |<\-\- +\& | | +\& | | [16] +\& [32] [16] | |time_hi +\& time_low time_mid | _and_version +\& |<\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->||<\-\-\-\-\-\-\-\-\-\-\-\->||<\-\-\-\-\-\-\-\-\-\-\-\->| +\& | MSB || || | | +\& | / || || | | +\& |/ || || | | +\& +\& +\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-+~~ +\& | 15 || 14 || 13 || 12 || 11 || 10 |####9 || 8 | +\& | MSO || || || || || |#### || | +\& +\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-+~~ +\& 7654321076543210765432107654321076543210765432107654321076543210 +\& +\& ~~+\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-+ +\& ##* 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 | +\& ##* || || || || || || || LSO | +\& ~~+\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-++\-\-\-\-\-\-+ +\& 7654321076543210765432107654321076543210765432107654321076543210 +\& +\& | | || || /| +\& | | || || / | +\& | | || || LSB | +\& |<\-\-\-\->||<\-\-\-\->||<\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->| +\& |clk_seq clk_seq node +\& |_hi_res _low [48] +\& |[5\-6] [8] +\& | | +\& \-\->| |<\-\- +\& variant +\& [2\-3] +.Ve +.PP +An example of a \s-1UUID\s0 binary representation is the octet stream \f(CW\*(C`0xF8 +0x1D 0x4F 0xAE 0x7D 0xEC 0x11 0xD0 0xA7 0x65 0x00 0xA0 0xC9 0x1E 0x6B +0xF6\*(C'\fR. The binary representation format is exactly what the \fB\s-1OSSP\s0 uuid\fR +\&\s-1API\s0 functions \fBuuid_import\fR() and \fBuuid_export\fR() deal with under +\&\f(CW\*(C`UUID_FMT_BIN\*(C'\fR. +.Sh "\s-1UUID\s0 \s-1ASCII\s0 String Representation" +.IX Subsection "UUID ASCII String Representation" +According to the \s-1DCE\s0 1.1, \s-1ISO/IEC\s0 11578:1996 and \s-1IETF\s0 \s-1RFC\-4122\s0 +standards, a \s-1DCE\s0 1.1 variant \s-1UUID\s0 is represented as an \s-1ASCII\s0 string +consisting of 8 hexadecimal digits followed by a hyphen, then three +groups of 4 hexadecimal digits each followed by a hyphen, then 12 +hexadecimal digits. Formally, the string representation is defined by +the following grammar: +.PP +.Vb 10 +\& uuid = <time_low> "\-" +\& <time_mid> "\-" +\& <time_high_and_version> "\-" +\& <clock_seq_high_and_reserved> +\& <clock_seq_low> "\-" +\& <node> +\& time_low = 4*<hex_octet> +\& time_mid = 2*<hex_octet> +\& time_high_and_version = 2*<hex_octet> +\& clock_seq_high_and_reserved = <hex_octet> +\& clock_seq_low = <hex_octet> +\& node = 6*<hex_octet> +\& hex_octet = <hex_digit> <hex_digit> +\& hex_digit = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" +\& |"a"|"b"|"c"|"d"|"e"|"f" +\& |"A"|"B"|"C"|"D"|"E"|"F" +.Ve +.PP +An example of a \s-1UUID\s0 string representation is the \s-1ASCII\s0 string +"\f(CW\*(C`f81d4fae\-7dec\-11d0\-a765\-00a0c91e6bf6\*(C'\fR". The string representation +format is exactly what the \fB\s-1OSSP\s0 uuid\fR \s-1API\s0 functions \fBuuid_import\fR() +and \fBuuid_export\fR() deal with under \f(CW\*(C`UUID_FMT_STR\*(C'\fR. +.PP +Notice: a corresponding \s-1URL\s0 can be generated out of a \s-1ASCII\s0 string +representation of an \s-1UUID\s0 by prefixing with "\f(CW\*(C`urn:uuid:\*(C'\fR\*(L" as in +\&\*(R"\f(CW\*(C`urn:uuid:f81d4fae\-7dec\-11d0\-a765\-00a0c91e6bf6\*(C'\fR". +.Sh "\s-1UUID\s0 Single Integer Value Representation" +.IX Subsection "UUID Single Integer Value Representation" +According to the \s-1ISO/IEC\s0 11578:1996 and ITU-T Rec. X.667 standards, a +\&\s-1DCE\s0 1.1 variant \s-1UUID\s0 can be also represented as a single integer value +consisting of a decimal number with up to 39 digits. +.PP +An example of a \s-1UUID\s0 single integer value representation is the decimal +number "\f(CW329800735698586629295641978511506172918\fR". The string +representation format is exactly what the \fB\s-1OSSP\s0 uuid\fR \s-1API\s0 functions +\&\fBuuid_import\fR() and \fBuuid_export\fR() deal with under \f(CW\*(C`UUID_FMT_SIV\*(C'\fR. +.PP +Notice: a corresponding \s-1ISO\s0 \s-1OID\s0 can be generated under the +\&\*(L"{\fIjoint\-iso\-itu\-t\fR\|(2) uuid(25)}\*(R" arc out of a single integer value +representation of a \s-1UUID\s0 by prefixing with "\f(CW2.25.\fR\*(L". An example \s-1OID\s0 +is \*(R"\f(CW2.25.329800735698586629295641978511506172918\fR\*(L". Additionally, +an \s-1URL\s0 can be generated by further prefixing with \*(R"\f(CW\*(C`urn:oid:\*(C'\fR\*(L" as in +\&\*(R"\f(CW\*(C`urn:oid:2.25.329800735698586629295641978511506172918\*(C'\fR". +.Sh "\s-1UUID\s0 Variants and Versions" +.IX Subsection "UUID Variants and Versions" +A \s-1UUID\s0 has a variant and version. The variant defines the layout of the +\&\s-1UUID\s0. The version defines the content of the \s-1UUID\s0. The \s-1UUID\s0 variant +supported in \fB\s-1OSSP\s0 uuid\fR is the \s-1DCE\s0 1.1 variant only. The \s-1DCE\s0 1.1 \s-1UUID\s0 +variant versions supported in \fB\s-1OSSP\s0 uuid\fR are: +.IP "\fBVersion 1\fR (time and node based)" 4 +.IX Item "Version 1 (time and node based)" +These are the classical UUIDs, created out of a 60\-bit system time, +a 14\-bit local clock sequence and 48\-bit system \s-1MAC\s0 address. The \s-1MAC\s0 +address can be either the real one of a physical network interface card +(\s-1NIC\s0) or a random multi-cast \s-1MAC\s0 address. Version 1 UUIDs are usually +used as one-time global unique identifiers. +.IP "\fBVersion 3\fR (name based, \s-1MD5\s0)" 4 +.IX Item "Version 3 (name based, MD5)" +These are UUIDs which are based on the 128\-bit \s-1MD5\s0 message digest of the +concatenation of a 128\-bit namespace \s-1UUID\s0 and a name string of arbitrary +length. Version 3 UUIDs are usually used for non-unique but repeatable +message digest identifiers. +.IP "\fBVersion 4\fR (random data based)" 4 +.IX Item "Version 4 (random data based)" +These are UUIDs which are based on just 128\-bit of random data. Version +4 UUIDs are usually used as one-time local unique identifiers. +.IP "\fBVersion 5\fR (name based, \s-1SHA\-1\s0)" 4 +.IX Item "Version 5 (name based, SHA-1)" +These are UUIDs which are based on the 160\-bit \s-1SHA\-1\s0 message digest of the +concatenation of a 128\-bit namespace \s-1UUID\s0 and a name string of arbitrary +length. Version 5 UUIDs are usually used for non-unique but repeatable +message digest identifiers. +.Sh "\s-1UUID\s0 Uniqueness" +.IX Subsection "UUID Uniqueness" +Version 1 UUIDs are guaranteed to be unique through combinations of +hardware addresses, time stamps and random seeds. There is a reference +in the \s-1UUID\s0 to the hardware (\s-1MAC\s0) address of the first network interface +card (\s-1NIC\s0) on the host which generated the \s-1UUID\s0 \*(-- this reference +is intended to ensure the \s-1UUID\s0 will be unique in space as the \s-1MAC\s0 +address of every network card is assigned by a single global authority +(\s-1IEEE\s0) and is guaranteed to be unique. The next component in a \s-1UUID\s0 +is a timestamp which, as clock always (should) move forward, will +be unique in time. Just in case some part of the above goes wrong +(the hardware address cannot be determined or the clock moved steps +backward), there is a random clock sequence component placed into the +\&\s-1UUID\s0 as a \*(L"catch-all\*(R" for uniqueness. +.PP +Version 3 and version 5 UUIDs are guaranteed to be inherently globally +unique if the combination of namespace and name used to generate them is +unique. +.PP +Version 4 UUIDs are not guaranteed to be globally unique, because they +are generated out of locally gathered pseudo-random numbers only. +Nevertheless there is still a high likelihood of uniqueness over space +and time and that they are computationally difficult to guess. +.Sh "Nil \s-1UUID\s0" +.IX Subsection "Nil UUID" +There is a special \fINil\fR \s-1UUID\s0 consisting of all octets set to zero in +the binary representation. It can be used as a special \s-1UUID\s0 value which does +not conflict with real UUIDs. +.SH "APPLICATION PROGRAMMING INTERFACE" +.IX Header "APPLICATION PROGRAMMING INTERFACE" +The ISO-C Application Programming Interface (\s-1API\s0) of \fB\s-1OSSP\s0 uuid\fR +consists of the following components. +.Sh "\s-1CONSTANTS\s0" +.IX Subsection "CONSTANTS" +The following constants are provided: +.IP "\fB\s-1UUID_VERSION\s0\fR" 4 +.IX Item "UUID_VERSION" +The hexadecimal encoded \fB\s-1OSSP\s0 uuid\fR version. This allows compile-time +checking of the \fB\s-1OSSP\s0 uuid\fR version. For run-time checking use +\&\fBuuid_version\fR() instead. +.Sp +The hexadecimal encoding for a version "$\fIv\fR.$\fIr\fR$\fIt\fR$\fIl\fR" is +calculated with the \fB\s-1GNU\s0 shtool\fR \fBversion\fR command and is (in +Perl-style for concise description) "sprintf('0x%x%02x%d%02x', $\fIv\fR, +$\fIr\fR, {qw(s 9 . 2 b 1 a 0)}\->{$\fIt\fR}, ($\fIt\fR eq 's' ? 99 : $\fIl\fR))\*(L", +i.e., the version 0.9.6 is encoded as \*(R"0x009206". +.IP "\fB\s-1UUID_LEN_BIN\s0\fR, \fB\s-1UUID_LEN_STR\s0\fR, \fB\s-1UUID_LEN_SIV\s0\fR" 4 +.IX Item "UUID_LEN_BIN, UUID_LEN_STR, UUID_LEN_SIV" +The number of octets of the \s-1UUID\s0 binary and string representations. +Notice that the lengths of the string representation (\fB\s-1UUID_LEN_STR\s0\fR) +and the lengths of the single integer value representation +(\fB\s-1UUID_LEN_SIV\s0\fR) does \fInot\fR include the necessary \f(CW\*(C`NUL\*(C'\fR termination +character. +.IP "\fB\s-1UUID_MAKE_V1\s0\fR, \fB\s-1UUID_MAKE_V3\s0\fR, \fB\s-1UUID_MAKE_V4\s0\fR, \fB\s-1UUID_MAKE_V5\s0\fR, \fB\s-1UUID_MAKE_MC\s0\fR" 4 +.IX Item "UUID_MAKE_V1, UUID_MAKE_V3, UUID_MAKE_V4, UUID_MAKE_V5, UUID_MAKE_MC" +The \fImode\fR bits for use with \fBuuid_make\fR(). The \fB\s-1UUID_MAKE_V\s0\fR\fIN\fR +specify which \s-1UUID\s0 version to generate. The \fB\s-1UUID_MAKE_MC\s0\fR forces the +use of a random multi-cast \s-1MAC\s0 address instead of the real physical \s-1MAC\s0 +address in version 1 UUIDs. +.IP "\fB\s-1UUID_RC_OK\s0\fR, \fB\s-1UUID_RC_ARG\s0\fR, \fB\s-1UUID_RC_MEM\s0\fR, \fB\s-1UUID_RC_SYS\s0\fR, \fB\s-1UUID_RC_INT\s0\fR, \fB\s-1UUID_RC_IMP\s0\fR" 4 +.IX Item "UUID_RC_OK, UUID_RC_ARG, UUID_RC_MEM, UUID_RC_SYS, UUID_RC_INT, UUID_RC_IMP" +The possible numerical return-codes of \s-1API\s0 functions. +The \f(CW\*(C`UUID_RC_OK\*(C'\fR indicates success, the others indicate errors. +Use \fBuuid_error\fR() to translate them into string versions. +.IP "\fB\s-1UUID_FMT_BIN\s0\fR, \fB\s-1UUID_FMT_STR\s0\fR, \fB\s-1UUID_FMT_SIV\s0\fR, \fB\s-1UUID_FMT_TXT\s0\fR" 4 +.IX Item "UUID_FMT_BIN, UUID_FMT_STR, UUID_FMT_SIV, UUID_FMT_TXT" +The \fIfmt\fR formats for use with \fBuuid_import\fR() and \fBuuid_export\fR(). +The \fB\s-1UUID_FMT_BIN\s0\fR indicates the \s-1UUID\s0 binary representation (of +length \fB\s-1UUID_LEN_BIN\s0\fR), the \fB\s-1UUID_FMT_STR\s0\fR indicates the \s-1UUID\s0 string +representation (of length \fB\s-1UUID_LEN_STR\s0\fR), the \fB\s-1UUID_FMT_SIV\s0\fR +indicates the \s-1UUID\s0 single integer value representation (of maximum +length \fB\s-1UUID_LEN_SIV\s0\fR) and the \fB\s-1UUID_FMT_TXT\s0\fR indicates the textual +description (of arbitrary length) of a \s-1UUID\s0. +.Sh "\s-1FUNCTIONS\s0" +.IX Subsection "FUNCTIONS" +The following functions are provided: +.IP "uuid_rc_t \fBuuid_create\fR(uuid_t **\fIuuid\fR);" 4 +.IX Item "uuid_rc_t uuid_create(uuid_t **uuid);" +Create a new \s-1UUID\s0 object and store a pointer to it in \f(CW\*(C`*\*(C'\fR\fIuuid\fR. +A \s-1UUID\s0 object consists of an internal representation of a \s-1UUID\s0, the +internal \s-1PRNG\s0 and \s-1MD5\s0 generator contexts, and cached \s-1MAC\s0 address and +timestamp information. The initial \s-1UUID\s0 is the \fINil\fR \s-1UUID\s0. +.IP "uuid_rc_t \fBuuid_destroy\fR(uuid_t *\fIuuid\fR);" 4 +.IX Item "uuid_rc_t uuid_destroy(uuid_t *uuid);" +Destroy \s-1UUID\s0 object \fIuuid\fR. +.IP "uuid_rc_t \fBuuid_clone\fR(const uuid_t *\fIuuid\fR, uuid_t **\fIuuid_clone\fR);" 4 +.IX Item "uuid_rc_t uuid_clone(const uuid_t *uuid, uuid_t **uuid_clone);" +Clone \s-1UUID\s0 object \fIuuid\fR and store new \s-1UUID\s0 object in \fIuuid_clone\fR. +.IP "uuid_rc_t \fBuuid_isnil\fR(const uuid_t *\fIuuid\fR, int *\fIresult\fR);" 4 +.IX Item "uuid_rc_t uuid_isnil(const uuid_t *uuid, int *result);" +Checks whether the \s-1UUID\s0 in \fIuuid\fR is the \fINil\fR \s-1UUID\s0. +If this is the case, it returns \fItrue\fR in \f(CW\*(C`*\*(C'\fR\fIresult\fR. +Else it returns \fIfalse\fR in \f(CW\*(C`*\*(C'\fR\fIresult\fR. +.IP "uuid_rc_t \fBuuid_compare\fR(const uuid_t *\fIuuid\fR, const uuid_t *\fIuuid2\fR, int *\fIresult\fR);" 4 +.IX Item "uuid_rc_t uuid_compare(const uuid_t *uuid, const uuid_t *uuid2, int *result);" +Compares the order of the two UUIDs in \fIuuid1\fR and \fIuuid2\fR +and returns the result in \f(CW\*(C`*\*(C'\fR\fIresult\fR: \f(CW\*(C`\-1\*(C'\fR if \fIuuid1\fR is +smaller than \fIuuid2\fR, \f(CW0\fR if \fIuuid1\fR is equal to \fIuuid2\fR +and \f(CW+1\fR if \fIuuid1\fR is greater than \fIuuid2\fR. +.IP "uuid_rc_t \fBuuid_import\fR(uuid_t *\fIuuid\fR, uuid_fmt_t \fIfmt\fR, const void *\fIdata_ptr\fR, size_t \fIdata_len\fR);" 4 +.IX Item "uuid_rc_t uuid_import(uuid_t *uuid, uuid_fmt_t fmt, const void *data_ptr, size_t data_len);" +Imports a \s-1UUID\s0 \fIuuid\fR from an external representation of format \fIfmt\fR. +The data is read from the buffer at \fIdata_ptr\fR which contains at least +\&\fIdata_len\fR bytes. +.Sp +The format of the external representation is specified by \fIfmt\fR and the +minimum expected length in \fIdata_len\fR depends on it. Valid values for +\&\fIfmt\fR are \fB\s-1UUID_FMT_BIN\s0\fR, \fB\s-1UUID_FMT_STR\s0\fR and \fB\s-1UUID_FMT_SIV\s0\fR. +.IP "uuid_rc_t \fBuuid_export\fR(const uuid_t *\fIuuid\fR, uuid_fmt_t \fIfmt\fR, void *\fIdata_ptr\fR, size_t *\fIdata_len\fR);" 4 +.IX Item "uuid_rc_t uuid_export(const uuid_t *uuid, uuid_fmt_t fmt, void *data_ptr, size_t *data_len);" +Exports a \s-1UUID\s0 \fIuuid\fR into an external representation of format +\&\fIfmt\fR. Valid values for \fIfmt\fR are \fB\s-1UUID_FMT_BIN\s0\fR, \fB\s-1UUID_FMT_STR\s0\fR, +\&\fB\s-1UUID_FMT_SIV\s0\fR and \fB\s-1UUID_FMT_TXT\s0\fR. +.Sp +The data is written to the buffer whose location is obtained +by dereferencing \fIdata_ptr\fR after a \*(L"cast\*(R" to the appropriate +pointer-to-pointer type. Hence the generic pointer argument \fIdata_ptr\fR +is expected to be a pointer to a \*(L"pointer of a particular type\*(R", i.e., +it has to be of type "\f(CW\*(C`unsigned char **\*(C'\fR" for \fB\s-1UUID_FMT_BIN\s0\fR and +"\f(CW\*(C`char **\*(C'\fR" for \fB\s-1UUID_FMT_STR\s0\fR, \fB\s-1UUID_FMT_SIV\s0\fR and \fB\s-1UUID_FMT_TXT\s0\fR. +.Sp +The buffer has to be room for at least \f(CW\*(C`*\*(C'\fR\fIdata_len\fR bytes. If the +value of the pointer after \*(L"casting\*(R" and dereferencing \fIdata_ptr\fR +is \f(CW\*(C`NULL\*(C'\fR, \fIdata_len\fR is ignored as input and a new buffer is +allocated and returned in the pointer after \*(L"casting\*(R" and dereferencing +\&\fIdata_ptr\fR (the caller has to \fIfree\fR\|(3) it later on). +.Sp +If \fIdata_len\fR is not \f(CW\*(C`NULL\*(C'\fR, the number of available bytes in the +buffer has to be provided in \f(CW\*(C`*\*(C'\fR\fIdata_len\fR and the number of actually +written bytes are returned in \f(CW\*(C`*\*(C'\fR\fIdata_len\fR again. The minimum +required buffer length depends on the external representation as +specified by \fIfmt\fR and is at least \fB\s-1UUID_LEN_BIN\s0\fR for \fB\s-1UUID_FMT_BIN\s0\fR, +\&\fB\s-1UUID_LEN_STR\s0\fR for \fB\s-1UUID_FMT_STR\s0\fR and \fB\s-1UUID_LEN_SIV\s0\fR for +\&\fB\s-1UUID_FMT_SIV\s0\fR. For \fB\s-1UUID_FMT_TXT\s0\fR a buffer of unspecified length is +required and hence it is recommended to allow \fB\s-1OSSP\s0 uuid\fR to allocate +the buffer as necessary. +.IP "uuid_rc_t \fBuuid_load\fR(uuid_t *\fIuuid\fR, const char *\fIname\fR);" 4 +.IX Item "uuid_rc_t uuid_load(uuid_t *uuid, const char *name);" +Loads a pre-defined \s-1UUID\s0 value into the \s-1UUID\s0 object \fIuuid\fR. The +following \fIname\fR arguments are currently known: +.RS 4 +.IP "\fIname\fR \fI\s-1UUID\s0\fR" 4 +.IX Item "name UUID" +.PD 0 +.IP "nil 00000000\-0000\-0000\-0000\-000000000000" 4 +.IX Item "nil 00000000-0000-0000-0000-000000000000" +.IP "ns:DNS 6ba7b810\-9dad\-11d1\-80b4\-00c04fd430c8" 4 +.IX Item "ns:DNS 6ba7b810-9dad-11d1-80b4-00c04fd430c8" +.IP "ns:URL 6ba7b811\-9dad\-11d1\-80b4\-00c04fd430c8" 4 +.IX Item "ns:URL 6ba7b811-9dad-11d1-80b4-00c04fd430c8" +.IP "ns:OID 6ba7b812\-9dad\-11d1\-80b4\-00c04fd430c8" 4 +.IX Item "ns:OID 6ba7b812-9dad-11d1-80b4-00c04fd430c8" +.IP "ns:X500 6ba7b814\-9dad\-11d1\-80b4\-00c04fd430c8" 4 +.IX Item "ns:X500 6ba7b814-9dad-11d1-80b4-00c04fd430c8" +.RE +.RS 4 +.PD +.Sp +The "\f(CW\*(C`ns:\*(C'\fR\fI\s-1XXX\s0\fR" are names of pre-defined name-space UUIDs for use in +the generation of \s-1DCE\s0 1.1 version 3 and version 5 UUIDs. +.RE +.IP "uuid_rc_t \fBuuid_make\fR(uuid_t *\fIuuid\fR, unsigned int \fImode\fR, ...);" 4 +.IX Item "uuid_rc_t uuid_make(uuid_t *uuid, unsigned int mode, ...);" +Generates a new \s-1UUID\s0 in \fIuuid\fR according to \fImode\fR and optional +arguments (dependent on \fImode\fR). +.Sp +If \fImode\fR contains the \f(CW\*(C`UUID_MAKE_V1\*(C'\fR bit, a \s-1DCE\s0 1.1 variant \s-1UUID\s0 of +version 1 is generated. Then optionally the bit \f(CW\*(C`UUID_MAKE_MC\*(C'\fR forces +the use of random multi-cast \s-1MAC\s0 address instead of the real physical +\&\s-1MAC\s0 address (the default). The \s-1UUID\s0 is generated out of the 60\-bit current +system time, a 12\-bit clock sequence and the 48\-bit \s-1MAC\s0 address. +.Sp +If \fImode\fR contains the \f(CW\*(C`UUID_MAKE_V3\*(C'\fR or \f(CW\*(C`UUID_MAKE_V5\*(C'\fR bit, a \s-1DCE\s0 +1.1 variant \s-1UUID\s0 of version 3 or 5 is generated and two additional +arguments are expected: first, a namespace \s-1UUID\s0 object (\f(CW\*(C`uuid_t *\*(C'\fR). +Second, a name string of arbitrary length (\f(CW\*(C`const char *\*(C'\fR). The \s-1UUID\s0 is +generated out of the 128\-bit \s-1MD5\s0 or 160\-bit \s-1SHA\-1\s0 from the concatenated +octet stream of namespace \s-1UUID\s0 and name string. +.Sp +If \fImode\fR contains the \f(CW\*(C`UUID_MAKE_V4\*(C'\fR bit, a \s-1DCE\s0 1.1 variant \s-1UUID\s0 +of version 4 is generated. The \s-1UUID\s0 is generated out of 128\-bit random +data. +.IP "char *\fBuuid_error\fR(uuid_rc_t \fIrc\fR);" 4 +.IX Item "char *uuid_error(uuid_rc_t rc);" +Returns a constant string representation corresponding to the +return-code \fIrc\fR for use in displaying \fB\s-1OSSP\s0 uuid\fR errors. +.IP "unsigned long \fBuuid_version\fR(void);" 4 +.IX Item "unsigned long uuid_version(void);" +Returns the hexadecimal encoded \fB\s-1OSSP\s0 uuid\fR version as compiled into +the library object files. This allows run-time checking of the \fB\s-1OSSP\s0 +uuid\fR version. For compile-time checking use \f(CW\*(C`UUID_VERSION\*(C'\fR instead. +.SH "EXAMPLE" +.IX Header "EXAMPLE" +The following shows an example usage of the \s-1API\s0. Error handling is +omitted for code simplification and has to be re-added for production +code. +.PP +.Vb 5 +\& /* generate a DCE 1.1 v1 UUID from system environment */ +\& char *uuid_v1(void) +\& { +\& uuid_t *uuid; +\& char *str; +\& +\& uuid_create(&uuid); +\& uuid_make(uuid, UUID_MAKE_V1); +\& str = NULL; +\& uuid_export(uuid, UUID_FMT_STR, &str, NULL); +\& uuid_destroy(uuid); +\& return str; +\& } +\& +\& /* generate a DCE 1.1 v3 UUID from an URL */ +\& char *uuid_v3(const char *url) +\& { +\& uuid_t *uuid; +\& uuid_t *uuid_ns; +\& char *str; +\& +\& uuid_create(&uuid); +\& uuid_create(&uuid_ns); +\& uuid_load(uuid_ns, "ns:URL"); +\& uuid_make(uuid, UUID_MAKE_V3, uuid_ns, url); +\& str = NULL; +\& uuid_export(uuid, UUID_FMT_STR, &str, NULL); +\& uuid_destroy(uuid_ns); +\& uuid_destroy(uuid); +\& return str; +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The following are references to \fB\s-1UUID\s0\fR documentation and specifications: +.IP "\(bu" 4 +\&\fBA Universally Unique IDentifier (\s-1UUID\s0) \s-1URN\s0 Namespace\fR, +P. Leach, M. Mealling, R. Salz, +\&\s-1IETF\s0 \s-1RFC\-4122\s0, +July 2005, 32 pages, +http://www.ietf.org/rfc/rfc4122.txt +.IP "\(bu" 4 +Information Technology \*(-- Open Systems Interconnection (\s-1OSI\s0), +\&\fBProcedures for the operation of \s-1OSI\s0 Registration Authorities: +Generation and Registration of Universally Unique Identifiers (UUIDs) +and their Use as \s-1ASN\s0.1 Object Identifier Components\fR, +\&\s-1ISO/IEC\s0 9834\-8:2004 / ITU-T Rec. X.667, 2004, +December 2004, 25 pages, +http://www.itu.int/ITU\-T/studygroups/com17/oid/X.667\-E.pdf +.IP "\(bu" 4 +\&\fB\s-1DCE\s0 1.1: Remote Procedure Call\fR, +appendix \fBUniversally Unique Identifier\fR, +Open Group Technical Standard +Document Number C706, August 1997, 737 pages, +(supersedes C309 \s-1DCE:\s0 Remote Procedure Call 8/1994, +which was basis for \s-1ISO/IEC\s0 11578:1996 specification), +http://www.opengroup.org/publications/catalog/c706.htm +.IP "\(bu" 4 +Information technology \*(-- Open Systems Interconnection (\s-1OSI\s0), +\&\fBRemote Procedure Call (\s-1RPC\s0)\fR, +\&\s-1ISO/IEC\s0 11578:1996, +August 2001, 570 pages, (\s-1CHF\s0 340,00), +http://www.iso.ch/cate/d2229.html +.IP "\(bu" 4 +\&\fB\s-1HTTP\s0 Extensions for Distributed Authoring (WebDAV)\fR, +section \fB6.4.1 Node Field Generation Without the \s-1IEEE\s0 802 Address\fR, +\&\s-1IETF\s0 \s-1RFC\-2518\s0, +February 1999, 94 pages, +http://www.ietf.org/rfc/rfc2518.txt +.IP "\(bu" 4 +\&\fB\s-1DCE\s0 1.1 compliant \s-1UUID\s0 functions\fR, +FreeBSD manual pages \fIuuid\fR\|(3) and \fIuuidgen\fR\|(2), +http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+6.0\-RELEASE +.SH "HISTORY" +.IX Header "HISTORY" +\&\fB\s-1OSSP\s0 uuid\fR was implemented in January 2004 by Ralf S. Engelschall +<rse@engelschall.com>. It was prompted by the use of UUIDs +in the \fB\s-1OSSP\s0 as\fR and \fBOpenPKG\fR projects. It is a clean room +implementation intended to be strictly standards compliant and maximum +portable. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIuuid\fR\|(1), \fIuuid\-config\fR\|(1), \fIOSSP::uuid\fR\|(3). |