Skip to content

Commit fc97980

Browse files
author
Mika Leppänen
committed
Changed RADIUS shared secret length to 16-bit value
Added also get interface for RADIUS server IPv6 address and shared secret.
1 parent f827ffc commit fc97980

File tree

5 files changed

+136
-17
lines changed

5 files changed

+136
-17
lines changed

nanostack/ws_bbr_api.h

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ int ws_bbr_pan_configuration_get(int8_t interface_id, uint16_t *pan_id);
322322
int ws_bbr_pan_configuration_validate(int8_t interface_id, uint16_t pan_id);
323323

324324
/**
325-
* ws_bbr_key_storage_memory_set sets memory used for key storages
325+
* Sets memory used for key storages
326326
*
327327
* This functions can be used to set memory used by EAPOL key storage. When memory
328328
* areas are set, module does not allocate memory internally from heap.
@@ -339,7 +339,7 @@ int ws_bbr_pan_configuration_validate(int8_t interface_id, uint16_t pan_id);
339339
int ws_bbr_key_storage_memory_set(int8_t interface_id, uint8_t key_storages_number, const uint16_t *key_storage_size, void **key_storages);
340340

341341
/**
342-
* ws_bbr_key_storage_settings_set sets key storage settings
342+
* Sets key storage settings
343343
*
344344
* This functions can be used to set the settings of EAPOL key storage.
345345
* Allocation max number and allocation size sets the settings that are used when key storage
@@ -358,7 +358,7 @@ int ws_bbr_key_storage_memory_set(int8_t interface_id, uint8_t key_storages_numb
358358
int ws_bbr_key_storage_settings_set(int8_t interface_id, uint8_t alloc_max_number, uint16_t alloc_size, uint16_t storing_interval);
359359

360360
/**
361-
* ws_bbr_radius_address_set Set RADIUS server IPv6 address
361+
* Set RADIUS server IPv6 address
362362
*
363363
* Function sets external RADIUS server IPv6 address to Border Router. Setting the
364364
* address enables external RADIUS server interface on Border Router. To disable external
@@ -376,20 +376,49 @@ int ws_bbr_key_storage_settings_set(int8_t interface_id, uint8_t alloc_max_numbe
376376
int ws_bbr_radius_address_set(int8_t interface_id, const uint8_t *address);
377377

378378
/**
379-
* ws_bbr_radius_shared_secret_set set RADIUS shared secret
379+
* Get RADIUS server IPv6 address
380380
*
381-
* Function sets RADIUS shared secret to Border Router. Shared secret is usually an
381+
* Function gets external RADIUS server IPv6 address to Border Router.
382+
*
383+
* \param interface_id Network interface ID.
384+
* \param address buffer where to write address, must have space at least for 39 characters and NUL terminator
385+
*
386+
* \return < 0 failure
387+
* \return >= 0 success
388+
*
389+
*/
390+
int ws_bbr_radius_address_get(int8_t interface_id, uint8_t *address);
391+
392+
/**
393+
* Set RADIUS shared secret
394+
*
395+
* Function sets RADIUS shared secret to Border Router. Shared secret may be an
382396
* ASCII string. Check the format and length constraints for the shared secret from
383397
* the documentation of RADIUS server you are connecting to.
384398
*
385399
* \param interface_id Network interface ID.
386-
* \param shared_secret_len The length of the shared secret in bytes. Maximum length is 255 bytes.
400+
* \param shared_secret_len The length of the shared secret in bytes.
387401
* \param shared_secret Pointer to shared secret. Can be 8-bit ASCII string or byte array. Is not NUL terminated.
388402
*
389403
* \return < 0 failure
390404
* \return >= 0 success
391405
*
392406
*/
393-
int ws_bbr_radius_shared_secret_set(int8_t interface_id, const uint8_t shared_secret_len, const uint8_t *shared_secret);
407+
int ws_bbr_radius_shared_secret_set(int8_t interface_id, const uint16_t shared_secret_len, const uint8_t *shared_secret);
408+
409+
/**
410+
* Get RADIUS shared secret
411+
*
412+
* Function gets RADIUS shared secret to Border Router.
413+
*
414+
* \param interface_id Network interface ID.
415+
* \param shared_secret_len On function call, is the size of the shared secret write buffer in bytes, on return is the shared secret length in bytes.
416+
* \param shared_secret Pointer to buffer where to write shared secret or NULL. At maximum, bytes set by the length parameter are written. If NULL only buffer length is returned.
417+
*
418+
* \return < 0 failure
419+
* \return >= 0 success
420+
*
421+
*/
422+
int ws_bbr_radius_shared_secret_get(int8_t interface_id, uint16_t *shared_secret_len, uint8_t *shared_secret);
394423

