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_ZIP_ENTRY_HEADER_H 1754aa6d63Sopenharmony_ci#define SIGNATRUETOOLS_ZIP_ENTRY_HEADER_H 1854aa6d63Sopenharmony_ci 1954aa6d63Sopenharmony_ci#include <string> 2054aa6d63Sopenharmony_ci 2154aa6d63Sopenharmony_ci#include "byte_buffer.h" 2254aa6d63Sopenharmony_ci 2354aa6d63Sopenharmony_cinamespace OHOS { 2454aa6d63Sopenharmony_cinamespace SignatureTools { 2554aa6d63Sopenharmony_ci/** 2654aa6d63Sopenharmony_ci * resolve zip ZipEntryHeader data 2754aa6d63Sopenharmony_ci * end of central dir signature 4 bytes (0x06054b50) 2854aa6d63Sopenharmony_ci * number of this disk 2 bytes 2954aa6d63Sopenharmony_ci * number of the disk with the 3054aa6d63Sopenharmony_ci * start of the central directory 2 bytes 3154aa6d63Sopenharmony_ci * total number of entries in the 3254aa6d63Sopenharmony_ci * central directory on this disk 2 bytes 3354aa6d63Sopenharmony_ci * total number of entries in 3454aa6d63Sopenharmony_ci * the central directory 2 bytes 3554aa6d63Sopenharmony_ci * size of the central directory 4 bytes 3654aa6d63Sopenharmony_ci * offset of start of central 3754aa6d63Sopenharmony_ci * directory with respect to 3854aa6d63Sopenharmony_ci * the starting disk number 4 bytes 3954aa6d63Sopenharmony_ci * .ZIP file comment length 2 bytes 4054aa6d63Sopenharmony_ci * .ZIP file comment (variable size) 4154aa6d63Sopenharmony_ci */ 4254aa6d63Sopenharmony_ciclass ZipEntryHeader { 4354aa6d63Sopenharmony_cipublic: 4454aa6d63Sopenharmony_ci /* ZipEntryHeader invariable bytes length */ 4554aa6d63Sopenharmony_ci static constexpr int HEADER_LENGTH = 30; 4654aa6d63Sopenharmony_ci 4754aa6d63Sopenharmony_ci /* 4 bytes , entry header signature */ 4854aa6d63Sopenharmony_ci static constexpr int SIGNATURE = 0x04034b50; 4954aa6d63Sopenharmony_ci 5054aa6d63Sopenharmony_ci /** 5154aa6d63Sopenharmony_ci * get Zip Entry Header 5254aa6d63Sopenharmony_ci * 5354aa6d63Sopenharmony_ci * @param bytes ZipEntryHeader bytes 5454aa6d63Sopenharmony_ci * @return ZipEntryHeader 5554aa6d63Sopenharmony_ci * @throws ZipException read entry header exception 5654aa6d63Sopenharmony_ci */ 5754aa6d63Sopenharmony_ci static ZipEntryHeader* GetZipEntryHeader(const std::string& bytes); 5854aa6d63Sopenharmony_ci 5954aa6d63Sopenharmony_ci void ReadFileName(const std::string& bytes); 6054aa6d63Sopenharmony_ci 6154aa6d63Sopenharmony_ci void ReadExtra(const std::string& bytes); 6254aa6d63Sopenharmony_ci 6354aa6d63Sopenharmony_ci std::string ToBytes(); 6454aa6d63Sopenharmony_ci 6554aa6d63Sopenharmony_ci static int GetHeaderLength(); 6654aa6d63Sopenharmony_ci 6754aa6d63Sopenharmony_ci static int GetSIGNATURE(); 6854aa6d63Sopenharmony_ci 6954aa6d63Sopenharmony_ci short GetVersion(); 7054aa6d63Sopenharmony_ci 7154aa6d63Sopenharmony_ci void SetVersion(short version); 7254aa6d63Sopenharmony_ci 7354aa6d63Sopenharmony_ci short GetFlag(); 7454aa6d63Sopenharmony_ci 7554aa6d63Sopenharmony_ci void SetFlag(short flag); 7654aa6d63Sopenharmony_ci 7754aa6d63Sopenharmony_ci short GetMethod(); 7854aa6d63Sopenharmony_ci 7954aa6d63Sopenharmony_ci void SetMethod(short method); 8054aa6d63Sopenharmony_ci 8154aa6d63Sopenharmony_ci short GetLastTime(); 8254aa6d63Sopenharmony_ci 8354aa6d63Sopenharmony_ci void SetLastTime(short lastTime); 8454aa6d63Sopenharmony_ci 8554aa6d63Sopenharmony_ci short GetLastDate(); 8654aa6d63Sopenharmony_ci 8754aa6d63Sopenharmony_ci void SetLastDate(short lastDate); 8854aa6d63Sopenharmony_ci 8954aa6d63Sopenharmony_ci int GetCrc32(); 9054aa6d63Sopenharmony_ci 9154aa6d63Sopenharmony_ci void SetCrc32(int crc32); 9254aa6d63Sopenharmony_ci 9354aa6d63Sopenharmony_ci uint32_t GetCompressedSize(); 9454aa6d63Sopenharmony_ci 9554aa6d63Sopenharmony_ci void SetCompressedSize(uint32_t compressedSize); 9654aa6d63Sopenharmony_ci 9754aa6d63Sopenharmony_ci uint32_t GetUnCompressedSize(); 9854aa6d63Sopenharmony_ci 9954aa6d63Sopenharmony_ci void SetUnCompressedSize(uint32_t unCompressedSize); 10054aa6d63Sopenharmony_ci 10154aa6d63Sopenharmony_ci uint16_t GetFileNameLength(); 10254aa6d63Sopenharmony_ci 10354aa6d63Sopenharmony_ci void SetFileNameLength(uint16_t fileNameLength); 10454aa6d63Sopenharmony_ci 10554aa6d63Sopenharmony_ci uint16_t GetExtraLength(); 10654aa6d63Sopenharmony_ci 10754aa6d63Sopenharmony_ci void SetExtraLength(uint16_t extraLength); 10854aa6d63Sopenharmony_ci 10954aa6d63Sopenharmony_ci std::string GetFileName() const; 11054aa6d63Sopenharmony_ci 11154aa6d63Sopenharmony_ci void SetFileName(const std::string& fileName); 11254aa6d63Sopenharmony_ci 11354aa6d63Sopenharmony_ci std::string GetExtraData() const; 11454aa6d63Sopenharmony_ci 11554aa6d63Sopenharmony_ci void SetExtraData(const std::string& extraData); 11654aa6d63Sopenharmony_ci 11754aa6d63Sopenharmony_ci uint32_t GetLength(); 11854aa6d63Sopenharmony_ci 11954aa6d63Sopenharmony_ci void SetLength(uint32_t length); 12054aa6d63Sopenharmony_ci 12154aa6d63Sopenharmony_ciprivate: 12254aa6d63Sopenharmony_ci /* 2 bytes */ 12354aa6d63Sopenharmony_ci short m_version = 0; 12454aa6d63Sopenharmony_ci 12554aa6d63Sopenharmony_ci /* 2 bytes */ 12654aa6d63Sopenharmony_ci short m_flag = 0; 12754aa6d63Sopenharmony_ci 12854aa6d63Sopenharmony_ci /* 2 bytes */ 12954aa6d63Sopenharmony_ci short m_method = 0; 13054aa6d63Sopenharmony_ci 13154aa6d63Sopenharmony_ci /* 2 bytes */ 13254aa6d63Sopenharmony_ci short m_lastTime = 0; 13354aa6d63Sopenharmony_ci 13454aa6d63Sopenharmony_ci /* 2 bytes */ 13554aa6d63Sopenharmony_ci short m_lastDate = 0; 13654aa6d63Sopenharmony_ci 13754aa6d63Sopenharmony_ci /* 4 bytes */ 13854aa6d63Sopenharmony_ci int m_crc32 = 0; 13954aa6d63Sopenharmony_ci 14054aa6d63Sopenharmony_ci /* 4 bytes */ 14154aa6d63Sopenharmony_ci uint32_t m_compressedSize = 0; 14254aa6d63Sopenharmony_ci 14354aa6d63Sopenharmony_ci /* 4 bytes */ 14454aa6d63Sopenharmony_ci uint32_t m_unCompressedSize = 0; 14554aa6d63Sopenharmony_ci 14654aa6d63Sopenharmony_ci /* 2 bytes */ 14754aa6d63Sopenharmony_ci uint16_t m_fileNameLength = 0; 14854aa6d63Sopenharmony_ci 14954aa6d63Sopenharmony_ci /* 2 bytes */ 15054aa6d63Sopenharmony_ci uint16_t m_extraLength = 0; 15154aa6d63Sopenharmony_ci 15254aa6d63Sopenharmony_ci /* n bytes */ 15354aa6d63Sopenharmony_ci std::string m_fileName; 15454aa6d63Sopenharmony_ci 15554aa6d63Sopenharmony_ci /* n bytes */ 15654aa6d63Sopenharmony_ci std::string m_extraData; 15754aa6d63Sopenharmony_ci 15854aa6d63Sopenharmony_ci uint32_t m_length = 0; 15954aa6d63Sopenharmony_ci}; 16054aa6d63Sopenharmony_ci} // namespace SignatureTools 16154aa6d63Sopenharmony_ci} // namespace OHOS 16254aa6d63Sopenharmony_ci#endif // SIGNATRUETOOLS_ZIP_ENTRY_HEADER_H