| /** |
| * |
| * Copyright (c) 2022-2023 Project CHIP Authors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #import <Matter/MTRDefines.h> |
| |
| /** |
| * A representation of an OTA image header as defined in the Matter |
| * specification's "Over-the-Air (OTA) Software Update File Format" section. |
| */ |
| |
| NS_ASSUME_NONNULL_BEGIN |
| |
| typedef NS_ENUM(NSUInteger, MTROTAImageDigestType) { |
| MTROTAImageDigestTypeSha256 = 1, |
| MTROTAImageDigestTypeSha256_128, |
| MTROTAImageDigestTypeSha256_120, |
| MTROTAImageDigestTypeSha256_96, |
| MTROTAImageDigestTypeSha256_64, |
| MTROTAImageDigestTypeSha256_32, |
| MTROTAImageDigestTypeSha384, |
| MTROTAImageDigestTypeSha512, |
| MTROTAImageDigestTypeSha3_224, |
| MTROTAImageDigestTypeSha3_256, |
| MTROTAImageDigestTypeSha3_384, |
| MTROTAImageDigestTypeSha3_512, |
| }; |
| |
| @interface MTROTAHeader : NSObject |
| |
| /** |
| * Initialize the MTROTAHeader with the given Matter OTA software image data (as defined in the |
| * "Over-the-Air (OTA) Software Update File Format" section of the Matter specification). The |
| * provided data is expected to point to a large enough initial chunk of an OTA software image that |
| * it includes the entire header (e.g. the entire image). |
| * |
| * If the passed-in data is too small and does not contain the entire OTA image header, initWithData |
| * will return nil and the caller should try creating a new MTROTAHeader object and initializing it |
| * with a larger chunk of the image. |
| */ |
| - (instancetype)initWithData:(NSData *)data API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)); |
| |
| /** |
| * The identifier of the vendor whose product this image is meant for. |
| * |
| * This field can be compared to the vendor id received in the Query Image |
| * command to determine whether an image matches. |
| * |
| * This field may be 0, in which case the image might apply to products from |
| * more than one vendor. If it's nonzero, it must match the vendor id in Query |
| * Image for this image to be considered. |
| */ |
| @property (nonatomic, copy) NSNumber * vendorID; |
| |
| /** |
| * The identifier of the specific product the image is meant for. May be 0, if |
| * the image might apply to more than one product. This is allowed, but not |
| * required, to be matched against the product id received in Query Image. |
| */ |
| @property (nonatomic, copy) NSNumber * productID; |
| |
| /** |
| * The size of the actual image payload, which follows the header in the OTA |
| * file. |
| */ |
| @property (nonatomic, copy) NSNumber * payloadSize; |
| |
| /** |
| * The version of the software contained in this image. This is the version the |
| * OTA requestor will be updated to if this image is installed. This can be |
| * used to determine whether this image is newer than what the requestor is |
| * currently running, by comparing it to the SoftwareVersion in the Query Image |
| * command. |
| */ |
| @property (nonatomic, copy) NSNumber * softwareVersion; |
| |
| /** |
| * Human-readable version of softwareVersion. This must not be used for |
| * deciding which versions are newer or older; use softwareVersion for that. |
| */ |
| @property (nonatomic, copy) NSString * softwareVersionString; |
| |
| /** |
| * If not nil a URL pointing to release notes for the software update |
| * represented by the image. |
| */ |
| @property (nonatomic, copy, nullable) NSString * releaseNotesURL; |
| |
| /** |
| * A digest of the payload that follows the header. Can be used to verify that |
| * the payload is not truncated or corrupted. |
| */ |
| @property (nonatomic, copy) NSData * imageDigest; |
| |
| /** |
| * The specific algorithm that was used to compute imageDigest. |
| */ |
| @property (nonatomic, assign) MTROTAImageDigestType imageDigestType; |
| |
| /** |
| * If not nil, specifies the smallest software version that this update can be |
| * applied on top of. In that case, this value must be compared to the |
| * SoftwareVersion in the QueryImage command to check whether this image is |
| * valid for the OTA requestor. |
| */ |
| @property (nonatomic, copy, nullable) NSNumber * minApplicableVersion; |
| |
| /** |
| * If not nil, specifies the largest software version that this update can be |
| * applied on top of. In that case, this value must be compared to the |
| * SoftwareVersion in the QueryImage command to check whether this image is |
| * valid for the OTA requestor. |
| */ |
| @property (nonatomic, copy, nullable) NSNumber * maxApplicableVersion; |
| |
| @end |
| |
| MTR_DEPRECATED("Please use MTROTAHeader's initWithData:", ios(16.1, 16.4), macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4)) |
| @interface MTROTAHeaderParser : NSObject |
| + (nullable MTROTAHeader *)headerFromData:(NSData *)data error:(NSError * __autoreleasing *)error; |
| @end |
| |
| NS_ASSUME_NONNULL_END |