/** * \file * * \author Georg Hopp * * \copyright * Copyright © 2013 Georg Hopp * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // for size_t #include <sys/types.h> // for htonl and similar #include <arpa/inet.h> // for already available uuid functionality #include "trbase.h" #include "tr/uuid.h" // for sha1 generation #include "tr/sha1.h" void _TR_uuidFormat3or5(TR_Uuid uuid, unsigned char hash[16], int version); TR_Uuid TR_uuidVersion5(const unsigned char * name, size_t nname, TR_Uuid nsid) { TR_SHA_CTX ctx; unsigned char hash[20]; TR_Uuid net_nsid = TR_clone(nsid); TR_Uuid uuid = TR_new(TR_Uuid); /* * put the namespace id into network byte order. */ (net_nsid->uuid).elements.time_low = htonl((net_nsid->uuid).elements.time_low); (net_nsid->uuid).elements.time_mid = htons((net_nsid->uuid).elements.time_mid); (net_nsid->uuid).elements.time_hi_version = htons((net_nsid->uuid).elements.time_hi_version); /* * generate the MD5 */ TR_SHA1_Init(&ctx); TR_SHA1_Update(&ctx, (net_nsid->uuid).value, 16); TR_SHA1_Update(&ctx, name, nname); TR_SHA1_Final(hash, &ctx); TR_delete(net_nsid); _TR_uuidFormat3or5(uuid, hash, 5); return uuid; } // vim: set ts=4 sw=4: