/* * test program for uuid library * * written by nathan wagner and placed in the public domain */ #include #include #include #include #include "pduuid.h" #include "ctap.h" static int strbytes(char *s, unsigned char *d) { unsigned int byte; int i = 0; if (!s) return 0; if (*s == 0) return 0; while (*s) { if (*s == '-' || *s == ':') s++; if (sscanf(s, "%02x", &byte) != 1) { return 0; } s += 2; d[i++] = byte & 0xff; } return i; } void ufmt(pd_uuid_t *uuid, char *s) { int i; for (i=0;i<4;i++) { s += sprintf(s, "%02x", uuid->data[i]); } s += sprintf(s, "-"); for (;i<6;i++) { s += sprintf(s, "%02x", uuid->data[i]); } s += sprintf(s, "-"); for (;i<8;i++) { s += sprintf(s, "%02x", uuid->data[i]); } s += sprintf(s, "-"); for (;i<10;i++) { s += sprintf(s, "%02x", uuid->data[i]); } s += sprintf(s, "-"); for (;i<16;i++) { s += sprintf(s, "%02x", uuid->data[i]); } } int str_ok(pd_uuid_t *uuid, char *s, char *name) { char fmt[37]; ufmt(uuid, fmt); is_string(s, fmt, name); return 0; } int main(int ac, char *av[]) { pd_uuid_t uuid, copy; struct pd_uuid_state s; pd_uuid_t idset[10]; int i; char fmt[37]; unsigned char hash[40]; char *url = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; char *dns = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; char *oid = "6ba7b812-9dad-11d1-80b4-00c04fd430c8"; char *x500 = "6ba7b814-9dad-11d1-80b4-00c04fd430c8"; #ifdef WIN32 srand(time(0)); #else srandom(time(0)); #endif plan(24); pd_uuid_init_state(0); pd_uuid_make_v1mc(0, &uuid); pd_uuid_init_state(&s); pd_uuid_make_v1mc(&s, &uuid); pd_uuid_init_state(&s); pd_uuid_make_v1(0, &uuid); ufmt(&uuid, fmt); diag("v1: %s", fmt); pd_uuid_make_v1(&s, &uuid); pd_uuid_init_state(&s); pd_uuid_make_v4(0, &uuid); ufmt(&uuid, fmt); diag("v4: %s", fmt); pd_uuid_make_v4(&s, &uuid); pd_uuid_set_string(&uuid, "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); ufmt(&uuid, fmt); is_string("6ba7b810-9dad-11d1-80b4-00c04fd430c8", fmt, "t/f string"); ufmt(&pd_uuid_ns_x500, fmt); is_string(x500, fmt, "pd_uuid_ns_x500"); ufmt(&pd_uuid_ns_oid, fmt); is_string(oid, fmt, "pd_uuid_ns_oid"); ufmt(&pd_uuid_ns_url, fmt); is_string(url, fmt, "pd_uuid_ns_url"); ufmt(&pd_uuid_ns_dns, fmt); is_string(dns, fmt, "pd_uuid_ns_dns"); pd_uuid_make_v3(0, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org")); ufmt(&uuid, fmt); is_string("e6e8e9cb-78bd-33b3-b8ae-d442456e8169", fmt, "granicus.if.org (v3)"); pd_uuid_init_state(&s); pd_uuid_make_v3(&s, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org")); ufmt(&uuid, fmt); is_string("e6e8e9cb-78bd-33b3-b8ae-d442456e8169", fmt, "granicus.if.org (v3)"); pd_uuid_make_v5(0, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org")); ufmt(&uuid, fmt); is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)"); pd_uuid_init_state(&s); pd_uuid_make_v5(&s, &uuid, &pd_uuid_ns_dns, "granicus.if.org", strlen("granicus.if.org")); ufmt(&uuid, fmt); is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)"); pd_uuid_copy(&uuid, ©); ufmt(©, fmt); is_string("fc1d1ec9-f731-5bfb-854e-e38a4dbd9dd3", fmt, "granicus.if.org (v5)"); ok(!pd_uuid_cmp(&uuid, ©), "uuid cmp copy"); strbytes("622e4fa57481e7ed5c9119e1ba69bf88255ca4a1", hash); pd_set_uuid_hash(&uuid, hash, 5); str_ok(&uuid, "622e4fa5-7481-57ed-9c91-19e1ba69bf88", "set from hash"); pd_uuid_make_v3(0, &uuid, &pd_uuid_ns_dns, "www.widgets.com", strlen("www.widgets.com")); str_ok(&uuid, "3d813cbb-47fb-32ba-91df-831e1593ac29", "md5 widgets dns"); pd_uuid_make_v5(0, &uuid, &pd_uuid_ns_dns, "www.widgets.com", strlen("www.widgets.com")); str_ok(&uuid, "21f7f8de-8051-5b89-8680-0195ef798b6a", "sha widgets dns"); pd_uuid_rng_get_bytes(hash, 5); /* try to get two in very short sequence */ pd_uuid_init_state(&s); pd_uuid_make_v1(&s, &uuid); pd_uuid_make_v1(&s, ©); ok(pd_uuid_cmp(&uuid, ©), "uuid v1 different"); ufmt(&uuid, fmt); diag("v1a: %s", fmt); ufmt(©, fmt); diag("v1b: %s", fmt); pd_uuid_init(&s, 0x1); for (i=0;i<10;i++) { pd_uuid_make_v1(&s, &idset[i]); } for (i=0;i<9;i++) { ok(pd_uuid_cmp(&idset[i], &idset[i+1]), "id set %d != %d", i, i+1); pd_uuid_make_v1(&s, &idset[i]); } return 0; }