Configure PSKd as part of starting the commissioner/joiner role. (#547)

This commit is contained in:
Jonathan Hui
2016-09-08 20:33:26 -07:00
committed by GitHub
parent f45a63dd46
commit a78f91ebdf
10 changed files with 72 additions and 15 deletions
+6 -1
View File
@@ -49,8 +49,13 @@ extern "C" {
/**
* This function enables the Thread Commissioner role.
*
* @param[in] aPSKd A pointer to the PSKd.
*
* @retval kThreadError_None Successfully started the Commissioner role.
* @retval kThreadError_InvalidArgs @p aPSKd is invalid.
*
*/
ThreadError otCommissionerStart(void);
ThreadError otCommissionerStart(const char *aPSKd);
/**
* This function disables the Thread Commissioner role.
+6 -1
View File
@@ -49,8 +49,13 @@ extern "C" {
/**
* This function enables the Thread Joiner role.
*
* @param[in] aPSKd A pointer to the PSKd.
*
* @retval kThreadError_None Successfully started the Commissioner role.
* @retval kThreadError_InvalidArgs @p aPSKd is invalid.
*
*/
ThreadError otJoinerStart(void);
ThreadError otJoinerStart(const char *aPSKd);
/**
* This function disables the Thread Joiner role.
+4 -2
View File
@@ -1848,7 +1848,8 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
if (strcmp(argv[0], "start") == 0)
{
otCommissionerStart();
VerifyOrExit(argc > 1, error = kThreadError_Parse);
otCommissionerStart(argv[1]);
}
else if (strcmp(argv[0], "stop") == 0)
{
@@ -1871,7 +1872,8 @@ void Interpreter::ProcessJoiner(int argc, char *argv[])
if (strcmp(argv[0], "start") == 0)
{
otJoinerStart();
VerifyOrExit(argc > 1, error = kThreadError_Parse);
otJoinerStart(argv[1]);
}
else if (strcmp(argv[0], "stop") == 0)
{
+3 -1
View File
@@ -59,12 +59,14 @@ Commissioner::Commissioner(ThreadNetif &aThreadNetif):
aThreadNetif.GetCoapServer().AddResource(mRelayReceive);
}
ThreadError Commissioner::Start(void)
ThreadError Commissioner::Start(const char *aPSKd)
{
ThreadError error = kThreadError_None;
VerifyOrExit(mState == kStateDisabled, error = kThreadError_InvalidState);
SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd),
static_cast<uint8_t>(strlen(aPSKd))));
SuccessOrExit(error = mSocket.Open(HandleUdpReceive, this));
mState = kStatePetition;
SendPetition();
+3 -1
View File
@@ -59,10 +59,12 @@ public:
/**
* This method starts the Commissioner service.
*
* @param[in] aPSKd A pointer to the PSKd.
*
* @retval kThreadError_None Successfully started the Commissioner service.
*
*/
ThreadError Start(void);
ThreadError Start(const char *aPSKd);
/**
* This method stops the Commissioner service.
+15 -2
View File
@@ -105,7 +105,7 @@ ThreadError Dtls::Start(bool aClient, ReceiveHandler aReceiveHandler, SendHandle
mbedtls_ssl_set_bio(&mSsl, this, &HandleMbedtlsTransmit, HandleMbedtlsReceive, NULL);
mbedtls_ssl_set_timer_cb(&mSsl, this, &HandleMbedtlsSetTimer, HandleMbedtlsGetTimer);
rval = mbedtls_ssl_set_hs_ecjpake_password(&mSsl, (const unsigned char *)"threadjpaketest", 15);
rval = mbedtls_ssl_set_hs_ecjpake_password(&mSsl, mPsk, mPskLength);
VerifyOrExit(rval == 0, ;);
mStarted = true;
@@ -129,6 +129,19 @@ ThreadError Dtls::Stop(void)
return kThreadError_None;
}
ThreadError Dtls::SetPsk(const uint8_t *aPsk, uint8_t aPskLength)
{
ThreadError error = kThreadError_None;
VerifyOrExit(aPskLength <= sizeof(mPsk), error = kThreadError_InvalidArgs);
memcpy(mPsk, aPsk, aPskLength);
mPskLength = aPskLength;
exit:
return error;
}
ThreadError Dtls::SetClientId(const uint8_t *aClientId, uint8_t aLength)
{
int rval = mbedtls_ssl_set_client_transport_id(&mSsl, aClientId, aLength);
@@ -330,7 +343,7 @@ void Dtls::Process(void)
else
{
mbedtls_ssl_session_reset(&mSsl);
mbedtls_ssl_set_hs_ecjpake_password(&mSsl, (const unsigned char *)"threadjpaketest", 15);
mbedtls_ssl_set_hs_ecjpake_password(&mSsl, mPsk, mPskLength);
break;
}
}
+19
View File
@@ -104,6 +104,17 @@ public:
*/
ThreadError Stop(void);
/**
* This method sets the PSK.
*
* @param[in] aPSK A pointer to the PSK.
*
* @retval kThreadError_None Successfully set the PSK.
* @retval kThreadError_InvalidArgs The PSK is invalid.
*
*/
ThreadError SetPsk(const uint8_t *aPsk, uint8_t aPskLength);
/**
* This method sets the Client ID used for generating the Hello Cookie.
*
@@ -148,6 +159,11 @@ public:
ThreadError Receive(Message &aMessage, uint16_t aOffset, uint16_t aLength);
private:
enum
{
kPskMaxLength = 32,
};
static ThreadError MapError(int rval);
static void HandleMbedtlsDebug(void *ctx, int level, const char *file, int line, const char *str);
@@ -175,6 +191,9 @@ private:
void Process(void);
uint8_t mPsk[kPskMaxLength];
uint8_t mPskLength;
mbedtls_entropy_context mEntropy;
mbedtls_ctr_drbg_context mCtrDrbg;
mbedtls_ssl_context mSsl;
+9 -2
View File
@@ -58,9 +58,16 @@ Joiner::Joiner(ThreadNetif &aNetif):
mNetif.GetCoapServer().AddResource(mJoinerEntrust);
}
ThreadError Joiner::Start(void)
ThreadError Joiner::Start(const char *aPSKd)
{
return mNetif.GetMle().Discover(0, 0, OT_PANID_BROADCAST, HandleDiscoverResult, this);
ThreadError error;
SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd),
static_cast<uint8_t>(strlen(aPSKd))));
SuccessOrExit(error = mNetif.GetMle().Discover(0, 0, OT_PANID_BROADCAST, HandleDiscoverResult, this));
exit:
return error;
}
void Joiner::HandleDiscoverResult(otActiveScanResult *aResult, void *aContext)
+3 -1
View File
@@ -63,10 +63,12 @@ public:
/**
* This method starts the Joiner service.
*
* @param[in] aPSKd A pointer to the PSKd.
*
* @retval kThreadError_None Successfully started the Joiner service.
*
*/
ThreadError Start(void);
ThreadError Start(const char *aPSKd);
/**
* This method stops the Joiner service.
+4 -4
View File
@@ -1241,9 +1241,9 @@ ThreadError otSendPendingSet(const otOperationalDataset *aDataset, const uint8_t
}
#if OPENTHREAD_ENABLE_COMMISSIONER
ThreadError otCommissionerStart(void)
ThreadError otCommissionerStart(const char *aPSKd)
{
return sThreadNetif->GetCommissioner().Start();
return sThreadNetif->GetCommissioner().Start(aPSKd);
}
ThreadError otCommissionerStop(void)
@@ -1253,9 +1253,9 @@ ThreadError otCommissionerStop(void)
#endif // OPENTHREAD_ENABLE_COMMISSIONER
#if OPENTHREAD_ENABLE_JOINER
ThreadError otJoinerStart(void)
ThreadError otJoinerStart(const char *aPSKd)
{
return sThreadNetif->GetJoiner().Start();
return sThreadNetif->GetJoiner().Start(aPSKd);
}
ThreadError otJoinerStop(void)