395424
#endif /* WS_BBR_API_H_ */

source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,18 @@ int ws_bbr_radius_address_set(int8_t interface_id, const uint8_t *address)
11031103
#endif
11041104
}
11051105

1106-
int ws_bbr_radius_shared_secret_set(int8_t interface_id, const uint8_t shared_secret_len, const uint8_t *shared_secret)
1106+
int ws_bbr_radius_address_get(int8_t interface_id, uint8_t *address)
1107+
{
1108+
#ifdef HAVE_WS_BORDER_ROUTER
1109+
return ws_pae_controller_radius_address_get(interface_id, address);
1110+
#else
1111+
(void) interface_id;
1112+
(void) address;
1113+
return -1;
1114+
#endif
1115+
}
1116+
1117+
int ws_bbr_radius_shared_secret_set(int8_t interface_id, const uint16_t shared_secret_len, const uint8_t *shared_secret)
11071118
{
11081119
#ifdef HAVE_WS_BORDER_ROUTER
11091120
return ws_pae_controller_radius_shared_secret_set(interface_id, shared_secret_len, shared_secret);
@@ -1114,3 +1125,15 @@ int ws_bbr_radius_shared_secret_set(int8_t interface_id, const uint8_t shared_se
11141125
return -1;
11151126
#endif
11161127
}
1128+
1129+
int ws_bbr_radius_shared_secret_get(int8_t interface_id, uint16_t *shared_secret_len, uint8_t *shared_secret)
1130+
{
1131+
#ifdef HAVE_WS_BORDER_ROUTER
1132+
return ws_pae_controller_radius_shared_secret_get(interface_id, shared_secret_len, shared_secret);
1133+
#else
1134+
(void) interface_id;
1135+
(void) shared_secret_len;
1136+
(void) shared_secret;
1137+
return -1;
1138+
#endif
1139+
}

source/6LoWPAN/ws/ws_pae_controller.c

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,12 +1171,12 @@ int8_t ws_pae_controller_certificate_revocation_list_remove(const arm_cert_revoc
11711171
return ret;
11721172
}
11731173

1174-
int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *remote_addr)
1174+
int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *address)
11751175
{
11761176
pae_controller_t *controller = ws_pae_controller_get_or_create(interface_id);
11771177

11781178
// If remote address is not set, clear radius information
1179-
if (!remote_addr) {
1179+
if (!address) {
11801180
if (pae_controller_radius_settings != NULL) {
11811181
pae_controller_radius_settings->radius_addr_set = false;
11821182
}
@@ -1193,7 +1193,7 @@ int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *
11931193
}
11941194
memset(pae_controller_radius_settings, 0, sizeof(sec_radius_cfg_t));
11951195
}
1196-
memcpy(pae_controller_radius_settings->radius_addr, remote_addr, 16);
1196+
memcpy(pae_controller_radius_settings->radius_addr, address, 16);
11971197
pae_controller_radius_settings->radius_addr_set = true;
11981198

11991199
if (controller) {
@@ -1206,7 +1206,23 @@ int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *
12061206
return 0;
12071207
}
12081208

1209-
int8_t ws_pae_controller_radius_shared_secret_set(int8_t interface_id, const uint8_t shared_secret_len, const uint8_t *shared_secret)
1209+
int8_t ws_pae_controller_radius_address_get(int8_t interface_id, uint8_t *address)
1210+
{
1211+
(void) interface_id;
1212+
1213+
if (address == NULL) {
1214+
return -1;
1215+
}
1216+
1217+
if (pae_controller_radius_settings == NULL || !pae_controller_radius_settings->radius_addr_set) {
1218+
return -1;
1219+
}
1220+
1221+
memcpy(address, pae_controller_radius_settings->radius_addr, 16);
1222+
return 0;
1223+
}
1224+
1225+
int8_t ws_pae_controller_radius_shared_secret_set(int8_t interface_id, const uint16_t shared_secret_len, const uint8_t *shared_secret)
12101226
{
12111227
pae_controller_t *controller = ws_pae_controller_get_or_create(interface_id);
12121228

@@ -1253,6 +1269,32 @@ int8_t ws_pae_controller_radius_shared_secret_set(int8_t interface_id, const uin
12531269
return 0;
12541270
}
12551271

1272+
int8_t ws_pae_controller_radius_shared_secret_get(int8_t interface_id, uint16_t *shared_secret_len, uint8_t *shared_secret)
1273+
{
1274+
(void) interface_id;
1275+
1276+
if (shared_secret_len == NULL) {
1277+
return -1;
1278+
}
1279+
1280+
uint16_t length = 0;
1281+
if (pae_controller_radius_settings != NULL) {
1282+
length = pae_controller_radius_settings->radius_shared_secret_len;
1283+
if (shared_secret != NULL) {
1284+
if (length > *shared_secret_len) {
1285+
length = *shared_secret_len;
1286+
}
1287+
if (length > 0 && pae_controller_radius_settings->radius_shared_secret != NULL) {
1288+
memcpy(shared_secret, pae_controller_radius_settings->radius_shared_secret, length);
1289+
}
1290+
}
1291+
}
1292+
1293+
*shared_secret_len = length;
1294+
1295+
return 0;
1296+
}
1297+
12561298
int8_t ws_pae_controller_border_router_addr_write(protocol_interface_info_entry_t *interface_ptr, const uint8_t *eui_64)
12571299
{
12581300
if (!eui_64) {

source/6LoWPAN/ws/ws_pae_controller.h

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,26 +236,51 @@ int8_t ws_pae_controller_certificate_revocation_list_remove(const arm_cert_revoc
236236
* ws_pae_controller_radius_address_set set radius address
237237
*
238238
* \param interface_id interface identifier
239-
* \param remote_addr remote address
239+
* \param address address
240+
*
241+
* \return < 0 failure
242+
* \return >= 0 success
243+
*
244+
*/
245+
int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *address);
246+
247+
/**
248+
* ws_pae_controller_radius_address_set get radius address
249+
*
250+
* \param interface_id interface identifier
251+
* \param address address buffer where to write address, must have space at least for 39 characters and NUL terminator
240252
*
241253
* \return < 0 failure
242254
* \return >= 0 success
243255
*
244256
*/
245-
int8_t ws_pae_controller_radius_address_set(int8_t interface_id, const uint8_t *remote_addr);
257+
int8_t ws_pae_controller_radius_address_get(int8_t interface_id, uint8_t *address);
246258

247259
/**
248260
* ws_pae_controller_radius_shared_secret_set set radius shared secret
249261
*
250262
* \param interface_id interface identifier
251-
* \param shared_secret_len shared secret
263+
* \param shared_secret_len shared secret length
264+
* \param shared_secret shared secret
265+
*
266+
* \return < 0 failure
267+
* \return >= 0 success
268+
*
269+
*/
270+
int8_t ws_pae_controller_radius_shared_secret_set(int8_t interface_id, const uint16_t shared_secret_len, const uint8_t *shared_secret);
271+
272+
/**
273+
* ws_pae_controller_radius_shared_secret_get get radius shared secret
274+
*
275+
* \param interface_id interface identifier
276+
* \param shared_secret_len On call, shared secret buffer length, on return shared secret length
252277
* \param shared_secret shared secret
253278
*
254279
* \return < 0 failure
255280
* \return >= 0 success
256281
*
257282
*/
258-
int8_t ws_pae_controller_radius_shared_secret_set(int8_t interface_id, const uint8_t shared_secret_len, const uint8_t *shared_secret);
283+
int8_t ws_pae_controller_radius_shared_secret_get(int8_t interface_id, uint16_t *shared_secret_len, uint8_t *shared_secret);
259284

260285
/**
261286
* ws_pae_controller_nw_info_set set network information

source/Security/protocols/sec_prot_cfg.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ typedef struct sec_timer_cfg_s {
4848
typedef struct sec_radius_cfg_s {
4949
uint8_t radius_addr[16]; /**< Radius server IPv6 address */
5050
uint8_t *radius_shared_secret; /**< Radius shared secret */
51-
uint8_t radius_shared_secret_len; /**< Radius shared secret length */
51+
uint16_t radius_shared_secret_len; /**< Radius shared secret length */
5252
bool radius_addr_set : 1; /**< Radius server address is set */
5353
} sec_radius_cfg_t;
5454

0 commit comments

Comments
 (0)