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_DATA_H
1754aa6d63Sopenharmony_ci#define SIGNATRUETOOLS_ZIP_ENTRY_DATA_H
1854aa6d63Sopenharmony_ci
1954aa6d63Sopenharmony_ci#include <string>
2054aa6d63Sopenharmony_ci
2154aa6d63Sopenharmony_ci#include "data_descriptor.h"
2254aa6d63Sopenharmony_ci#include "zip_entry_header.h"
2354aa6d63Sopenharmony_ci
2454aa6d63Sopenharmony_cinamespace OHOS {
2554aa6d63Sopenharmony_cinamespace SignatureTools {
2654aa6d63Sopenharmony_ci
2754aa6d63Sopenharmony_ciclass ZipEntryData {
2854aa6d63Sopenharmony_cipublic:
2954aa6d63Sopenharmony_ci    /* data descriptor has or not mask */
3054aa6d63Sopenharmony_ci    static constexpr short HAS_DATA_DESCRIPTOR_MASK = 0x08;
3154aa6d63Sopenharmony_ci
3254aa6d63Sopenharmony_ci    /* data descriptor has or not flag mask */
3354aa6d63Sopenharmony_ci    static constexpr short NOT_HAS_DATA_DESCRIPTOR_FLAG = 0;
3454aa6d63Sopenharmony_ci
3554aa6d63Sopenharmony_ci    ZipEntryData()
3654aa6d63Sopenharmony_ci    {
3754aa6d63Sopenharmony_ci        m_zipEntryHeader = nullptr;
3854aa6d63Sopenharmony_ci        m_dataDescriptor = nullptr;
3954aa6d63Sopenharmony_ci    }
4054aa6d63Sopenharmony_ci
4154aa6d63Sopenharmony_ci    ~ZipEntryData()
4254aa6d63Sopenharmony_ci    {
4354aa6d63Sopenharmony_ci        delete m_zipEntryHeader;
4454aa6d63Sopenharmony_ci        delete m_dataDescriptor;
4554aa6d63Sopenharmony_ci    }
4654aa6d63Sopenharmony_ci
4754aa6d63Sopenharmony_ci    ZipEntryHeader* GetZipEntryHeader();
4854aa6d63Sopenharmony_ci
4954aa6d63Sopenharmony_ci    /**
5054aa6d63Sopenharmony_ci     * init zip entry by file
5154aa6d63Sopenharmony_ci     *
5254aa6d63Sopenharmony_ci     * @param file zip file
5354aa6d63Sopenharmony_ci     * @param entryOffset entry start offset
5454aa6d63Sopenharmony_ci     * @param fileSize compress file size
5554aa6d63Sopenharmony_ci     * @return zip entry
5654aa6d63Sopenharmony_ci     * @throws IOException read zip exception
5754aa6d63Sopenharmony_ci     */
5854aa6d63Sopenharmony_ci    static ZipEntryData* GetZipEntry(std::ifstream& input, uint32_t entryOffset, uint32_t fileSize);
5954aa6d63Sopenharmony_ci
6054aa6d63Sopenharmony_ci    void SetZipEntryHeader(ZipEntryHeader* zipEntryHeader);
6154aa6d63Sopenharmony_ci
6254aa6d63Sopenharmony_ci    DataDescriptor* GetDataDescriptor();
6354aa6d63Sopenharmony_ci
6454aa6d63Sopenharmony_ci    void SetDataDescriptor(DataDescriptor* dataDescriptor);
6554aa6d63Sopenharmony_ci
6654aa6d63Sopenharmony_ci    uint32_t GetFileOffset();
6754aa6d63Sopenharmony_ci
6854aa6d63Sopenharmony_ci    void SetFileOffset(uint32_t fileOffset);
6954aa6d63Sopenharmony_ci
7054aa6d63Sopenharmony_ci    uint32_t GetFileSize();
7154aa6d63Sopenharmony_ci
7254aa6d63Sopenharmony_ci    void SetFileSize(uint32_t fileSize);
7354aa6d63Sopenharmony_ci
7454aa6d63Sopenharmony_ci    uint32_t GetLength();
7554aa6d63Sopenharmony_ci
7654aa6d63Sopenharmony_ci    void SetLength(uint32_t length);
7754aa6d63Sopenharmony_ci
7854aa6d63Sopenharmony_ciprivate:
7954aa6d63Sopenharmony_ci    static bool ReadEntryFileNameAndExtraByOffset(std::ifstream& input, ZipEntryHeader* entryHeader,
8054aa6d63Sopenharmony_ci        uint32_t& offset);
8154aa6d63Sopenharmony_ci
8254aa6d63Sopenharmony_ci    ZipEntryHeader* m_zipEntryHeader;
8354aa6d63Sopenharmony_ci
8454aa6d63Sopenharmony_ci    uint32_t m_fileOffset = 0;
8554aa6d63Sopenharmony_ci
8654aa6d63Sopenharmony_ci    uint32_t m_fileSize = 0;
8754aa6d63Sopenharmony_ci
8854aa6d63Sopenharmony_ci    DataDescriptor* m_dataDescriptor;
8954aa6d63Sopenharmony_ci
9054aa6d63Sopenharmony_ci    uint32_t m_length = 0;
9154aa6d63Sopenharmony_ci};
9254aa6d63Sopenharmony_ci} // namespace SignatureTools
9354aa6d63Sopenharmony_ci} // namespace OHOS
9454aa6d63Sopenharmony_ci#endif // SIGNATRUETOOLS_ZIP_ENTRY_DATA_H