iotivity 0.9.0
[platform/upstream/iotivity.git] / resource / csdk / stack / src / ocsecurity.c
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #include "ocstack.h"
22 #include "ocmalloc.h"
23 #include "ocsecurity.h"
24 #include "ocsecurityconfig.h"
25 #include <string.h>
26
27 static OCDtlsPskCredsBlob* pskCredsBlob;
28 static int pskCredsBlobLen;
29
30 // Internal API. Invoked by OC stack to cleanup memory
31 void DeinitOCSecurityInfo()
32 {
33     if (pskCredsBlob)
34     {
35         // Initialize sensitive data to zeroes before freeing.
36         memset(pskCredsBlob, 0, pskCredsBlobLen);
37
38         OCFree(pskCredsBlob);
39         pskCredsBlob = NULL;
40     }
41 }
42
43 // Internal API. Invoked by OC stack to retrieve credentials from this module
44 void OCGetDtlsPskCredentials(OCDtlsPskCredsBlob **credInfo)
45 {
46     *credInfo = pskCredsBlob;
47 }
48
49 /**
50  * Provides the DTLS PSK credetials blob to OC stack.
51  *
52  * @param credInfo
53  *     binary blob containing credentials
54  * @param len
55  *     length of binary blob
56  *
57  * @retval OC_STACK_OK for Success, otherwise some error value
58  */
59 OCStackResult OCSetDtlsPskCredentials(const OCDtlsPskCredsBlob *credInfo,
60                 size_t len)
61 {
62     if(credInfo && len > 0)
63     {
64         if (credInfo->blobVer != DtlsPskCredsBlobVer_CurrentVersion)
65         {
66             return OC_STACK_INVALID_PARAM;
67         }
68
69         // Remove existing blob
70         DeinitOCSecurityInfo();
71         // Allocate storage for new blob
72         pskCredsBlob = (OCDtlsPskCredsBlob*)OCMalloc(len);
73         if (pskCredsBlob)
74         {
75             memcpy(pskCredsBlob, credInfo, len);
76             pskCredsBlobLen = len;
77             return OC_STACK_OK;
78         }
79
80         return OC_STACK_NO_MEMORY;
81     }
82
83     return OC_STACK_INVALID_PARAM;
84 }
85
86