/** * function to provision credential to devices. * * @param[in] ctx Application context would be returned in result callback. * @param[in] type Type of credentials to be provisioned to the device. * @param[in] pDev1 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. @param[in] pDev2 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. * @param[in] resultCallback callback provided by API user, callback will be called when * provisioning request recieves a response from first resource server. * @return OC_STACK_OK in case of success and other value otherwise. */ OCStackResult OCProvisionCredentials(void *ctx, OicSecCredType_t type, size_t keySize, const OCProvisionDev_t *pDev1, const OCProvisionDev_t *pDev2, OCProvisionResultCB resultCallback) { return SRPProvisionCredentials(ctx, type, keySize, pDev1, pDev2, resultCallback); }
/** * function to provision credentials between two devices and ACLs for the devices who act as a server. * * @param[in] ctx Application context would be returned in result callback. * @param[in] type Type of credentials to be provisioned to the device. * @param[in] pDev1 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. * @param[in] acl ACL for device 1. If this is not required set NULL. * @param[in] pDev2 Pointer to OCProvisionDev_t instance,respresenting resource to be provsioned. * @param[in] acl ACL for device 2. If this is not required set NULL. * @param[in] resultCallback callback provided by API user, callback will be called when * provisioning request recieves a response from first resource server. * @return OC_STACK_OK in case of success and other value otherwise. */ OCStackResult OCProvisionPairwiseDevices(void* ctx, OicSecCredType_t type, size_t keySize, const OCProvisionDev_t *pDev1, OicSecAcl_t *pDev1Acl, const OCProvisionDev_t *pDev2, OicSecAcl_t *pDev2Acl, OCProvisionResultCB resultCallback) { if (!pDev1 || !pDev2 || !pDev1->doxm || !pDev2->doxm) { OIC_LOG(ERROR, TAG, "OCProvisionPairwiseDevices : Invalid parameters"); return OC_STACK_INVALID_PARAM; } if (!resultCallback) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : NULL Callback"); return OC_STACK_INVALID_CALLBACK; } if (!(keySize == OWNER_PSK_LENGTH_128 || keySize == OWNER_PSK_LENGTH_256)) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : Invalid key size"); return OC_STACK_INVALID_PARAM; } if (0 == memcmp(&pDev1->doxm->deviceID, &pDev2->doxm->deviceID, sizeof(OicUuid_t))) { OIC_LOG(INFO, TAG, "OCProvisionPairwiseDevices : Same device ID"); return OC_STACK_INVALID_PARAM; } OIC_LOG(DEBUG, TAG, "Checking link in DB"); bool linkExists = true; OCStackResult res = PDMIsLinkExists(&pDev1->doxm->deviceID, &pDev2->doxm->deviceID, &linkExists); if(res != OC_STACK_OK) { OIC_LOG(ERROR, TAG, "Internal Error Occured"); return res; } if (linkExists) { OIC_LOG(ERROR, TAG, "Link already exists"); return OC_STACK_INVALID_PARAM; } int noOfResults = 2; // Initial Value if (NULL != pDev1Acl) { ++noOfResults; } if (NULL != pDev2Acl) { ++noOfResults; } Linkdata_t *link = (Linkdata_t*) OICMalloc(sizeof(Linkdata_t)); if (!link) { OIC_LOG(ERROR, TAG, "Failed to memory allocation"); return OC_STACK_NO_MEMORY; } OIC_LOG_V(INFO,TAG, "Maximum no od results %d",noOfResults); link->pDev1 = pDev1; link->pDev1Acl = pDev1Acl; link->pDev2 = pDev2; link->pDev2Acl = pDev2Acl; link->ctx = ctx; // 1 call for each device for credential provisioning. implict call by SRPProvisioning credential // 1 call for ACL provisioning for device 1 and 1 call for ACL provisioning for device 2. link->numOfResults = noOfResults; link->resultCallback = resultCallback; link->currentCountResults = 0; link->resArr = (OCProvisionResult_t*) OICMalloc(sizeof(OCProvisionResult_t)*noOfResults); res = SRPProvisionCredentials(link, type, keySize, pDev1, pDev2, &ProvisionCredsCB); if (res != OC_STACK_OK) { OICFree(link->resArr); OICFree(link); } return res; }
TEST(SRPProvisionCredentialsTest, NullCallback) { EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPProvisionCredentials(NULL, credType, OWNER_PSK_LENGTH_128, &pDev1, &pDev2, NULL)); }
TEST(SRPProvisionCredentialsTest, InvalidKeySize) { EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionCredentials(NULL, credType, 0, &pDev1, &pDev2, &provisioningCB)); }
TEST(SRPProvisionCredentialsTest, NullDevice1) { EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionCredentials(NULL, credType, OWNER_PSK_LENGTH_128, NULL, &pDev2, &provisioningCB)); }