1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef UTIL_JS_UUID_H 17#define UTIL_JS_UUID_H 18 19#include <cstring> 20#include <iostream> 21#include <iomanip> 22#include <openssl/rand.h> 23#include <queue> 24#ifdef IOS_PLATFORM 25#include <sys/sysctl.h> 26#else 27#include <sys/sysinfo.h> 28#endif 29#include <unistd.h> 30 31#include "napi/native_api.h" 32#include "napi/native_node_api.h" 33 34namespace OHOS::Util { 35constexpr const int UUID_SIZE = 16; 36struct UUID { 37 unsigned char elements[UUID_SIZE] = {0}; 38}; 39 40enum ConvertFlags { 41 HEX_ZERO_FLG = 0x0, 42 HEX_ONE_FLG = 0x1, 43 HEX_TWO_FLG = 0x2, 44 HEX_THREE_FLG = 0x3, 45 HEX_FOUR_FLG = 0x4, 46 HEX_FIVE_FLG = 0x5, 47 HEX_SIX_FLG = 0x6, 48 HEX_SEVEN_FLG = 0x7, 49 HEX_EIGHT_FLG = 0x8, 50 HEX_NINE_FLG = 0x9, 51 HEX_TEN_FLG = 0xA, 52 HEX_ELEVEN_FLG = 0xB, 53 HEX_TWELVE_FLG = 0xC, 54 HEX_THIRTEEN_FLG = 0xD, 55 HEX_FOURTEEN_FLG = 0xE, 56 HEX_FIFTEEN_FLG = 0xF, 57 HEX_SIXTEEN_FLG = 0X10, 58 MAX_CACHE_MASK = 128, 59}; 60 61napi_value DoParseUUID(napi_env env, napi_value src); 62napi_value GetBinaryUUID(napi_env env, bool entropyCache); 63std::string GetStringUUID(napi_env env, bool entropyCache); 64bool GenerateUUID(unsigned char *data, int32_t size); 65void ProcessUUID(unsigned char *data); 66bool GetBufferedUUID(napi_env env, UUID &uuid); 67bool GetUnBufferedUUID(napi_env env, UUID &uuid); 68bool GetUUID(napi_env env, bool entropyCache, UUID &uuid); 69std::string GetFormatUUID(const UUID &uuid); 70unsigned char CharToHex(char in); 71unsigned char ConvertBits(std::string &input); 72unsigned char HexToChar(unsigned char in); 73} 74#endif // UTIL_JS_UUID_H 75