uuid.c

Go to the documentation of this file.
00001 
00016 #include "includes.h"
00017 
00018 #include "common.h"
00019 #include "crypto.h"
00020 #include "sha1.h"
00021 #include "uuid.h"
00022 
00023 int uuid_str2bin(const char *str, u8 *bin)
00024 {
00025         const char *pos;
00026         u8 *opos;
00027 
00028         pos = str;
00029         opos = bin;
00030 
00031         if (hexstr2bin(pos, opos, 4))
00032                 return -1;
00033         pos += 8;
00034         opos += 4;
00035 
00036         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
00037                 return -1;
00038         pos += 4;
00039         opos += 2;
00040 
00041         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
00042                 return -1;
00043         pos += 4;
00044         opos += 2;
00045 
00046         if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
00047                 return -1;
00048         pos += 4;
00049         opos += 2;
00050 
00051         if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
00052                 return -1;
00053 
00054         return 0;
00055 }
00056 
00057 
00058 int uuid_bin2str(const u8 *bin, char *str, size_t max_len)
00059 {
00060         int len;
00061         len = os_snprintf(str, max_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-"
00062                           "%02x%02x-%02x%02x%02x%02x%02x%02x",
00063                           bin[0], bin[1], bin[2], bin[3],
00064                           bin[4], bin[5], bin[6], bin[7],
00065                           bin[8], bin[9], bin[10], bin[11],
00066                           bin[12], bin[13], bin[14], bin[15]);
00067         if (len < 0 || (size_t) len >= max_len)
00068                 return -1;
00069         return 0;
00070 }
00071 
00072 
00073 int is_nil_uuid(const u8 *uuid)
00074 {
00075         int i;
00076         for (i = 0; i < UUID_LEN; i++)
00077                 if (uuid[i])
00078                         return 0;
00079         return 1;
00080 }
00081 
00082 
00083 void uuid_gen_mac_addr(const u8 *mac_addr, u8 *uuid)
00084 {
00085         const u8 *addr[2];
00086         size_t len[2];
00087         u8 hash[SHA1_MAC_LEN];
00088         u8 nsid[16] = {
00089                 0x52, 0x64, 0x80, 0xf8,
00090                 0xc9, 0x9b,
00091                 0x4b, 0xe5,
00092                 0xa6, 0x55,
00093                 0x58, 0xed, 0x5f, 0x5d, 0x60, 0x84
00094         };
00095 
00096         addr[0] = nsid;
00097         len[0] = sizeof(nsid);
00098         addr[1] = mac_addr;
00099         len[1] = 6;
00100         sha1_vector(2, addr, len, hash);
00101         os_memcpy(uuid, hash, 16);
00102 
00103         /* Version: 5 = named-based version using SHA-1 */
00104         uuid[6] = (5 << 4) | (uuid[6] & 0x0f);
00105 
00106         /* Variant specified in RFC 4122 */
00107         uuid[8] = 0x80 | (uuid[8] & 0x3f);
00108 }
00109 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on Sat Nov 21 23:16:54 2009 for hostapd by  doxygen 1.6.1