1 /* *****************************************************************
\r
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
19 * *****************************************************************/
\r
21 #ifndef OTM_OWNERSHIPTRANSFERMANAGER_H_
\r
22 #define OTM_OWNERSHIPTRANSFERMANAGER_H_
\r
24 #include "pmtypes.h"
\r
25 #include "ocstack.h"
\r
26 #include "octypes.h"
\r
27 #include "securevirtualresourcetypes.h"
\r
31 #endif // __cplusplus
\r
33 #define OXM_STRING_MAX_LENGTH 32
\r
34 #define WRONG_PIN_MAX_ATTEMP 1
\r
36 typedef struct OTMCallbackData OTMCallbackData_t;
\r
37 typedef struct OTMContext OTMContext_t;
\r
40 * Do ownership transfer for the unowned devices.
\r
42 * @param[in] ctx Application context would be returned in result callback
\r
43 * @param[in] selectedDeviceList linked list of ownership transfer candidate devices.
\r
44 * @param[in] resultCB Result callback function to be invoked when ownership transfer finished.
\r
45 * @return OC_STACK_OK in case of success and other value otherwise.
\r
47 OCStackResult OTMDoOwnershipTransfer(void* ctx,
\r
48 OCProvisionDev_t* selectedDeviceList, OCProvisionResultCB resultCB);
\r
50 OCStackResult OTMDoCustomOwnershipTransfer(void* ctx,
\r
51 OCProvisionDev_t* selectedDeviceList, OCProvisionResultCB resultCB,
\r
52 const OicSecOxm_t method);
\r
55 * API to set a allow status of OxM
\r
57 * @param[in] oxm Owership transfer method (ref. OicSecOxm_t)
\r
58 * @param[in] allowStatus allow status (true = allow, false = not allow)
\r
60 * @return OC_STACK_OK in case of success and other value otherwise.
\r
62 OCStackResult OTMSetOxmAllowStatus(const OicSecOxm_t oxm, const bool allowStatus);
\r
66 *Callback for load secret for temporal secure session
\r
68 * e.g) in case of PIN based, input the pin through this callback
\r
69 * in case of X.509 based, input the certificate through this callback
\r
71 typedef OCStackResult (*OTMLoadSecret)(OTMContext_t* otmCtx);
\r
74 * Callback for create secure channel using secret inputed from OTMLoadSecret callback
\r
76 typedef OCStackResult (*OTMCreateSecureSession)(OTMContext_t* otmCtx);
\r
79 * Callback for creating CoAP payload.
\r
81 typedef OCStackResult (*OTMCreatePayloadCallback)(OTMContext_t* otmCtx, uint8_t **payload,
\r
85 * Required callback for performing ownership transfer
\r
87 struct OTMCallbackData
\r
89 OTMLoadSecret loadSecretCB;
\r
90 OTMCreateSecureSession createSecureSessionCB;
\r
91 OTMCreatePayloadCallback createSelectOxmPayloadCB;
\r
92 OTMCreatePayloadCallback createOwnerTransferPayloadCB;
\r
96 * Context for ownership transfer(OT)
\r
99 void* userCtx; /**< Context for user.*/
\r
100 OCProvisionDev_t* selectedDeviceInfo; /**< Selected device info for OT. */
\r
101 OicUuid_t subIdForPinOxm; /**< Subject Id which uses PIN based OTM. */
\r
102 OCProvisionResultCB ctxResultCallback; /**< Function pointer to store result callback. */
\r
103 OCProvisionResult_t* ctxResultArray; /**< Result array having result of all device. */
\r
104 size_t ctxResultArraySize; /**< No of elements in result array. */
\r
105 bool ctxHasError; /**< Does OT process have any error. */
\r
106 OCDoHandle ocDoHandle; /** <A handle for latest request message*/
\r
107 OTMCallbackData_t otmCallback; /**< OTM callbacks to perform the OT/MOT. **/
\r
111 // TODO: Remove this OTMSetOwnershipTransferCallbackData, Please see the jira ticket IOT-1484
\r
113 * Set the callbacks for ownership transfer
\r
115 * @param[in] oxm Ownership transfer method
\r
116 * @param[in] callbackData the implementation of the ownership transfer function for each step.
\r
117 * @return OC_STACK_OK in case of success and other value otherwise.
\r
119 OCStackResult OTMSetOwnershipTransferCallbackData(OicSecOxm_t oxm, OTMCallbackData_t* callbackData);
\r
122 * API to assign the OTMCallback for each OxM.
\r
124 * @param[out] callbacks Instance of OTMCallback_t
\r
125 * @param[in] oxm Ownership transfer method
\r
126 * @return OC_STACK_OK on success
\r
128 OCStackResult OTMSetOTCallback(OicSecOxm_t oxm, OTMCallbackData_t* callbacks);
\r
131 * Function to save the result of provisioning.
\r
133 * @param[in,out] otmCtx Context value of ownership transfer.
\r
134 * @param[in] res result of provisioning
\r
136 void SetResult(OTMContext_t* otmCtx, const OCStackResult res);
\r
139 * Function to select appropriate security provisioning method.
\r
141 * @param[in] supportedMethods Array of supported methods
\r
142 * @param[in] numberOfMethods number of supported methods
\r
143 * @param[out] selectedMethod Selected methods
\r
144 * @param[in] ownerType type of owner device (SUPER_OWNER or SUB_OWNER)
\r
145 * @return OC_STACK_OK on success
\r
147 OCStackResult OTMSelectOwnershipTransferMethod(const OicSecOxm_t *supportedMethods,
\r
148 size_t numberOfMethods, OicSecOxm_t *selectedMethod, OwnerType_t ownerType);
\r
151 * This function configures SVR DB as self-ownership.
\r
153 *@return OC_STACK_OK in case of successful configue and other value otherwise.
\r
155 OCStackResult ConfigSelfOwnership(void);
\r
158 * API to terminate the OTM process when terminating OCStack
\r
160 void OTMTerminate();
\r
165 #endif //OTM_OWNERSHIPTRANSFERMANAGER_H_
\r