18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Universally Unique IDentifier (UUID) 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2008, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "includes.h" 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common.h" 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "uuid.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint uuid_str2bin(const char *str, u8 *bin) 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *pos; 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *opos; 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = str; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opos = bin; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (hexstr2bin(pos, opos, 4)) 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos += 8; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opos += 4; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos += 4; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opos += 2; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos += 4; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opos += 2; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*pos++ != '-' || hexstr2bin(pos, opos, 2)) 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos += 4; 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opos += 2; 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*pos++ != '-' || hexstr2bin(pos, opos, 6)) 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint uuid_bin2str(const u8 *bin, char *str, size_t max_len) 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int len; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt len = os_snprintf(str, max_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-" 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "%02x%02x-%02x%02x%02x%02x%02x%02x", 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bin[0], bin[1], bin[2], bin[3], 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bin[4], bin[5], bin[6], bin[7], 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bin[8], bin[9], bin[10], bin[11], 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bin[12], bin[13], bin[14], bin[15]); 58fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt if (os_snprintf_error(max_len, len)) 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint is_nil_uuid(const u8 *uuid) 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int i; 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < UUID_LEN; i++) 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (uuid[i]) 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 1; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 72