14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License.
54d6c458bSopenharmony_ci * You may obtain a copy of the License at
64d6c458bSopenharmony_ci *
74d6c458bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84d6c458bSopenharmony_ci *
94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and
134d6c458bSopenharmony_ci * limitations under the License.
144d6c458bSopenharmony_ci */
154d6c458bSopenharmony_ci
164d6c458bSopenharmony_ci#ifndef UTIL_JS_UUID_H
174d6c458bSopenharmony_ci#define UTIL_JS_UUID_H
184d6c458bSopenharmony_ci
194d6c458bSopenharmony_ci#include <cstring>
204d6c458bSopenharmony_ci#include <iostream>
214d6c458bSopenharmony_ci#include <iomanip>
224d6c458bSopenharmony_ci#include <openssl/rand.h>
234d6c458bSopenharmony_ci#include <queue>
244d6c458bSopenharmony_ci#ifdef IOS_PLATFORM
254d6c458bSopenharmony_ci#include <sys/sysctl.h>
264d6c458bSopenharmony_ci#else
274d6c458bSopenharmony_ci#include <sys/sysinfo.h>
284d6c458bSopenharmony_ci#endif
294d6c458bSopenharmony_ci#include <unistd.h>
304d6c458bSopenharmony_ci
314d6c458bSopenharmony_ci#include "napi/native_api.h"
324d6c458bSopenharmony_ci#include "napi/native_node_api.h"
334d6c458bSopenharmony_ci
344d6c458bSopenharmony_cinamespace OHOS::Util {
354d6c458bSopenharmony_ciconstexpr const int UUID_SIZE = 16;
364d6c458bSopenharmony_cistruct UUID {
374d6c458bSopenharmony_ci    unsigned char elements[UUID_SIZE] = {0};
384d6c458bSopenharmony_ci};
394d6c458bSopenharmony_ci
404d6c458bSopenharmony_cienum ConvertFlags {
414d6c458bSopenharmony_ci    HEX_ZERO_FLG = 0x0,
424d6c458bSopenharmony_ci    HEX_ONE_FLG = 0x1,
434d6c458bSopenharmony_ci    HEX_TWO_FLG = 0x2,
444d6c458bSopenharmony_ci    HEX_THREE_FLG = 0x3,
454d6c458bSopenharmony_ci    HEX_FOUR_FLG = 0x4,
464d6c458bSopenharmony_ci    HEX_FIVE_FLG = 0x5,
474d6c458bSopenharmony_ci    HEX_SIX_FLG = 0x6,
484d6c458bSopenharmony_ci    HEX_SEVEN_FLG = 0x7,
494d6c458bSopenharmony_ci    HEX_EIGHT_FLG = 0x8,
504d6c458bSopenharmony_ci    HEX_NINE_FLG = 0x9,
514d6c458bSopenharmony_ci    HEX_TEN_FLG = 0xA,
524d6c458bSopenharmony_ci    HEX_ELEVEN_FLG = 0xB,
534d6c458bSopenharmony_ci    HEX_TWELVE_FLG = 0xC,
544d6c458bSopenharmony_ci    HEX_THIRTEEN_FLG = 0xD,
554d6c458bSopenharmony_ci    HEX_FOURTEEN_FLG = 0xE,
564d6c458bSopenharmony_ci    HEX_FIFTEEN_FLG = 0xF,
574d6c458bSopenharmony_ci    HEX_SIXTEEN_FLG = 0X10,
584d6c458bSopenharmony_ci    MAX_CACHE_MASK = 128,
594d6c458bSopenharmony_ci};
604d6c458bSopenharmony_ci
614d6c458bSopenharmony_cinapi_value DoParseUUID(napi_env env, napi_value src);
624d6c458bSopenharmony_cinapi_value GetBinaryUUID(napi_env env, bool entropyCache);
634d6c458bSopenharmony_cistd::string GetStringUUID(napi_env env, bool entropyCache);
644d6c458bSopenharmony_cibool GenerateUUID(unsigned char *data, int32_t size);
654d6c458bSopenharmony_civoid ProcessUUID(unsigned char *data);
664d6c458bSopenharmony_cibool GetBufferedUUID(napi_env env, UUID &uuid);
674d6c458bSopenharmony_cibool GetUnBufferedUUID(napi_env env, UUID &uuid);
684d6c458bSopenharmony_cibool GetUUID(napi_env env, bool entropyCache, UUID &uuid);
694d6c458bSopenharmony_cistd::string GetFormatUUID(const UUID &uuid);
704d6c458bSopenharmony_ciunsigned char CharToHex(char in);
714d6c458bSopenharmony_ciunsigned char ConvertBits(std::string &input);
724d6c458bSopenharmony_ciunsigned char HexToChar(unsigned char in);
734d6c458bSopenharmony_ci}
744d6c458bSopenharmony_ci#endif // UTIL_JS_UUID_H
75