Merge branch 'vendor/OPENSSL'
[dragonfly.git] / contrib / hostapd / src / utils / uuid.c
1 /*
2  * Universally Unique IDentifier (UUID)
3  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8
9 #include "includes.h"
10
11 #include "common.h"
12 #include "uuid.h"
13
14 int uuid_str2bin(const char *str, u8 *bin)
15 {
16         const char *pos;
17         u8 *opos;
18
19         pos = str;
20         opos = bin;
21
22         if (hexstr2bin(pos, opos, 4))
23                 return -1;
24         pos += 8;
25         opos += 4;
26
27         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
28                 return -1;
29         pos += 4;
30         opos += 2;
31
32         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
33                 return -1;
34         pos += 4;
35         opos += 2;
36
37         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
38                 return -1;
39         pos += 4;
40         opos += 2;
41
42         if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
43                 return -1;
44
45         return 0;
46 }
47
48
49 int uuid_bin2str(const u8 *bin, char *str, size_t max_len)
50 {
51         int len;
52         len = os_snprintf(str, max_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-"
53                           "%02x%02x-%02x%02x%02x%02x%02x%02x",
54                           bin[0], bin[1], bin[2], bin[3],
55                           bin[4], bin[5], bin[6], bin[7],
56                           bin[8], bin[9], bin[10], bin[11],
57                           bin[12], bin[13], bin[14], bin[15]);
58         if (len < 0 || (size_t) len >= max_len)
59                 return -1;
60         return 0;
61 }
62
63
64 int is_nil_uuid(const u8 *uuid)
65 {
66         int i;
67         for (i = 0; i < UUID_LEN; i++)
68                 if (uuid[i])
69                         return 0;
70         return 1;
71 }