1 /* *****************************************************************
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 * *****************************************************************/
20 #include "gtest/gtest.h"
21 #include "secureresourceprovider.h"
23 static OicSecAcl_t acl;
24 static OCProvisionDev_t pDev1;
25 static OCProvisionDev_t pDev2;
26 static OicSecCredType_t credType = SYMMETRIC_PAIR_WISE_KEY;
27 static OCProvisionDev_t selectedDeviceInfo;
28 static OicSecPconf_t pconf;
29 static OicSecOxm_t oicSecDoxmJustWorks = OIC_JUST_WORKS;
30 static OicSecOxm_t oicSecDoxmRandomPin = OIC_RANDOM_DEVICE_PIN;
31 static unsigned short timeout = 60;
32 static OicSecDoxm_t defaultDoxm1 =
34 NULL, /* OicUrn_t *oxmType */
35 0, /* size_t oxmTypeLen */
36 &oicSecDoxmJustWorks, /* uint16_t *oxm */
37 1, /* size_t oxmLen */
38 OIC_JUST_WORKS, /* uint16_t oxmSel */
39 SYMMETRIC_PAIR_WISE_KEY,/* OicSecCredType_t sct */
40 false, /* bool owned */
41 {{0}}, /* OicUuid_t deviceID */
43 {{0}}, /* OicUuid_t owner */
46 static OicSecDoxm_t defaultDoxm2 =
48 NULL, /* OicUrn_t *oxmType */
49 0, /* size_t oxmTypeLen */
50 &oicSecDoxmRandomPin, /* uint16_t *oxm */
51 1, /* size_t oxmLen */
52 OIC_RANDOM_DEVICE_PIN, /* uint16_t oxmSel */
53 SYMMETRIC_PAIR_WISE_KEY,/* OicSecCredType_t sct */
54 false, /* bool owned */
55 {{0}}, /* OicUuid_t deviceID */
57 {{0}}, /* OicUuid_t owner */
60 static void provisioningCB (void* UNUSED1, int UNUSED2, OCProvisionResult_t *UNUSED3, bool UNUSED4)
69 TEST(SRPProvisionACLTest, NullDeviceInfo)
71 pDev1.doxm = &defaultDoxm1;
72 uint8_t deviceId1[] = {0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64};
73 memcpy(pDev1.doxm->deviceID.id, deviceId1, sizeof(deviceId1));
75 pDev2.doxm = &defaultDoxm2;
76 uint8_t deviceId2[] = {0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x63};
77 memcpy(pDev2.doxm->deviceID.id, deviceId2, sizeof(deviceId2));
79 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionACL(NULL, NULL, &acl, &provisioningCB));
82 TEST(SRPProvisionACLTest, NullCallback)
84 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPProvisionACL(NULL, &pDev1, &acl, NULL));
87 TEST(SRPProvisionACLTest, NullACL)
89 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionACL(NULL, &pDev1, NULL, &provisioningCB));
92 TEST(SRPProvisionCredentialsTest, NullDevice1)
94 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionCredentials(NULL, credType,
95 OWNER_PSK_LENGTH_128, NULL,
96 &pDev2, &provisioningCB));
99 TEST(SRPProvisionCredentialsTest, SamelDeviceId)
101 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionCredentials(NULL, credType,
102 OWNER_PSK_LENGTH_128, &pDev1,
103 &pDev1, &provisioningCB));
106 TEST(SRPProvisionCredentialsTest, NullCallback)
108 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPProvisionCredentials(NULL, credType,
109 OWNER_PSK_LENGTH_128,
110 &pDev1, &pDev2, NULL));
113 TEST(SRPProvisionCredentialsTest, InvalidKeySize)
115 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionCredentials(NULL, credType,
120 TEST(SRPUnlinkDevicesTest, NullDevice1)
122 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPUnlinkDevices(NULL, NULL, &pDev2, provisioningCB));
125 TEST(SRPUnlinkDevicesTest, NullDevice2)
127 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPUnlinkDevices(NULL, &pDev1, NULL, provisioningCB));
130 TEST(SRPUnlinkDevicesTest, SamelDeviceId)
132 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPUnlinkDevices(NULL, &pDev1, &pDev1, provisioningCB));
135 TEST(SRPUnlinkDevicesTest, NullCallback)
137 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPUnlinkDevices(NULL, &pDev1, &pDev2, NULL));
140 TEST(SRPRemoveDeviceTest, NullTargetDevice)
142 unsigned short waitTime = 10 ;
143 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPRemoveDevice(NULL, waitTime, NULL, provisioningCB));
146 TEST(SRPRemoveDeviceTest, NullResultCallback)
148 unsigned short waitTime = 10;
149 OCProvisionDev_t dev1;
150 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPRemoveDevice(NULL, waitTime, &dev1, NULL));
153 TEST(SRPRemoveDeviceTest, ZeroWaitTime)
155 OCProvisionDev_t dev1;
156 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPRemoveDevice(NULL, 0, &dev1, NULL));
159 TEST(SRPProvisionDirectPairingTest, NullselectedDeviceInfo)
161 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionDirectPairing(NULL, NULL, &pconf, &provisioningCB));
164 TEST(SRPProvisionDirectPairingTest, Nullpconf)
166 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPProvisionDirectPairing(NULL, &selectedDeviceInfo, NULL, &provisioningCB));
169 TEST(SRPProvisionDirectPairingTest, Nullcallback)
171 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPProvisionDirectPairing(NULL, &selectedDeviceInfo, &pconf, NULL));
174 const char *SECURE_RESOURCE_PROVIDER_TEST_FILE_NAME = "secureresourceprovider.dat";
175 OCPersistentStorage ps = { NULL, NULL, NULL, NULL, NULL};
177 static FILE* TestFopen(const char * /*path*/, const char *mode)
179 return fopen(SECURE_RESOURCE_PROVIDER_TEST_FILE_NAME, mode);
182 void SetPersistentHandler(OCPersistentStorage *ps)
186 ps->open = TestFopen;
194 class SRPTest : public ::testing::Test
197 static void SetUpTestCase()
199 SetPersistentHandler(&ps);
200 OCStackResult res = OCRegisterPersistentStorageHandler(&ps);
201 ASSERT_TRUE(res == OC_STACK_OK);
204 static void TearDownTestCase()
208 static const ByteArray g_caPublicKey;
210 static const ByteArray g_derCode ;
212 static ByteArray g_serNum;
215 static uint8_t certData[] = {
216 0x30, 0x82, 0x02, 0x39, 0x30, 0x82, 0x01, 0xdf, 0x02, 0x01, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
217 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x7c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
218 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
219 0x09, 0x53, 0x6f, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x74, 0x65, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03,
220 0x55, 0x04, 0x07, 0x0c, 0x08, 0x53, 0x6f, 0x6d, 0x65, 0x63, 0x69, 0x74, 0x79, 0x31, 0x0b, 0x30,
221 0x09, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x02, 0x42, 0x42, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03,
222 0x55, 0x04, 0x0b, 0x0c, 0x0d, 0x53, 0x65, 0x71, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x50, 0x61,
223 0x72, 0x74, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x02, 0x6f, 0x62, 0x31,
224 0x14, 0x30, 0x12, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x05,
225 0x6f, 0x62, 0x40, 0x62, 0x62, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x38, 0x31, 0x35, 0x31,
226 0x33, 0x31, 0x31, 0x31, 0x37, 0x5a, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35, 0x31, 0x32, 0x31, 0x33,
227 0x31, 0x31, 0x31, 0x37, 0x5a, 0x30, 0x81, 0xd4, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
228 0x06, 0x13, 0x02, 0x55, 0x41, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x03,
229 0x41, 0x73, 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x47, 0x6f,
230 0x74, 0x68, 0x61, 0x6d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x02, 0x5a,
231 0x5a, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x08, 0x42, 0x65, 0x61, 0x6d,
232 0x54, 0x65, 0x61, 0x6d, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
233 0x01, 0x09, 0x01, 0x16, 0x0d, 0x72, 0x61, 0x69, 0x6c, 0x40, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x63,
234 0x6f, 0x6d, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x29, 0x75, 0x75, 0x69,
235 0x64, 0x3a, 0x33, 0x32, 0x33, 0x32, 0x33, 0x32, 0x33, 0x32, 0x2d, 0x33, 0x32, 0x33, 0x32, 0x2d,
236 0x33, 0x32, 0x33, 0x32, 0x2d, 0x33, 0x32, 0x33, 0x32, 0x2d, 0x33, 0x32, 0x33, 0x32, 0x33, 0x32,
237 0x33, 0x32, 0x33, 0x32, 0x33, 0x32, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x0c,
238 0x2b, 0x75, 0x73, 0x65, 0x72, 0x69, 0x64, 0x3a, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37,
239 0x2d, 0x36, 0x37, 0x36, 0x37, 0x2d, 0x36, 0x37, 0x36, 0x37, 0x2d, 0x36, 0x37, 0x36, 0x37, 0x2d,
240 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x30, 0x59, 0x30, 0x13,
241 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
242 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xf7, 0x13, 0x5c, 0x73, 0x72, 0xce, 0x10, 0xe5, 0x09,
243 0x97, 0x9a, 0xf8, 0xf2, 0x70, 0xa6, 0x3d, 0x89, 0xf5, 0xc5, 0xe4, 0x44, 0xe2, 0x4a, 0xb6, 0x61,
244 0xa8, 0x12, 0x8d, 0xb4, 0xdc, 0x2b, 0x47, 0x84, 0x60, 0x0c, 0x25, 0x66, 0xe9, 0xe0, 0xe5, 0xac,
245 0x22, 0xbf, 0x15, 0xdc, 0x71, 0xb1, 0x88, 0x4f, 0x16, 0xbf, 0xc2, 0x77, 0x37, 0x76, 0x3f, 0xe0,
246 0x67, 0xc6, 0x1d, 0x23, 0xfe, 0x7c, 0x8b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
247 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x47, 0xcc, 0x41, 0x8a, 0x27, 0xc7,
248 0xd0, 0xaa, 0xb4, 0xab, 0x85, 0xbf, 0x09, 0x4d, 0x06, 0xd7, 0x7e, 0x0d, 0x39, 0xf9, 0x36, 0xa1,
249 0x3d, 0x96, 0x23, 0xe2, 0x24, 0x64, 0x98, 0x63, 0x21, 0xba, 0x02, 0x21, 0x00, 0xe5, 0x8f, 0x7f,
250 0xf1, 0xa6, 0x82, 0x03, 0x6a, 0x18, 0x7a, 0x54, 0xe7, 0x0e, 0x25, 0x77, 0xd8, 0x46, 0xfa, 0x96,
251 0x8a, 0x7e, 0x14, 0xc4, 0xcb, 0x21, 0x32, 0x3e, 0x89, 0xd9, 0xba, 0x8c, 0x3f
254 static uint8_t keyData[] = {
255 0x67, 0xc6, 0x1d, 0x23, 0xfe, 0x7c, 0x8b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
256 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x47, 0xcc, 0x41, 0x8a, 0x27, 0xc7,
257 0xd0, 0xaa, 0xb4, 0xab, 0x85, 0xbf, 0x09, 0x4d, 0x06, 0xd7, 0x7e, 0x0d, 0x39, 0xf9, 0x36, 0xa1,
258 0x3d, 0x96, 0x23, 0xe2, 0x24, 0x64, 0x98, 0x63, 0x21, 0xba, 0x02, 0x21
261 TEST_F(SRPTest, SRPSaveTrustCertChainDER)
266 result = SRPSaveTrustCertChain(certData, sizeof(certData), OIC_ENCODING_DER, &credId);
268 EXPECT_EQ(OC_STACK_OK, result);
271 TEST_F(SRPTest, SRPSaveTrustCertChainPEM)
276 result = SRPSaveTrustCertChain(certData, sizeof(certData), OIC_ENCODING_PEM, &credId);
278 EXPECT_EQ(OC_STACK_OK, result);
281 TEST_F(SRPTest, SRPSaveTrustCertChainNullCertData)
286 result = SRPSaveTrustCertChain(NULL, sizeof(certData), OIC_ENCODING_DER, &credId);
288 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
291 TEST_F(SRPTest, SRPSaveTrustCertChainNullCredId)
296 result = SRPSaveTrustCertChain(certData, sizeof(certData), OIC_ENCODING_DER, NULL);
298 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
301 TEST_F(SRPTest, SRPSaveOwnCertChainTest)
308 cert.data = certData;
309 cert.len = sizeof(certData);
311 key.len = sizeof(keyData);
313 //This test case cannot succeed. because doxm resource has not been initialized.
314 result = SRPSaveOwnCertChain(&cert, &key, &credId);
316 EXPECT_EQ(OC_STACK_ERROR, result);
319 TEST_F(SRPTest, SRPSaveOwnCertChainTestNullCert)
326 key.len = sizeof(keyData);
328 result = SRPSaveOwnCertChain(NULL, &key, &credId);
330 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
333 TEST_F(SRPTest, SRPSaveOwnCertChainTestNullCertData)
341 cert.len = sizeof(certData);
343 key.len = sizeof(keyData);
345 result = SRPSaveOwnCertChain(&cert, &key, &credId);
347 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
350 TEST_F(SRPTest, SRPSaveOwnCertChainTestNullKey)
356 cert.data = certData;
357 cert.len = sizeof(certData);
359 result = SRPSaveOwnCertChain(&cert, NULL, &credId);
361 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
364 TEST_F(SRPTest, SRPSaveOwnCertChainTestNullKeyData)
371 cert.data = certData;
372 cert.len = sizeof(certData);
374 key.len = sizeof(keyData);
376 result = SRPSaveOwnCertChain(&cert, &key, &credId);
378 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
381 TEST_F(SRPTest, SRPSaveOwnCertChainTestNullCredId)
387 cert.data = certData;
388 cert.len = sizeof(certData);
390 key.len = sizeof(keyData);
392 result = SRPSaveOwnCertChain(&cert, &key, NULL);
394 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
398 TEST(SRPProvisionTrustCertChainTest, SRPProvisionTrustCertChainNullSelectedDeviceInfo)
402 OicSecCredType_t type = SIGNED_ASYMMETRIC_KEY;
405 result = SRPProvisionTrustCertChain(&ctx, type, credId, NULL, provisioningCB);
406 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
409 TEST(SRPProvisionTrustCertChainTest, SRPProvisionTrustCertChainNullResultCallback)
413 OicSecCredType_t type = SIGNED_ASYMMETRIC_KEY;
415 OCProvisionDev_t selectedDeviceInfo;
417 result = SRPProvisionTrustCertChain(&ctx, type, credId, &selectedDeviceInfo, NULL);
418 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, result);
421 TEST(SRPProvisionTrustCertChainTest, SRPProvisionTrustCertChainInvalidOicSecCredType)
425 OicSecCredType_t type = PIN_PASSWORD;
427 OCProvisionDev_t selectedDeviceInfo;
429 result = SRPProvisionTrustCertChain(&ctx, type, credId, &selectedDeviceInfo, provisioningCB);
430 EXPECT_EQ(OC_STACK_INVALID_PARAM, result);
433 TEST_F(SRPTest, SRPProvisionTrustCertChainNoResource)
437 OicSecCredType_t type = SIGNED_ASYMMETRIC_KEY;
439 OCProvisionDev_t selectedDeviceInfo;
441 result = SRPProvisionTrustCertChain(&ctx, type, credId, &selectedDeviceInfo, provisioningCB);
442 EXPECT_EQ(OC_STACK_NO_RESOURCE, result);
445 TEST(SRPProvisionTrustCertChainTest, SRPGetACLResourceNoCallback)
447 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPGetACLResource(NULL, &pDev1, NULL));
450 TEST(SRPProvisionTrustCertChainTest, SRPGetACLResourceNoDevice)
452 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPGetACLResource(NULL, NULL, provisioningCB));
455 TEST(SRPProvisionTrustCertChainTest, SRPGetCredResourceNoCallback)
457 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPGetCredResource(NULL, &pDev1, NULL));
460 TEST(SRPProvisionTrustCertChainTest, SRPGetCredResourceNoDevice)
462 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPGetCredResource(NULL, NULL, provisioningCB));
465 TEST(SRPProvisionTrustCertChainTest, SRPResetDeviceNoCallback)
467 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPResetDevice(&pDev1, NULL));
470 TEST(SRPProvisionTrustCertChainTest, SRPResetDeviceNoDevice)
472 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPResetDevice(NULL, provisioningCB));
475 TEST(SRPProvisionTrustCertChainTest, SRPSyncDeviceNoCallback)
477 EXPECT_EQ(OC_STACK_INVALID_CALLBACK, SRPSyncDevice(NULL, timeout, &pDev1, NULL));
480 TEST(SRPProvisionTrustCertChainTest, SRPSyncDeviceNoDevice)
482 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPSyncDevice(NULL, timeout, NULL, provisioningCB));
485 TEST(SRPProvisionTrustCertChainTest, SRPSyncDeviceZeroWaitTime)
487 EXPECT_EQ(OC_STACK_INVALID_PARAM, SRPSyncDevice(NULL, 0, &pDev1, provisioningCB));
490 TEST(SRPProvisionTrustCertChainTest, SRPRemoveDeviceWithoutDiscoveryNoCallback)
492 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,
493 SRPRemoveDeviceWithoutDiscovery(NULL, &pDev1, &pDev2, NULL));
496 TEST(SRPProvisionTrustCertChainTest, SRPRemoveDeviceWithoutDiscoveryNoDevice)
498 EXPECT_EQ(OC_STACK_INVALID_PARAM,
499 SRPRemoveDeviceWithoutDiscovery(NULL, &pDev1, NULL, provisioningCB));
502 TEST(SRPProvisionTrustCertChainTest, SRPRemoveDeviceWithoutDiscoveryNoDeviceList)
504 EXPECT_EQ(OC_STACK_CONTINUE,
505 SRPRemoveDeviceWithoutDiscovery(NULL, NULL, &pDev2, provisioningCB));