mbed Connector Interface simplification API on top of mbed-client
Fork of mbedConnectorInterfaceV3 by
NOTE:
This repo has been replaced with https://github.com/ARMmbed/mbedConnectorInterface. No further updates will occur with this repo. Please use the github repo instead. Thanks!
source/PassphraseAuthenticator.cpp
- Committer:
- ansond
- Date:
- 2016-06-12
- Revision:
- 24:c92984bede9c
- Parent:
- 13:9edad7677211
- Child:
- 38:bb6d2be4d54c
File content as of revision 24:c92984bede9c:
/** * @file PassphraseAuthenticator.cpp * @brief mbed CoAP Endpoint Device Management Passphrase-based Authenticator class * @author Doug Anson * @version 1.0 * @see * * Copyright (c) 2016 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Class support #include "mbed-connector-interface/PassphraseAuthenticator.h" // demarshalling support #include "mbed-client/m2mresource.h" // constructor PassphraseAuthenticator::PassphraseAuthenticator(const Logger *logger,const void *passphrase) : Authenticator(logger,passphrase) { } // copy constructor PassphraseAuthenticator::PassphraseAuthenticator(const PassphraseAuthenticator &authenticator) : Authenticator(authenticator) { } // destructor PassphraseAuthenticator::~PassphraseAuthenticator() { } // basic (trivial passphrase authentication) bool PassphraseAuthenticator::authenticate(void *challenge) { // use simple, trivial passphrase based comparison as the check... char *passphrase = (char *)this->m_secret; char *input_passphrase = NULL; #if defined (HAS_EXECUTE_PARAMS) // ExecParam mbed-client: un-marshall the ExecuteParameter to get the simple string... M2MResource::M2MExecuteParameter* param = (M2MResource::M2MExecuteParameter*)challenge; if (param != NULL) { // use parameters to extract the passphrase String object_name = param->get_argument_object_name(); int instance_id = (int)param->get_argument_object_instance_id(); String resource_name = param->get_argument_resource_name(); string value = this->coapDataToString(param->get_argument_value(),param->get_argument_value_length()); input_passphrase = (char *)value.c_str(); } #else // Non-ExecParam mbed-client: use the parameter directly... input_passphrase = (char *)challenge; #endif // DEBUG //this->m_logger->log("Authenticator(passphrase): passphrase: [%s] challenge: [%s]",passphrase,input_passphrase); // parameter checks...the compare passphrases and return the result if (passphrase != NULL && input_passphrase != NULL && strcmp(passphrase,input_passphrase) == 0) { // DEBUG this->m_logger->log("Authenticator(passphrase): Passphrases MATCH. Authenticated."); // passphrases match return true; } // DEBUG this->m_logger->log("Authenticator(passphrase): Passphrases do not match"); // authentication failure return false; } // convenience method to get the URI from its buffer field... string PassphraseAuthenticator::coapDataToString(uint8_t *coap_data_ptr,int coap_data_ptr_length) { if (coap_data_ptr != NULL && coap_data_ptr_length > 0) { char buf[MAX_VALUE_BUFFER_LENGTH+1]; memset(buf,0,MAX_VALUE_BUFFER_LENGTH+1); memcpy(buf,(char *)coap_data_ptr,coap_data_ptr_length); return string(buf); } return string(""); }