1/*
2 * Copyright (c) 2024-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef SIGNATRUETOOLS_ZIP_ENTRY_H
17#define SIGNATRUETOOLS_ZIP_ENTRY_H
18
19#include "central_directory.h"
20#include "zip_entry_data.h"
21
22namespace OHOS {
23namespace SignatureTools {
24class ZipEntry {
25public:
26    ZipEntry()
27    {
28        m_zipEntryData = nullptr;
29        m_fileEntryInCentralDirectory = nullptr;
30    }
31
32    ~ZipEntry()
33    {
34        delete m_zipEntryData;
35        delete m_fileEntryInCentralDirectory;
36    }
37
38    ZipEntryData* GetZipEntryData();
39
40    void SetZipEntryData(ZipEntryData* zipEntryData);
41
42    CentralDirectory* GetCentralDirectory();
43
44    void SetCentralDirectory(CentralDirectory* centralDirectory);
45
46    int Alignment(int alignNum);
47
48private:
49    bool CalZeroPaddingLengthForEntryExtra(uint16_t& padding);
50
51    bool SetCenterDirectoryNewExtraLength(uint16_t newLength);
52
53    bool SetEntryHeaderNewExtraLength(uint16_t newLength);
54
55    bool GetAlignmentNewExtra(uint16_t newLength, const std::string& old, std::string& res);
56
57    ZipEntryData* m_zipEntryData;
58
59    CentralDirectory* m_fileEntryInCentralDirectory;
60};
61} // namespace SignatureTools
62} // namespace OHOS
63#endif // SIGNATRUETOOLS_ZIP_ENTRY_H