139beb93cSSam Leffler /* 239beb93cSSam Leffler * Universally Unique IDentifier (UUID) 339beb93cSSam Leffler * Copyright (c) 2008, Jouni Malinen <j@w1.fi> 439beb93cSSam Leffler * 5f05cddf9SRui Paulo * This software may be distributed under the terms of the BSD license. 6f05cddf9SRui Paulo * See README for more details. 739beb93cSSam Leffler */ 839beb93cSSam Leffler 939beb93cSSam Leffler #include "includes.h" 1039beb93cSSam Leffler 1139beb93cSSam Leffler #include "common.h" 1239beb93cSSam Leffler #include "uuid.h" 1339beb93cSSam Leffler 1439beb93cSSam Leffler int uuid_str2bin(const char *str, u8 *bin) 1539beb93cSSam Leffler { 1639beb93cSSam Leffler const char *pos; 1739beb93cSSam Leffler u8 *opos; 1839beb93cSSam Leffler 1939beb93cSSam Leffler pos = str; 2039beb93cSSam Leffler opos = bin; 2139beb93cSSam Leffler 2239beb93cSSam Leffler if (hexstr2bin(pos, opos, 4)) 2339beb93cSSam Leffler return -1; 2439beb93cSSam Leffler pos += 8; 2539beb93cSSam Leffler opos += 4; 2639beb93cSSam Leffler 2739beb93cSSam Leffler if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 2839beb93cSSam Leffler return -1; 2939beb93cSSam Leffler pos += 4; 3039beb93cSSam Leffler opos += 2; 3139beb93cSSam Leffler 3239beb93cSSam Leffler if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 3339beb93cSSam Leffler return -1; 3439beb93cSSam Leffler pos += 4; 3539beb93cSSam Leffler opos += 2; 3639beb93cSSam Leffler 3739beb93cSSam Leffler if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 3839beb93cSSam Leffler return -1; 3939beb93cSSam Leffler pos += 4; 4039beb93cSSam Leffler opos += 2; 4139beb93cSSam Leffler 4239beb93cSSam Leffler if (*pos++ != '-' || hexstr2bin(pos, opos, 6)) 4339beb93cSSam Leffler return -1; 4439beb93cSSam Leffler 4539beb93cSSam Leffler return 0; 4639beb93cSSam Leffler } 4739beb93cSSam Leffler 4839beb93cSSam Leffler 4939beb93cSSam Leffler int uuid_bin2str(const u8 *bin, char *str, size_t max_len) 5039beb93cSSam Leffler { 5139beb93cSSam Leffler int len; 5239beb93cSSam Leffler len = os_snprintf(str, max_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-" 5339beb93cSSam Leffler "%02x%02x-%02x%02x%02x%02x%02x%02x", 5439beb93cSSam Leffler bin[0], bin[1], bin[2], bin[3], 5539beb93cSSam Leffler bin[4], bin[5], bin[6], bin[7], 5639beb93cSSam Leffler bin[8], bin[9], bin[10], bin[11], 5739beb93cSSam Leffler bin[12], bin[13], bin[14], bin[15]); 58*5b9c547cSRui Paulo if (os_snprintf_error(max_len, len)) 5939beb93cSSam Leffler return -1; 6039beb93cSSam Leffler return 0; 6139beb93cSSam Leffler } 6239beb93cSSam Leffler 6339beb93cSSam Leffler 6439beb93cSSam Leffler int is_nil_uuid(const u8 *uuid) 6539beb93cSSam Leffler { 6639beb93cSSam Leffler int i; 6739beb93cSSam Leffler for (i = 0; i < UUID_LEN; i++) 6839beb93cSSam Leffler if (uuid[i]) 6939beb93cSSam Leffler return 0; 7039beb93cSSam Leffler return 1; 7139beb93cSSam Leffler } 72