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