blob: 01dd50175c04dfdf90556037bb7c58963f4a3066 [file] [log] [blame]
/*
*
* 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 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 fabric key ID given fabric key number.
*
* @param[in] fabricKeyNumber Fabric key number.
* @return fabric 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] rootKeyNumber 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] appGroupLocalNumber 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