joey shelton / LED_Demo

Dependencies:   MAX44000 PWM_Tone_Library nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers m2msecurity.h Source File

m2msecurity.h

00001 /*
00002  * Copyright (c) 2015 ARM Limited. All rights reserved.
00003  * SPDX-License-Identifier: Apache-2.0
00004  * Licensed under the Apache License, Version 2.0 (the License); you may
00005  * not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
00012  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 #ifndef M2M_SECURITY_H
00017 #define M2M_SECURITY_H
00018 
00019 #include "mbed-client/m2mobject.h"
00020 
00021 // FORWARD DECLARATION
00022 class M2MResource;
00023 
00024 /**
00025  *  \brief M2MSecurity.
00026  *  This class represents an interface for the Security Object model of the LWM2M framework.
00027  *  It handles the security object instances and all corresponding
00028  *  resources.
00029  */
00030 
00031 class  M2MSecurity : public M2MObject {
00032 
00033 friend class M2MInterfaceFactory;
00034 friend class M2MNsdlInterface;
00035 
00036 public:
00037 
00038     /**
00039      * \brief Enum defining all resources associated with a
00040      * Security Object in the LWM2M framework.
00041      */
00042     typedef enum {
00043         M2MServerUri,
00044         BootstrapServer,
00045         SecurityMode,
00046         PublicKey,
00047         ServerPublicKey,
00048         Secretkey,
00049         SMSSecurityMode,
00050         SMSBindingKey,
00051         SMSBindingSecretKey,
00052         M2MServerSMSNumber,
00053         ShortServerID,
00054         ClientHoldOffTime
00055     }SecurityResource;
00056 
00057     /**
00058      * \brief Enum defining the type of a security attribute
00059      * used by the Security Object.
00060      */
00061     typedef enum {
00062         SecurityNotSet = -1,
00063         Psk = 0,
00064         Certificate = 2,
00065         NoSecurity = 3
00066     } SecurityModeType;
00067 
00068     /**
00069      * \brief Enum defining an interface operation that can be
00070      * handled by the Security Object.
00071      */
00072     typedef enum {
00073         Bootstrap = 0x0,
00074         M2MServer = 0x1
00075     } ServerType;
00076 
00077 private:
00078 
00079     /**
00080      * \brief Constructor
00081      * \param server_type The type of the security object created. Either bootstrap or LWM2M server.
00082      */
00083     M2MSecurity(ServerType server_type);
00084 
00085     // Prevents the use of default constructor.
00086     M2MSecurity();
00087 
00088     // Prevents the use of assignment operator.
00089     M2MSecurity& operator=( const M2MSecurity& /*other*/ );
00090 
00091     // Prevents the use of copy constructor
00092     M2MSecurity( const M2MSecurity& /*other*/ );
00093 
00094 public:
00095 
00096     /**
00097      * \brief Destructor
00098      */
00099     virtual ~M2MSecurity();
00100 
00101     /**
00102      * \brief Creates a new resource for the given resource enum.
00103      * \param rescource With this function, the following resources can be created:
00104      * ' BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
00105      * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
00106      * \param value The value to be set on the resource, in Integer format.
00107      * \return M2MResource if created successfully, else NULL.
00108      */
00109     M2MResource* create_resource(SecurityResource rescource, uint32_t value);
00110 
00111     /**
00112      * \brief Deletes the resource with the given resource enum.
00113      * Mandatory resources cannot be deleted.
00114      * \param resource The resource to be deleted.
00115      * \return True if deleted, else false.
00116      */
00117     bool delete_resource(SecurityResource rescource);
00118 
00119     /**
00120      * \brief Sets the value of the given resource enum.
00121      * \param resource With this function, a value can be set for the following resources:
00122      * 'M2MServerUri', 'SMSBindingKey', 'SMSBindingSecretKey'.
00123      * \param value The value to be set on the resource, in String format.
00124      * \return True if successfully set, else false.
00125      */
00126     bool set_resource_value(SecurityResource resource,
00127                             const String &value);
00128 
00129     /**
00130      * \brief Sets the value of the given resource enum.
00131      * \param resource With this function, a value can be set for the following resourecs:
00132      * 'BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
00133      * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
00134      * \param value The value to be set on the resource, in Integer format.
00135      * \return True if successfully set, else false.
00136      */
00137     bool set_resource_value(SecurityResource resource,
00138                             uint32_t value);
00139 
00140     /**
00141      * \brief Sets the value of the given resource enum.
00142      * \param resource With this function, a value can be set for the follwing resources:
00143      * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
00144      * \param value The value to be set on the resource, in uint8_t format.
00145      * \param size The size of the buffer value to be set on the resource.
00146      * \return True if successfully set, else false.
00147      */
00148     bool set_resource_value(SecurityResource resource,
00149                             const uint8_t *value,
00150                             const uint16_t length);
00151 
00152     /**
00153      * \brief Returns the value of the given resource enum, in String.
00154      * \param resource With this function, the following resources can return a value:
00155      * 'M2MServerUri','SMSBindingKey', 'SMSBindingSecretKey'.
00156      * \return The value associated with the resource. If the resource is not valid an empty string is returned.
00157      */
00158     String resource_value_string(SecurityResource resource) const;
00159 
00160     /**
00161      * \brief Populates the data buffer and returns the size of the buffer.
00162      * \param resource With this function, the following resources can return a value:
00163      * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
00164      * \param [OUT]data Copy of the data buffer that contains the value. Caller
00165      * is responsible of freeing this buffer.
00166      * \return The size of the populated buffer.
00167      */
00168     uint32_t resource_value_buffer(SecurityResource resource,
00169                                    uint8_t *&data) const;
00170 
00171     /**
00172      * \brief Returns the pointer to the value and size of the buffer.
00173      * \param resource With this function, the following resources can return a value:
00174      * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
00175      * \param [OUT]data Pointer to the data buffer that contains the value.
00176      * \return The size of the populated buffer.
00177      */
00178     uint32_t resource_value_buffer(SecurityResource resource,
00179                                    const uint8_t *&data) const;
00180 
00181     /**
00182      * \brief Returns the value of the given resource name, in Integer.
00183      * \param resource With this function, the following resources can return a value:
00184      * 'BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
00185      * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
00186      * \return The value associated with the resource. If the resource is not valid 0 is returned.
00187      */
00188     uint32_t resource_value_int(SecurityResource resource) const;
00189 
00190 
00191     /**
00192      * \brief Returns whether the resource instance with the given resource enum exists or not
00193      * \param resource Resource enum.
00194      * \return True if at least one instance exists, else false.
00195      */
00196     bool is_resource_present(SecurityResource resource)const;
00197 
00198     /**
00199      * \brief Returns the total number of resources for a security object.
00200      * \return The total number of resources.
00201      */
00202     uint16_t total_resource_count()const;
00203 
00204     /**
00205      * \brief Returns the type of the Security Object. It can be either
00206      * Bootstrap or M2MServer.
00207      * \return ServerType The type of the Security Object.
00208      */
00209     ServerType server_type() const;
00210 
00211 private:
00212 
00213     M2MResource* get_resource(SecurityResource resource) const;
00214     void clear_resources();
00215 
00216 private:
00217 
00218     M2MObjectInstance*    _server_instance;
00219     ServerType            _server_type;
00220 
00221     friend class Test_M2MSecurity;
00222     friend class Test_M2MInterfaceImpl;
00223     friend class Test_M2MConnectionSecurityImpl;
00224     friend class Test_M2MConnectionHandlerPimpl_linux;
00225     friend class Test_M2MConnectionHandlerPimpl_mbed;
00226     friend class Test_M2MConnectionSecurityPimpl;
00227     friend class Test_M2MNsdlInterface;
00228 };
00229 
00230 #endif // M2M_SECURITY_H
00231 
00232