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#include "zip_entry_header.h" 1754aa6d63Sopenharmony_ci#include "signature_tools_log.h" 1854aa6d63Sopenharmony_ci 1954aa6d63Sopenharmony_cinamespace OHOS { 2054aa6d63Sopenharmony_cinamespace SignatureTools { 2154aa6d63Sopenharmony_ciZipEntryHeader* ZipEntryHeader::GetZipEntryHeader(const std::string& bytes) 2254aa6d63Sopenharmony_ci{ 2354aa6d63Sopenharmony_ci ZipEntryHeader* entryHeader = new ZipEntryHeader(); 2454aa6d63Sopenharmony_ci ByteBuffer bf(bytes.c_str(), bytes.size()); 2554aa6d63Sopenharmony_ci 2654aa6d63Sopenharmony_ci int32_t entryHeaderInt32Value; 2754aa6d63Sopenharmony_ci bf.GetInt32(entryHeaderInt32Value); 2854aa6d63Sopenharmony_ci if (entryHeaderInt32Value != ZipEntryHeader::SIGNATURE) { 2954aa6d63Sopenharmony_ci delete entryHeader; 3054aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGE("find zip entry head failed"); 3154aa6d63Sopenharmony_ci return nullptr; 3254aa6d63Sopenharmony_ci } 3354aa6d63Sopenharmony_ci 3454aa6d63Sopenharmony_ci int16_t entryHeaderInt16Value; 3554aa6d63Sopenharmony_ci bf.GetInt16(entryHeaderInt16Value); 3654aa6d63Sopenharmony_ci entryHeader->SetVersion(entryHeaderInt16Value); 3754aa6d63Sopenharmony_ci 3854aa6d63Sopenharmony_ci bf.GetInt16(entryHeaderInt16Value); 3954aa6d63Sopenharmony_ci entryHeader->SetFlag(entryHeaderInt16Value); 4054aa6d63Sopenharmony_ci 4154aa6d63Sopenharmony_ci bf.GetInt16(entryHeaderInt16Value); 4254aa6d63Sopenharmony_ci entryHeader->SetMethod(entryHeaderInt16Value); 4354aa6d63Sopenharmony_ci 4454aa6d63Sopenharmony_ci bf.GetInt16(entryHeaderInt16Value); 4554aa6d63Sopenharmony_ci entryHeader->SetLastTime(entryHeaderInt16Value); 4654aa6d63Sopenharmony_ci 4754aa6d63Sopenharmony_ci bf.GetInt16(entryHeaderInt16Value); 4854aa6d63Sopenharmony_ci entryHeader->SetLastDate(entryHeaderInt16Value); 4954aa6d63Sopenharmony_ci 5054aa6d63Sopenharmony_ci bf.GetInt32(entryHeaderInt32Value); 5154aa6d63Sopenharmony_ci entryHeader->SetCrc32(entryHeaderInt32Value); 5254aa6d63Sopenharmony_ci 5354aa6d63Sopenharmony_ci uint32_t entryHeaderUInt32Value; 5454aa6d63Sopenharmony_ci bf.GetUInt32(entryHeaderUInt32Value); 5554aa6d63Sopenharmony_ci entryHeader->SetCompressedSize(entryHeaderUInt32Value); 5654aa6d63Sopenharmony_ci 5754aa6d63Sopenharmony_ci bf.GetUInt32(entryHeaderUInt32Value); 5854aa6d63Sopenharmony_ci entryHeader->SetUnCompressedSize(entryHeaderUInt32Value); 5954aa6d63Sopenharmony_ci 6054aa6d63Sopenharmony_ci uint16_t entryHeaderUInt16Value; 6154aa6d63Sopenharmony_ci bf.GetUInt16(entryHeaderUInt16Value); 6254aa6d63Sopenharmony_ci entryHeader->SetFileNameLength(entryHeaderUInt16Value); 6354aa6d63Sopenharmony_ci 6454aa6d63Sopenharmony_ci bf.GetUInt16(entryHeaderUInt16Value); 6554aa6d63Sopenharmony_ci entryHeader->SetExtraLength(entryHeaderUInt16Value); 6654aa6d63Sopenharmony_ci 6754aa6d63Sopenharmony_ci entryHeader->SetLength(HEADER_LENGTH + entryHeader->GetFileNameLength() + entryHeader->GetExtraLength()); 6854aa6d63Sopenharmony_ci 6954aa6d63Sopenharmony_ci return entryHeader; 7054aa6d63Sopenharmony_ci} 7154aa6d63Sopenharmony_ci 7254aa6d63Sopenharmony_civoid ZipEntryHeader::ReadFileName(const std::string& bytes) 7354aa6d63Sopenharmony_ci{ 7454aa6d63Sopenharmony_ci ByteBuffer bf(bytes.c_str(), bytes.size()); 7554aa6d63Sopenharmony_ci if (m_fileNameLength > 0) { 7654aa6d63Sopenharmony_ci std::string nameBytes(m_fileNameLength, 0); 7754aa6d63Sopenharmony_ci bf.GetData(&nameBytes[0], m_fileNameLength); 7854aa6d63Sopenharmony_ci m_fileName = nameBytes; 7954aa6d63Sopenharmony_ci } 8054aa6d63Sopenharmony_ci} 8154aa6d63Sopenharmony_ci 8254aa6d63Sopenharmony_civoid ZipEntryHeader::ReadExtra(const std::string& bytes) 8354aa6d63Sopenharmony_ci{ 8454aa6d63Sopenharmony_ci ByteBuffer bf(bytes.c_str(), bytes.size()); 8554aa6d63Sopenharmony_ci if (m_extraLength > 0) { 8654aa6d63Sopenharmony_ci std::string extra(m_extraLength, 0); 8754aa6d63Sopenharmony_ci bf.GetData(&extra[0], m_extraLength); 8854aa6d63Sopenharmony_ci m_extraData = extra; 8954aa6d63Sopenharmony_ci } 9054aa6d63Sopenharmony_ci} 9154aa6d63Sopenharmony_ci 9254aa6d63Sopenharmony_cistd::string ZipEntryHeader::ToBytes() 9354aa6d63Sopenharmony_ci{ 9454aa6d63Sopenharmony_ci ByteBuffer bf(m_length); 9554aa6d63Sopenharmony_ci 9654aa6d63Sopenharmony_ci bf.PutInt32(SIGNATURE); 9754aa6d63Sopenharmony_ci bf.PutInt16(m_version); 9854aa6d63Sopenharmony_ci bf.PutInt16(m_flag); 9954aa6d63Sopenharmony_ci bf.PutInt16(m_method); 10054aa6d63Sopenharmony_ci bf.PutInt16(m_lastTime); 10154aa6d63Sopenharmony_ci bf.PutInt16(m_lastDate); 10254aa6d63Sopenharmony_ci bf.PutInt32(m_crc32); 10354aa6d63Sopenharmony_ci bf.PutUInt32(m_compressedSize); 10454aa6d63Sopenharmony_ci bf.PutUInt32(m_unCompressedSize); 10554aa6d63Sopenharmony_ci bf.PutUInt16(m_fileNameLength); 10654aa6d63Sopenharmony_ci bf.PutUInt16(m_extraLength); 10754aa6d63Sopenharmony_ci 10854aa6d63Sopenharmony_ci if (m_fileNameLength > 0) { 10954aa6d63Sopenharmony_ci bf.PutData(m_fileName.c_str(), m_fileName.size()); 11054aa6d63Sopenharmony_ci } 11154aa6d63Sopenharmony_ci if (m_extraLength > 0) { 11254aa6d63Sopenharmony_ci bf.PutData(m_extraData.c_str(), m_extraData.size()); 11354aa6d63Sopenharmony_ci } 11454aa6d63Sopenharmony_ci 11554aa6d63Sopenharmony_ci return bf.ToString(); 11654aa6d63Sopenharmony_ci} 11754aa6d63Sopenharmony_ci 11854aa6d63Sopenharmony_ciint ZipEntryHeader::GetHeaderLength() 11954aa6d63Sopenharmony_ci{ 12054aa6d63Sopenharmony_ci return HEADER_LENGTH; 12154aa6d63Sopenharmony_ci} 12254aa6d63Sopenharmony_ci 12354aa6d63Sopenharmony_ciint ZipEntryHeader::GetSIGNATURE() 12454aa6d63Sopenharmony_ci{ 12554aa6d63Sopenharmony_ci return SIGNATURE; 12654aa6d63Sopenharmony_ci} 12754aa6d63Sopenharmony_ci 12854aa6d63Sopenharmony_cishort ZipEntryHeader::GetVersion() 12954aa6d63Sopenharmony_ci{ 13054aa6d63Sopenharmony_ci return m_version; 13154aa6d63Sopenharmony_ci} 13254aa6d63Sopenharmony_ci 13354aa6d63Sopenharmony_civoid ZipEntryHeader::SetVersion(short version) 13454aa6d63Sopenharmony_ci{ 13554aa6d63Sopenharmony_ci m_version = version; 13654aa6d63Sopenharmony_ci} 13754aa6d63Sopenharmony_ci 13854aa6d63Sopenharmony_cishort ZipEntryHeader::GetFlag() 13954aa6d63Sopenharmony_ci{ 14054aa6d63Sopenharmony_ci return m_flag; 14154aa6d63Sopenharmony_ci} 14254aa6d63Sopenharmony_ci 14354aa6d63Sopenharmony_civoid ZipEntryHeader::SetFlag(short flag) 14454aa6d63Sopenharmony_ci{ 14554aa6d63Sopenharmony_ci m_flag = flag; 14654aa6d63Sopenharmony_ci} 14754aa6d63Sopenharmony_ci 14854aa6d63Sopenharmony_cishort ZipEntryHeader::GetMethod() 14954aa6d63Sopenharmony_ci{ 15054aa6d63Sopenharmony_ci return m_method; 15154aa6d63Sopenharmony_ci} 15254aa6d63Sopenharmony_ci 15354aa6d63Sopenharmony_civoid ZipEntryHeader::SetMethod(short method) 15454aa6d63Sopenharmony_ci{ 15554aa6d63Sopenharmony_ci m_method = method; 15654aa6d63Sopenharmony_ci} 15754aa6d63Sopenharmony_ci 15854aa6d63Sopenharmony_cishort ZipEntryHeader::GetLastTime() 15954aa6d63Sopenharmony_ci{ 16054aa6d63Sopenharmony_ci return m_lastTime; 16154aa6d63Sopenharmony_ci} 16254aa6d63Sopenharmony_ci 16354aa6d63Sopenharmony_civoid ZipEntryHeader::SetLastTime(short lastTime) 16454aa6d63Sopenharmony_ci{ 16554aa6d63Sopenharmony_ci m_lastTime = lastTime; 16654aa6d63Sopenharmony_ci} 16754aa6d63Sopenharmony_ci 16854aa6d63Sopenharmony_cishort ZipEntryHeader::GetLastDate() 16954aa6d63Sopenharmony_ci{ 17054aa6d63Sopenharmony_ci return m_lastDate; 17154aa6d63Sopenharmony_ci} 17254aa6d63Sopenharmony_ci 17354aa6d63Sopenharmony_civoid ZipEntryHeader::SetLastDate(short lastDate) 17454aa6d63Sopenharmony_ci{ 17554aa6d63Sopenharmony_ci m_lastDate = lastDate; 17654aa6d63Sopenharmony_ci} 17754aa6d63Sopenharmony_ci 17854aa6d63Sopenharmony_ciint ZipEntryHeader::GetCrc32() 17954aa6d63Sopenharmony_ci{ 18054aa6d63Sopenharmony_ci return m_crc32; 18154aa6d63Sopenharmony_ci} 18254aa6d63Sopenharmony_ci 18354aa6d63Sopenharmony_civoid ZipEntryHeader::SetCrc32(int crc32) 18454aa6d63Sopenharmony_ci{ 18554aa6d63Sopenharmony_ci m_crc32 = crc32; 18654aa6d63Sopenharmony_ci} 18754aa6d63Sopenharmony_ci 18854aa6d63Sopenharmony_ciuint32_t ZipEntryHeader::GetCompressedSize() 18954aa6d63Sopenharmony_ci{ 19054aa6d63Sopenharmony_ci return m_compressedSize; 19154aa6d63Sopenharmony_ci} 19254aa6d63Sopenharmony_ci 19354aa6d63Sopenharmony_civoid ZipEntryHeader::SetCompressedSize(uint32_t compressedSize) 19454aa6d63Sopenharmony_ci{ 19554aa6d63Sopenharmony_ci m_compressedSize = compressedSize; 19654aa6d63Sopenharmony_ci} 19754aa6d63Sopenharmony_ci 19854aa6d63Sopenharmony_ciuint32_t ZipEntryHeader::GetUnCompressedSize() 19954aa6d63Sopenharmony_ci{ 20054aa6d63Sopenharmony_ci return m_unCompressedSize; 20154aa6d63Sopenharmony_ci} 20254aa6d63Sopenharmony_ci 20354aa6d63Sopenharmony_civoid ZipEntryHeader::SetUnCompressedSize(uint32_t unCompressedSize) 20454aa6d63Sopenharmony_ci{ 20554aa6d63Sopenharmony_ci m_unCompressedSize = unCompressedSize; 20654aa6d63Sopenharmony_ci} 20754aa6d63Sopenharmony_ci 20854aa6d63Sopenharmony_ciuint16_t ZipEntryHeader::GetFileNameLength() 20954aa6d63Sopenharmony_ci{ 21054aa6d63Sopenharmony_ci return m_fileNameLength; 21154aa6d63Sopenharmony_ci} 21254aa6d63Sopenharmony_ci 21354aa6d63Sopenharmony_civoid ZipEntryHeader::SetFileNameLength(uint16_t fileNameLength) 21454aa6d63Sopenharmony_ci{ 21554aa6d63Sopenharmony_ci m_fileNameLength = fileNameLength; 21654aa6d63Sopenharmony_ci} 21754aa6d63Sopenharmony_ci 21854aa6d63Sopenharmony_ciuint16_t ZipEntryHeader::GetExtraLength() 21954aa6d63Sopenharmony_ci{ 22054aa6d63Sopenharmony_ci return m_extraLength; 22154aa6d63Sopenharmony_ci} 22254aa6d63Sopenharmony_ci 22354aa6d63Sopenharmony_civoid ZipEntryHeader::SetExtraLength(uint16_t extraLength) 22454aa6d63Sopenharmony_ci{ 22554aa6d63Sopenharmony_ci m_extraLength = extraLength; 22654aa6d63Sopenharmony_ci} 22754aa6d63Sopenharmony_ci 22854aa6d63Sopenharmony_cistd::string ZipEntryHeader::GetFileName() const 22954aa6d63Sopenharmony_ci{ 23054aa6d63Sopenharmony_ci return m_fileName; 23154aa6d63Sopenharmony_ci} 23254aa6d63Sopenharmony_ci 23354aa6d63Sopenharmony_civoid ZipEntryHeader::SetFileName(const std::string& fileName) 23454aa6d63Sopenharmony_ci{ 23554aa6d63Sopenharmony_ci m_fileName = fileName; 23654aa6d63Sopenharmony_ci} 23754aa6d63Sopenharmony_ci 23854aa6d63Sopenharmony_cistd::string ZipEntryHeader::GetExtraData() const 23954aa6d63Sopenharmony_ci{ 24054aa6d63Sopenharmony_ci return m_extraData; 24154aa6d63Sopenharmony_ci} 24254aa6d63Sopenharmony_ci 24354aa6d63Sopenharmony_civoid ZipEntryHeader::SetExtraData(const std::string& extraData) 24454aa6d63Sopenharmony_ci{ 24554aa6d63Sopenharmony_ci m_extraData = extraData; 24654aa6d63Sopenharmony_ci} 24754aa6d63Sopenharmony_ci 24854aa6d63Sopenharmony_ciuint32_t ZipEntryHeader::GetLength() 24954aa6d63Sopenharmony_ci{ 25054aa6d63Sopenharmony_ci return m_length; 25154aa6d63Sopenharmony_ci} 25254aa6d63Sopenharmony_ci 25354aa6d63Sopenharmony_civoid ZipEntryHeader::SetLength(uint32_t length) 25454aa6d63Sopenharmony_ci{ 25554aa6d63Sopenharmony_ci m_length = length; 25654aa6d63Sopenharmony_ci} 25754aa6d63Sopenharmony_ci} // namespace SignatureTools 25854aa6d63Sopenharmony_ci} // namespace OHOS