blob: f6315a0347f8c777cfe5bb6f2f064ca245dbb084 [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 key export functionality
* to support pin encryption.
*
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
extern NSString * const NLWeaveKeyExportClientErrorDomain;
// Error codes for NLWeaveKeyExportClientErrorDomain
typedef NS_ENUM(NSInteger, NLWeaveKeyExportClientErrorDomainCode) {
NLWeaveKeyExportClientErrorDomainInvalidExportBufferSize = 2,
NLWeaveKeyExportClientErrorDomainKeyExportRequestFailure = 3,
NLWeaveKeyExportClientErrorDomainKeyExportResponseFailure = 4,
NLWeaveKeyExportClientErrorDomainProcessReconfiugreFailure = 5,
NLWeaveKeyExportClientErrorDomainInvalidArgument = 6
};
/**
* @class NLWeaveKeyExportClient
* Wrapper for C++ implementation of key export functionality to
* support pin encryption.
*/
@interface NLWeaveKeyExportClient : NSObject
/**
* Generate a key export request given an access token.
*
* @param[in] keyId The Weave key id of the key to be exported.
* @param[in] responderNodeId The Weave node id of the device to which the request will be forwarded; or
* 0 if the particular device id is unknown.
* @param[in] accessToken A buffer containing a Weave access token, in Weave TLV format.
* @param[out] errOut Output error parameter, set in the event an error occurs and errOut is not null.
* @return Binary buffer containing the generated key export request. Set to nil if error occurs.
*/
- (nullable NSData *)generateKeyExportRequest:(UInt32)keyId
responderNodeId:(UInt64)responderNodeId
accessToken:(NSData *)accessToken
error:(NSError **)errOut;
/**
* Generate a key export request given a client certificate and private key.
*
* @param[in] keyId The Weave key id of the key to be exported.
* @param[in] responderNodeId The Weave node id of the device to which the request will be forwarded; or
* 0 if the particular device id is unknown.
* @param[in] clientCert A buffer containing a Weave certificate identifying the client making the request.
* The certificate is expected to be encoded in Weave TLV format.
* @param[in] clientKey A buffer containing the private key associated with the client certificate.
* The private key is expected to be encoded in Weave TLV format.
* @param[out] errOut Output error parameter, set in the event an error occurs and errOut is not null.
* @return Binary buffer containing the generated key export request. Set to nil if error occurs.
*/
- (nullable NSData *)generateKeyExportRequest:(UInt32)keyId
responderNodeId:(UInt64)responderNodeId
clientCert:(NSData *)clientCert
clientKey:(NSData *)clientKey
error:(NSError **)errOut;
/**
* Process the response to a previously-generated key export request.
*
* @param[in] responderNodeId The Weave node id of the device to which the request was forwarded; or
* 0 if the particular device id is unknown.
* @param[in] exportResp A buffer containing a Weave key export response, as returned by the device.
* @param[out] errOut Output error parameter, set in the event an error occurs and errOut is not null.
* @return Binary buffer containing exported key. Set to nil if error occurs.
*/
- (nullable NSData *)processKeyExportResponse:(UInt64)responderNodeId exportResp:(NSData *)exportResp error:(NSError **)errOut;
/**
* Process a reconfigure message received in response to a previously-generated key export request.
*
* @param[in] reconfig A buffer containing a Weave key export reconfigure message, as returned
* by the device.
* @param[out] errOut Output error parameter, set in the event an error occurs and errOut is not null.
* @return True on success, False on failure.
*/
- (BOOL)processKeyExportReconfigure:(NSData *)reconfig error:(NSError **)errOut;
/**
* Reset the key export client object, discarding any state associated with a pending key export request.
*/
- (void)reset;
/**
* True if key export responses from Nest development devices will be allowed.
*/
- (BOOL)allowNestDevelopmentDevices;
/**
* Allow or disallow key export responses from Nest development devices.
*/
- (void)setAllowNestDevelopmentDevices:(BOOL)nestDev;
/**
* True if key export responses from devices with SHA1 certificates will be allowed.
*/
- (BOOL)allowSHA1DeviceCertificates;
/**
* Allow or disallow key export responses from devices with SHA1 certificates.
*/
- (void)setAllowSHA1DeviceCertificates:(BOOL)nestDev;
/**
* Initializes NLWeaveKeyExportClient object. Creates instance and initializes instace of
* internal C++ object for performing key export functionality.
*/
- (instancetype)init;
@end
NS_ASSUME_NONNULL_END