/* * Copyright 2021 Google LLC * * 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 "FirebaseAppCheck/Sources/AppAttestProvider/Storage/FIRAppAttestStoredArtifact.h" static NSString *const kKeyIDKey = @"keyID"; static NSString *const kArtifactKey = @"artifact"; static NSString *const kStorageVersionKey = @"storageVersion"; static NSInteger const kStorageVersion = 1; @implementation FIRAppAttestStoredArtifact - (instancetype)initWithKeyID:(NSString *)keyID artifact:(NSData *)artifact { self = [super init]; if (self) { _keyID = keyID; _artifact = artifact; } return self; } - (NSInteger)storageVersion { return kStorageVersion; } #pragma mark - NSSecureCoding + (BOOL)supportsSecureCoding { return YES; } - (void)encodeWithCoder:(nonnull NSCoder *)coder { [coder encodeObject:self.keyID forKey:kKeyIDKey]; [coder encodeObject:self.artifact forKey:kArtifactKey]; [coder encodeInteger:self.storageVersion forKey:kStorageVersionKey]; } - (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { NSInteger storageVersion = [coder decodeIntegerForKey:kStorageVersionKey]; if (storageVersion < kStorageVersion) { // Handle migration here when new versions are added } // If the version of the stored object is equal or higher than the current version then try the // best to get enough data to initialize the object. NSString *keyID = [coder decodeObjectOfClass:[NSString class] forKey:kKeyIDKey]; if (keyID.length < 1) { return nil; } NSData *artifact = [coder decodeObjectOfClass:[NSData class] forKey:kArtifactKey]; if (artifact.length < 1) { return nil; } return [self initWithKeyID:keyID artifact:artifact]; } @end