]> pd.if.org Git - uuid/blob - t/uuidgen.c
Removed unused node variable.
[uuid] / t / uuidgen.c
1 /*
2  * test program for uuid library
3  *
4  * written by nathan wagner and placed in the public domain
5  */
6 #include <stdio.h>
7 #include <string.h>
8 #include <stdlib.h>
9 #include <time.h>
10
11 #include "pduuid.h"
12 #include "ctap.h"
13
14 static int strbytes(char *s, unsigned char *d) {
15         unsigned int byte;
16         int i = 0;
17
18         if (!s) return 0;
19         if (*s == 0) return 0;
20
21         while (*s) {
22                 if (*s == '-' || *s == ':') s++;
23
24                 if (sscanf(s, "%02x", &byte) != 1) {
25                         return 0;
26                 }
27                 s += 2;
28                 d[i++] = byte & 0xff;
29         }
30         return i;
31 }
32
33 void ufmt(pd_uuid_t *uuid, char *s) {
34         int i;
35         for (i=0;i<4;i++) {
36                 s += sprintf(s, "%02x", uuid->data[i]);
37         }
38         s += sprintf(s, "-");
39         for (;i<6;i++) {
40                 s += sprintf(s, "%02x", uuid->data[i]);
41         }
42         s += sprintf(s, "-");
43         for (;i<8;i++) {
44                 s += sprintf(s, "%02x", uuid->data[i]);
45         }
46         s += sprintf(s, "-");
47         for (;i<10;i++) {
48                 s += sprintf(s, "%02x", uuid->data[i]);
49         }
50         s += sprintf(s, "-");
51         for (;i<16;i++) {
52                 s += sprintf(s, "%02x", uuid->data[i]);
53         }
54 }
55
56 int str_ok(pd_uuid_t *uuid, char *s, char *name) {
57         char fmt[37];
58         ufmt(uuid, fmt);
59         is_string(s, fmt, name);
60         return 0;
61 }
62
63 int main(int ac, char *av[]) {
64         pd_uuid_t uuid, copy;
65         struct pd_uuid_state s;
66         pd_uuid_t idset[10];
67         int i;
68
69         char fmt[37];
70         unsigned char hash[40];
71
72         char *url = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
73         char *dns = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
74         char *oid = "6ba7b812-9dad-11d1-80b4-00c04fd430c8";
75         char *x500 = "6ba7b814-9dad-11d1-80b4-00c04fd430c8";
76
77 #ifdef WIN32
78         srand(time(0));
79 #else
80         srandom(time(0));
81 #endif
82
83         plan(24);
84
85         pd_uuid_init_state(0);
86         pd_uuid_make_v1mc(0, &uuid);
87
88         pd_uuid_init_state(&s);
89         pd_uuid_make_v1mc(&s, &uuid);
90
91
92         pd_uuid_init_state(&s);
93         pd_uuid_make_v1(0, &uuid);
94         ufmt(&uuid, fmt);
95         diag("v1: %s", fmt);
96         pd_uuid_make_v1(&s, &uuid);
97
98         pd_uuid_init_state(&s);
99         pd_uuid_make_v4(0, &uuid);
100         ufmt(&uuid, fmt);
101         diag("v4: %s", fmt);
102         pd_uuid_make_v4(&s, &uuid);
103
104         pd_uuid_set_string(&uuid, "6ba7b810-9dad-11d1-80b4-00c04fd430c8");
105         ufmt(&uuid, fmt);
106         is_string("6ba7b810-9dad-11d1-80b4-00c04fd430c8", fmt, "t/f string");
107
108         ufmt(&pd_uuid_ns_x500, fmt);
109         is_string(x500, fmt, "pd_uuid_ns_x500");
110
111         ufmt(&pd_uuid_ns_oid, fmt);
112         is_string(oid, fmt, "pd_uuid_ns_oid");
113
114         ufmt(&pd_uuid_ns_url, fmt);
115         is_string(url, fmt, "pd_uuid_ns_url");
116
117         ufmt(&pd_uuid_ns_dns, fmt);
118         is_string(dns, fmt, "pd_uuid_ns_dns");
119
120         pd_uuid_make_v3(0, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org"));
121         ufmt(&uuid, fmt);
122         is_string("e6e8e9cb-78bd-33b3-b8ae-d442456e8169", fmt, "granicus.if.org (v3)");
123         pd_uuid_init_state(&s);
124         pd_uuid_make_v3(&s, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org"));
125         ufmt(&uuid, fmt);
126         is_string("e6e8e9cb-78bd-33b3-b8ae-d442456e8169", fmt, "granicus.if.org (v3)");
127
128         pd_uuid_make_v5(0, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org"));
129         ufmt(&uuid, fmt);
130         is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)");
131         pd_uuid_init_state(&s);
132         pd_uuid_make_v5(&s, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org"));
133         ufmt(&uuid, fmt);
134         is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)");
135
136         pd_uuid_copy(&uuid, &copy);
137         ufmt(&copy, fmt);
138         is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)");
139
140         ok(!pd_uuid_cmp(&uuid, &copy), "uuid cmp copy");
141
142         strbytes("622e4fa57481e7ed5c9119e1ba69bf88255ca4a1", hash);
143         pd_set_uuid_hash(&uuid, hash, 5);
144         str_ok(&uuid, "622e4fa5-7481-57ed-9c91-19e1ba69bf88", "set from hash");
145
146         pd_uuid_make_v3(0, &uuid, &pd_uuid_ns_dns, "www.widgets.com", strlen("www.widgets.com"));
147         str_ok(&uuid, "3d813cbb-47fb-32ba-91df-831e1593ac29", "md5 dns");
148         pd_uuid_make_v5(0, &uuid, &pd_uuid_ns_dns, "www.widgets.com", strlen("www.widgets.com"));
149         str_ok(&uuid, "21f7f8de-8051-5b89-8680-0195ef798b6a", "md5 dns");
150
151         pd_uuid_rng_get_bytes(hash, 5);
152
153         /* try to get two in very short sequence */
154         pd_uuid_init_state(&s);
155         pd_uuid_make_v1(&s, &uuid);
156         pd_uuid_make_v1(&s, &copy);
157         ok(pd_uuid_cmp(&uuid, &copy), "uuid v1 different");
158         ufmt(&uuid, fmt);
159         diag("v1a: %s", fmt);
160         ufmt(&copy, fmt);
161         diag("v1b: %s", fmt);
162
163         pd_uuid_init(&s, 0x1);
164         for (i=0;i<10;i++) {
165                 pd_uuid_make_v1(&s, &idset[i]);
166         }
167         for (i=0;i<9;i++) {
168                 ok(pd_uuid_cmp(&idset[i], &idset[i+1]), "id set %d != %d", i, i+1); 
169                 pd_uuid_make_v1(&s, &idset[i]);
170         }
171
172         return 0;
173 }