| /* |
| * |
| * Copyright (c) 2016-2017 Nest Labs, Inc. |
| * All rights reserved. |
| * |
| * 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. |
| */ |
| |
| /** |
| * @file |
| * This file defines a Wrapper for C++ implementation of WeaveKeyId operations |
| * for pin encryption. |
| * |
| */ |
| |
| #import <Foundation/Foundation.h> |
| |
| NS_ASSUME_NONNULL_BEGIN |
| |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeNone; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeGeneral; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeSession; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppStaticKey; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppRotatingKey; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppRootKey; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppEpochKey; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppGroupMasterKey; |
| extern NSUInteger const NLWeaveKeyIds_KeyTypeAppIntermediateKey; |
| extern NSUInteger const NLWeaveKeyIds_None; |
| extern NSUInteger const NLWeaveKeyIds_FabricSecret; |
| extern NSUInteger const NLWeaveKeyIds_FabricRootKey; |
| extern NSUInteger const NLWeaveKeyIds_ClientRootKey; |
| extern NSUInteger const NLWeaveKeyIds_ServiceRootKey; |
| |
| /** |
| * @class NLWeaveKeyIds |
| * Wrapper for C++ implementation of WeaveKeyId functionality |
| */ |
| @interface NLWeaveKeyIds : NSObject |
| |
| /** |
| * Get Weave key type of the specified key ID. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return type of the key ID. |
| * |
| */ |
| + (UInt32)getType:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of a general type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId has General type. |
| * |
| */ |
| + (BOOL)isGeneralKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of a session type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of a session type. |
| * |
| */ |
| + (BOOL)isSessionKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of an application static type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of an application static type. |
| * |
| */ |
| + (BOOL)isAppStaticKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of an application rotating type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of an application rotating type. |
| * |
| */ |
| + (BOOL)isAppRotatingKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of an application root key type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of an application root key type. |
| * |
| */ |
| + (BOOL)isAppRootKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of an application epoch key type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of an application epoch key type. |
| * |
| */ |
| + (BOOL)isAppEpochKey:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified key ID is of an application group master key type. |
| * |
| * @param[in] keyId Weave key identifier. |
| * @return true if the keyId of an application group master key type. |
| * |
| */ |
| + (BOOL)isAppGroupMasterKey:(UInt32)keyId; |
| |
| /** |
| * Construct session key ID given session key number. |
| * |
| * @param[in] sessionKeyNumber Session key number. |
| * @return session key ID. |
| * |
| */ |
| + (UInt16)makeSessionKeyId:(UInt16)sessionKeyNumber; |
| |
| /** |
| * Construct general key ID given general key number. |
| * |
| * @param[in] generalKeyNumber General key number. |
| * @return general key ID. |
| * |
| */ |
| + (UInt16)makeGeneralKeyId:(UInt16)generalKeyNumber; |
| |
| /** |
| * Get application group root key ID that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return root key ID. |
| * |
| */ |
| + (UInt32)getRootKeyId:(UInt32)keyId; |
| |
| /** |
| * Get application group epoch key ID that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return epoch key ID. |
| * |
| */ |
| + (UInt32)getEpochKeyId:(UInt32)keyId; |
| |
| /** |
| * Get application group master key ID that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return application group master key ID. |
| * |
| */ |
| + (UInt32)getAppGroupMasterKeyId:(UInt32)keyId; |
| |
| /** |
| * Get application group root key number that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return root key number. |
| * |
| */ |
| + (UInt8)getRootKeyNumber:(UInt32)keyId; |
| |
| /** |
| * Get application group epoch key number that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return epoch key number. |
| * |
| */ |
| + (UInt8)getEpochKeyNumber:(UInt32)keyId; |
| |
| /** |
| * Get application group local number that was used to derive specified application key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return application group local number. |
| * |
| */ |
| + (UInt8)getAppGroupLocalNumber:(UInt32)keyId; |
| |
| /** |
| * Construct application group root key ID given root key number. |
| * |
| * @param[in] epochKeyNumber Root key number. |
| * @return root key ID. |
| * |
| */ |
| + (UInt32)makeRootKeyId:(UInt8)epochKeyNumber; |
| |
| /** |
| * Construct application group root key ID given epoch key number. |
| * |
| * @param[in] epochKeyNumber Epoch key number. |
| * @return epoch key ID. |
| * |
| */ |
| + (UInt32)makeEpochKeyId:(UInt8)epochKeyNumber; |
| |
| /** |
| * Construct application group master key ID given application group local number. |
| * |
| * @param[in] appGroupMasterKeyLocalId Application group local number. |
| * @return application group master key ID. |
| * |
| */ |
| + (UInt32)makeAppGroupMasterKeyId:(UInt32)appGroupMasterKeyLocalId; |
| |
| /** |
| * Convert application group key ID to application current key ID. |
| * |
| * @param[in] keyId Application key ID. |
| * @return application current key ID. |
| * |
| */ |
| + (UInt32)convertToCurrentAppKeyId:(UInt32)keyId; |
| |
| /** |
| * Determine whether the specified application group key ID incorporates epoch key. |
| * |
| * @param[in] keyId Weave application group key identifier. |
| * @return true if the keyId incorporates epoch key. |
| * |
| */ |
| + (BOOL)incorporatesEpochKey:(UInt32)keyId; |
| |
| + (BOOL)usesCurrentEpochKey:(UInt32)keyId; |
| |
| + (BOOL)incorporatesRootKey:(UInt32)keyId; |
| |
| + (BOOL)incorporatesAppGroupMasterKey:(UInt32)keyId; |
| |
| + (UInt32)makeAppKeyId:(UInt32)keyType |
| rootKeyId:(UInt32)rootKeyId |
| epochKeyId:(UInt32)epochKeyId |
| appGroupMasterKeyId:(UInt32)appGroupMasterKeyId |
| useCurrentEpochKey:(BOOL)useCurrentEpochKey; |
| |
| + (UInt32)makeAppIntermediateKeyId:(UInt32)rootKeyId epochKeyId:(UInt32)epochKeyId useCurrentEpochKey:(BOOL)useCurrentEpochKey; |
| |
| + (UInt32)makeAppRotatingKeyId:(UInt32)rootKeyId |
| epochKeyId:(UInt32)epochKeyId |
| appGroupMasterKeyId:(UInt32)appGroupMasterKeyId |
| useCurrentEpochKey:(BOOL)useCurrentEpochKey; |
| |
| + (UInt32)makeAppStaticKeyId:(UInt32)rootKeyId appGroupMasterKeyId:(UInt32)appGroupMasterKeyId; |
| |
| + (UInt32)convertToStaticAppKeyId:(UInt32)keyId; |
| |
| + (UInt32)updateEpochKeyId:(UInt32)keyId epochKeyId:(UInt32)epochKeyId; |
| |
| + (BOOL)isValidKeyId:(UInt32)keyId; |
| |
| + (NSString *)describeKey:(UInt32)keyId; |
| |
| @end |
| NS_ASSUME_NONNULL_END |