154aa6d63Sopenharmony_ci/* 254aa6d63Sopenharmony_ci * Copyright (c) 2024-2024 Huawei Device Co., Ltd. 354aa6d63Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 454aa6d63Sopenharmony_ci * you may not use this file except in compliance with the License. 554aa6d63Sopenharmony_ci * You may obtain a copy of the License at 654aa6d63Sopenharmony_ci * 754aa6d63Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 854aa6d63Sopenharmony_ci * 954aa6d63Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1054aa6d63Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1154aa6d63Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1254aa6d63Sopenharmony_ci * See the License for the specific language governing permissions and 1354aa6d63Sopenharmony_ci * limitations under the License. 1454aa6d63Sopenharmony_ci */ 1554aa6d63Sopenharmony_ci 1654aa6d63Sopenharmony_ci#ifndef SIGNATRUETOOLS_RANDOM_ACCESS_FILE_H 1754aa6d63Sopenharmony_ci#define SIGNATRUETOOLS_RANDOM_ACCESS_FILE_H 1854aa6d63Sopenharmony_ci 1954aa6d63Sopenharmony_ci#include <cerrno> 2054aa6d63Sopenharmony_ci#include <fcntl.h> 2154aa6d63Sopenharmony_ci#include <sys/mman.h> 2254aa6d63Sopenharmony_ci#include <sys/stat.h> 2354aa6d63Sopenharmony_ci#include <unistd.h> 2454aa6d63Sopenharmony_ci#include <string> 2554aa6d63Sopenharmony_ci#include <cstring> 2654aa6d63Sopenharmony_ci#include <fstream> 2754aa6d63Sopenharmony_ci 2854aa6d63Sopenharmony_ci#include "export_define.h" 2954aa6d63Sopenharmony_ci#include "byte_buffer.h" 3054aa6d63Sopenharmony_ci#include "digest_parameter.h" 3154aa6d63Sopenharmony_ci 3254aa6d63Sopenharmony_cinamespace OHOS { 3354aa6d63Sopenharmony_cinamespace SignatureTools { 3454aa6d63Sopenharmony_ci 3554aa6d63Sopenharmony_cistruct MmapInfo { 3654aa6d63Sopenharmony_ci int64_t mmapPosition; 3754aa6d63Sopenharmony_ci int32_t readMoreLen = 0; 3854aa6d63Sopenharmony_ci int32_t mmapSize = 0; 3954aa6d63Sopenharmony_ci char* mapAddr; 4054aa6d63Sopenharmony_ci}; 4154aa6d63Sopenharmony_ci 4254aa6d63Sopenharmony_ciclass RandomAccessFile { 4354aa6d63Sopenharmony_cipublic: 4454aa6d63Sopenharmony_ci DLL_EXPORT RandomAccessFile(); 4554aa6d63Sopenharmony_ci DLL_EXPORT ~RandomAccessFile(); 4654aa6d63Sopenharmony_ci DLL_EXPORT bool Init(const std::string& filePath); 4754aa6d63Sopenharmony_ci DLL_EXPORT int64_t GetLength() const; 4854aa6d63Sopenharmony_ci DLL_EXPORT int32_t ReadFileFullyFromOffset(ByteBuffer& buffer, int64_t offset); 4954aa6d63Sopenharmony_ci DLL_EXPORT int32_t ReadFileFullyFromOffset(char buf[], int64_t offset, int64_t bufCapacity); 5054aa6d63Sopenharmony_ci DLL_EXPORT int32_t WriteToFile(ByteBuffer& buffer, int64_t position, int64_t length); 5154aa6d63Sopenharmony_ci DLL_EXPORT bool ReadFileFromOffsetAndDigestUpdate(const DigestParameter& digestParam, int32_t chunkSize, 5254aa6d63Sopenharmony_ci int64_t offset); 5354aa6d63Sopenharmony_ci 5454aa6d63Sopenharmony_ciprivate: 5554aa6d63Sopenharmony_ci int32_t DoMMap(int32_t bufCapacity, int64_t offset, MmapInfo& mmapInfo); 5654aa6d63Sopenharmony_ci bool CheckLittleEndian(); 5754aa6d63Sopenharmony_ci static int32_t memoryPageSize; 5854aa6d63Sopenharmony_ci int32_t fd = 0; 5954aa6d63Sopenharmony_ci int64_t fileLength; 6054aa6d63Sopenharmony_ci}; 6154aa6d63Sopenharmony_ci} // namespace SignatureTools 6254aa6d63Sopenharmony_ci} // namespace OHOS 6354aa6d63Sopenharmony_ci#endif // SIGNATRUETOOLS_RANDOM_ACCESS_FILE_H 64