Branch data Line data Source code
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 : 92 : int uuid_str2bin(const char *str, u8 *bin)
15 : : {
16 : : const char *pos;
17 : : u8 *opos;
18 : :
19 : 92 : pos = str;
20 : 92 : opos = bin;
21 : :
22 [ + + ]: 92 : if (hexstr2bin(pos, opos, 4))
23 : 3 : return -1;
24 : 89 : pos += 8;
25 : 89 : opos += 4;
26 : :
27 [ + - ][ - + ]: 89 : if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
28 : 0 : return -1;
29 : 89 : pos += 4;
30 : 89 : opos += 2;
31 : :
32 [ + - ][ - + ]: 89 : if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
33 : 0 : return -1;
34 : 89 : pos += 4;
35 : 89 : opos += 2;
36 : :
37 [ + - ][ - + ]: 89 : if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
38 : 0 : return -1;
39 : 89 : pos += 4;
40 : 89 : opos += 2;
41 : :
42 [ + - ][ - + ]: 89 : if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
43 : 0 : return -1;
44 : :
45 : 92 : return 0;
46 : : }
47 : :
48 : :
49 : 633 : int uuid_bin2str(const u8 *bin, char *str, size_t max_len)
50 : : {
51 : : int len;
52 : 10128 : len = os_snprintf(str, max_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-"
53 : : "%02x%02x-%02x%02x%02x%02x%02x%02x",
54 : 2532 : bin[0], bin[1], bin[2], bin[3],
55 : 2532 : bin[4], bin[5], bin[6], bin[7],
56 : 2532 : bin[8], bin[9], bin[10], bin[11],
57 : 2532 : bin[12], bin[13], bin[14], bin[15]);
58 [ + - ][ - + ]: 633 : if (len < 0 || (size_t) len >= max_len)
59 : 0 : return -1;
60 : 633 : return 0;
61 : : }
62 : :
63 : :
64 : 149 : int is_nil_uuid(const u8 *uuid)
65 : : {
66 : : int i;
67 [ + + ]: 1589 : for (i = 0; i < UUID_LEN; i++)
68 [ + + ]: 1499 : if (uuid[i])
69 : 59 : return 0;
70 : 149 : return 1;
71 : : }
|