You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by GitBox <gi...@apache.org> on 2022/10/11 12:26:22 UTC

[GitHub] [mynewt-nimble] andrzej-kaczmarek opened a new pull request, #1397: nimble/ll: Add API to read random data from controller

andrzej-kaczmarek opened a new pull request, #1397:
URL: https://github.com/apache/mynewt-nimble/pull/1397

   This may be useful to get some random if MCU does not support trng, e.g. as on nRF5340 app core.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@mynewt.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [mynewt-nimble] apache-mynewt-bot commented on pull request #1397: nimble/ll: Add API to read random data from controller

Posted by GitBox <gi...@apache.org>.
apache-mynewt-bot commented on PR #1397:
URL: https://github.com/apache/mynewt-nimble/pull/1397#issuecomment-1275000171

   
   <!-- style-bot -->
   
   ## Style check summary
   
   ### Our coding style is [here!](https://github.com/apache/mynewt-core/blob/master/CODING_STANDARDS.md)
   
   
   #### apps/bttester/src/gap.c
   <details>
   
   ```diff
   @@ -685,302 +702,314 @@
     * If the resolution procedure fails, then the Host shall disconnect
     * with the error code "Authentication failure" [...]
     */
   -static void periph_privacy(struct ble_gap_conn_desc desc)
   +static void
   +periph_privacy(struct ble_gap_conn_desc desc)
    {
    #if !MYNEWT_VAL(BTTESTER_PRIVACY_MODE)
   -	return;
   +    return;
    #endif
   -	int count;
   -
   -	SYS_LOG_DBG("");
   -
   -	ble_store_util_count(BLE_STORE_OBJ_TYPE_PEER_SEC, &count);
   -	if (count > 0 && BLE_ADDR_IS_RPA(&desc.peer_id_addr)) {
   -		SYS_LOG_DBG("Authentication failure, disconnecting");
   -		ble_gap_terminate(desc.conn_handle, BLE_ERR_AUTH_FAIL);
   -	}
   -}
   -
   -static void device_connected_ev_send(struct os_event *ev)
   -{
   -	struct ble_gap_conn_desc desc;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)&connected_ev, &desc);
   -	if (rc) {
   -		tester_rsp(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   -			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
   -		return;
   -	}
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   -		    CONTROLLER_INDEX, (uint8_t *) &connected_ev,
   -		    sizeof(connected_ev));
   -
   -	periph_privacy(desc);
   -}
   -
   -static void le_connected(uint16_t conn_handle, int status)
   -{
   -	struct ble_gap_conn_desc desc;
   -	ble_addr_t *addr;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	if (status != 0) {
   -		return;
   -	}
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	peer_id_addr = desc.peer_id_addr;
   -	peer_ota_addr = desc.peer_ota_addr;
   -
   -	addr = &desc.peer_id_addr;
   -
   -	memcpy(connected_ev.address, addr->val, sizeof(connected_ev.address));
   -	connected_ev.address_type = addr->type;
   -	connected_ev.conn_itvl = desc.conn_itvl;
   -	connected_ev.conn_latency = desc.conn_latency;
   -	connected_ev.supervision_timeout = desc.supervision_timeout;
   +    int count;
   +
   +    SYS_LOG_DBG("");
   +
   +    ble_store_util_count(BLE_STORE_OBJ_TYPE_PEER_SEC, &count);
   +    if (count > 0 && BLE_ADDR_IS_RPA(&desc.peer_id_addr)) {
   +        SYS_LOG_DBG("Authentication failure, disconnecting");
   +        ble_gap_terminate(desc.conn_handle, BLE_ERR_AUTH_FAIL);
   +    }
   +}
   +
   +static void
   +device_connected_ev_send(struct os_event *ev)
   +{
   +    struct ble_gap_conn_desc desc;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)&connected_ev, &desc);
   +    if (rc) {
   +        tester_rsp(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   +               CONTROLLER_INDEX, BTP_STATUS_FAILED);
   +        return;
   +    }
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   +            CONTROLLER_INDEX, (uint8_t *) &connected_ev,
   +            sizeof(connected_ev));
   +
   +    periph_privacy(desc);
   +}
   +
   +static void
   +le_connected(uint16_t conn_handle, int status)
   +{
   +    struct ble_gap_conn_desc desc;
   +    ble_addr_t *addr;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    if (status != 0) {
   +        return;
   +    }
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    peer_id_addr = desc.peer_id_addr;
   +    peer_ota_addr = desc.peer_ota_addr;
   +
   +    addr = &desc.peer_id_addr;
   +
   +    memcpy(connected_ev.address, addr->val, sizeof(connected_ev.address));
   +    connected_ev.address_type = addr->type;
   +    connected_ev.conn_itvl = desc.conn_itvl;
   +    connected_ev.conn_latency = desc.conn_latency;
   +    connected_ev.supervision_timeout = desc.supervision_timeout;
    
    #if MYNEWT_VAL(BTTESTER_CONN_RETRY)
   -	os_callout_reset(&connected_ev_co,
   -			 os_time_ms_to_ticks32(
   -				 CONNECTED_EV_DELAY_MS(desc.conn_itvl)));
   +    os_callout_reset(&connected_ev_co,
   +             os_time_ms_to_ticks32(
   +                 CONNECTED_EV_DELAY_MS(desc.conn_itvl)));
    #else
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   -		    CONTROLLER_INDEX, (uint8_t *) &connected_ev,
   -		    sizeof(connected_ev));
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_CONNECTED,
   +            CONTROLLER_INDEX, (uint8_t *) &connected_ev,
   +            sizeof(connected_ev));
    #endif
    }
    
   -static void le_disconnected(struct ble_gap_conn_desc *conn, int reason)
   -{
   -	struct gap_device_disconnected_ev ev;
   -	ble_addr_t *addr = &conn->peer_ota_addr;
   -
   -	SYS_LOG_DBG("");
   +static void
   +le_disconnected(struct ble_gap_conn_desc *conn, int reason)
   +{
   +    struct gap_device_disconnected_ev ev;
   +    ble_addr_t *addr = &conn->peer_ota_addr;
   +
   +    SYS_LOG_DBG("");
    
    #if MYNEWT_VAL(BTTESTER_CONN_RETRY)
   -	int rc;
   -
   -	if ((reason == BLE_HS_HCI_ERR(BLE_ERR_CONN_ESTABLISHMENT)) &&
   -	    os_callout_queued(&connected_ev_co)) {
   -		if (connection_attempts < MYNEWT_VAL(BTTESTER_CONN_RETRY)) {
   -			os_callout_stop(&connected_ev_co);
   -
   -			/* try connecting again */
   -			rc = ble_gap_connect(own_addr_type, addr, 0,
   -					     &dflt_conn_params, gap_event_cb,
   -					     NULL);
   -
   -			if (rc == 0) {
   -				connection_attempts++;
   -				return;
   -			}
   -		}
   -	} else if (os_callout_queued(&connected_ev_co)) {
   -		os_callout_stop(&connected_ev_co);
   -		return;
   -	}
   +    int rc;
   +
   +    if ((reason == BLE_HS_HCI_ERR(BLE_ERR_CONN_ESTABLISHMENT)) &&
   +        os_callout_queued(&connected_ev_co)) {
   +        if (connection_attempts < MYNEWT_VAL(BTTESTER_CONN_RETRY)) {
   +            os_callout_stop(&connected_ev_co);
   +
   +            /* try connecting again */
   +            rc = ble_gap_connect(own_addr_type, addr, 0,
   +                         &dflt_conn_params, gap_event_cb,
   +                         NULL);
   +
   +            if (rc == 0) {
   +                connection_attempts++;
   +                return;
   +            }
   +        }
   +    } else if (os_callout_queued(&connected_ev_co)) {
   +        os_callout_stop(&connected_ev_co);
   +        return;
   +    }
    #endif
    
   -	connection_attempts = 0;
   -	memset(&connected_ev, 0, sizeof(connected_ev));
   -
   -	memcpy(ev.address, addr->val, sizeof(ev.address));
   -	ev.address_type = addr->type;
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_DISCONNECTED,
   -		    CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static void auth_passkey_oob(uint16_t conn_handle)
   -{
   -	struct ble_gap_conn_desc desc;
   -	struct ble_sm_io pk;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	memcpy(pk.oob, oob, sizeof(oob));
   -	pk.action = BLE_SM_IOACT_OOB;
   -
   -	rc = ble_sm_inject_io(conn_handle, &pk);
   -	assert(rc == 0);
   -}
   -
   -static void auth_passkey_display(uint16_t conn_handle, unsigned int passkey)
   -{
   -	struct ble_gap_conn_desc desc;
   -	struct gap_passkey_display_ev ev;
   -	ble_addr_t *addr;
   -	struct ble_sm_io pk;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	rc = ble_hs_hci_rand(&pk.passkey, sizeof(pk.passkey));
   -	assert(rc == 0);
   -	/* Max value is 999999 */
   -	pk.passkey %= 1000000;
   -	pk.action = BLE_SM_IOACT_DISP;
   -
   -	rc = ble_sm_inject_io(conn_handle, &pk);
   -	assert(rc == 0);
   -
   -	addr = &desc.peer_ota_addr;
   -
   -	memcpy(ev.address, addr->val, sizeof(ev.address));
   -	ev.address_type = addr->type;
   -	ev.passkey = sys_cpu_to_le32(pk.passkey);
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_DISPLAY,
   -		    CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static void auth_passkey_entry(uint16_t conn_handle)
   -{
   -	struct ble_gap_conn_desc desc;
   -	struct gap_passkey_entry_req_ev ev;
   -	ble_addr_t *addr;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	addr = &desc.peer_ota_addr;
   -
   -	memcpy(ev.address, addr->val, sizeof(ev.address));
   -	ev.address_type = addr->type;
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_ENTRY_REQ,
   -		    CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static void auth_passkey_numcmp(uint16_t conn_handle, unsigned int passkey)
   -{
   -	struct ble_gap_conn_desc desc;
   -	struct gap_passkey_confirm_req_ev ev;
   -	ble_addr_t *addr;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	addr = &desc.peer_ota_addr;
   -
   -	memcpy(ev.address, addr->val, sizeof(ev.address));
   -	ev.address_type = addr->type;
   -	ev.passkey = sys_cpu_to_le32(passkey);
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_CONFIRM_REQ,
   -		    CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static void auth_passkey_oob_sc(uint16_t conn_handle)
   -{
   -	int rc;
   -	struct ble_sm_io pk;
   -
   -	SYS_LOG_DBG("");
   -
   -	memset(&pk, 0, sizeof(pk));
   -
   -	pk.oob_sc_data.local = &oob_data_local;
   -
   -	if (ble_hs_cfg.sm_oob_data_flag) {
   -		pk.oob_sc_data.remote = &oob_data_remote;
   -	}
   -
   -	pk.action = BLE_SM_IOACT_OOB_SC;
   -	rc = ble_sm_inject_io(conn_handle, &pk);
   -	if (rc != 0) {
   -		console_printf("error providing oob; rc=%d\n", rc);
   -	}
   -}
   -
   -static void le_passkey_action(uint16_t conn_handle,
   -			      struct ble_gap_passkey_params *params)
   -{
   -	SYS_LOG_DBG("");
   -
   -	switch (params->action) {
   -	case BLE_SM_IOACT_NONE:
   -		break;
   -	case BLE_SM_IOACT_OOB:
   -		auth_passkey_oob(conn_handle);
   -		break;
   -	case BLE_SM_IOACT_INPUT:
   -		auth_passkey_entry(conn_handle);
   -		break;
   -	case BLE_SM_IOACT_DISP:
   -		auth_passkey_display(conn_handle, params->numcmp);
   -		break;
   -	case BLE_SM_IOACT_NUMCMP:
   -		auth_passkey_numcmp(conn_handle, params->numcmp);
   -		break;
   -	case BLE_SM_IOACT_OOB_SC:
   -		auth_passkey_oob_sc(conn_handle);
   -		break;
   -	default:
   -		assert(0);
   -	}
   -}
   -
   -static void le_identity_resolved(uint16_t conn_handle)
   -{
   -	struct ble_gap_conn_desc desc;
   -	struct gap_identity_resolved_ev ev;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = ble_gap_conn_find(conn_handle, &desc);
   -	if (rc) {
   -		return;
   -	}
   -
   -	peer_id_addr = desc.peer_id_addr;
   -	peer_ota_addr = desc.peer_ota_addr;
   -
   -	ev.address_type = desc.peer_ota_addr.type;
   -	memcpy(ev.address, desc.peer_ota_addr.val, sizeof(ev.address));
   -
   -	ev.identity_address_type = desc.peer_id_addr.type;
   -	memcpy(ev.identity_address, desc.peer_id_addr.val,
   -	       sizeof(ev.identity_address));
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_IDENTITY_RESOLVED,
   -		    CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static void le_pairing_failed(uint16_t conn_handle, int reason)
   +    connection_attempts = 0;
   +    memset(&connected_ev, 0, sizeof(connected_ev));
   +
   +    memcpy(ev.address, addr->val, sizeof(ev.address));
   +    ev.address_type = addr->type;
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_DEVICE_DISCONNECTED,
   +            CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static void
   +auth_passkey_oob(uint16_t conn_handle)
   +{
   +    struct ble_gap_conn_desc desc;
   +    struct ble_sm_io pk;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    memcpy(pk.oob, oob, sizeof(oob));
   +    pk.action = BLE_SM_IOACT_OOB;
   +
   +    rc = ble_sm_inject_io(conn_handle, &pk);
   +    assert(rc == 0);
   +}
   +
   +static void
   +auth_passkey_display(uint16_t conn_handle, unsigned int passkey)
   +{
   +    struct ble_gap_conn_desc desc;
   +    struct gap_passkey_display_ev ev;
   +    ble_addr_t *addr;
   +    struct ble_sm_io pk;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    rc = ble_hs_hci_rand(&pk.passkey, sizeof(pk.passkey));
   +    assert(rc == 0);
   +    /* Max value is 999999 */
   +    pk.passkey %= 1000000;
   +    pk.action = BLE_SM_IOACT_DISP;
   +
   +    rc = ble_sm_inject_io(conn_handle, &pk);
   +    assert(rc == 0);
   +
   +    addr = &desc.peer_ota_addr;
   +
   +    memcpy(ev.address, addr->val, sizeof(ev.address));
   +    ev.address_type = addr->type;
   +    ev.passkey = sys_cpu_to_le32(pk.passkey);
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_DISPLAY,
   +            CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static void
   +auth_passkey_entry(uint16_t conn_handle)
   +{
   +    struct ble_gap_conn_desc desc;
   +    struct gap_passkey_entry_req_ev ev;
   +    ble_addr_t *addr;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    addr = &desc.peer_ota_addr;
   +
   +    memcpy(ev.address, addr->val, sizeof(ev.address));
   +    ev.address_type = addr->type;
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_ENTRY_REQ,
   +            CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static void
   +auth_passkey_numcmp(uint16_t conn_handle, unsigned int passkey)
   +{
   +    struct ble_gap_conn_desc desc;
   +    struct gap_passkey_confirm_req_ev ev;
   +    ble_addr_t *addr;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    addr = &desc.peer_ota_addr;
   +
   +    memcpy(ev.address, addr->val, sizeof(ev.address));
   +    ev.address_type = addr->type;
   +    ev.passkey = sys_cpu_to_le32(passkey);
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_PASSKEY_CONFIRM_REQ,
   +            CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static void
   +auth_passkey_oob_sc(uint16_t conn_handle)
   +{
   +    int rc;
   +    struct ble_sm_io pk;
   +
   +    SYS_LOG_DBG("");
   +
   +    memset(&pk, 0, sizeof(pk));
   +
   +    pk.oob_sc_data.local = &oob_data_local;
   +
   +    if (ble_hs_cfg.sm_oob_data_flag) {
   +        pk.oob_sc_data.remote = &oob_data_remote;
   +    }
   +
   +    pk.action = BLE_SM_IOACT_OOB_SC;
   +    rc = ble_sm_inject_io(conn_handle, &pk);
   +    if (rc != 0) {
   +        console_printf("error providing oob; rc=%d\n", rc);
   +    }
   +}
   +
   +static void
   +le_passkey_action(uint16_t conn_handle,
   +                  struct ble_gap_passkey_params *params)
   +{
   +    SYS_LOG_DBG("");
   +
   +    switch (params->action) {
   +    case BLE_SM_IOACT_NONE:
   +        break;
   +    case BLE_SM_IOACT_OOB:
   +        auth_passkey_oob(conn_handle);
   +        break;
   +    case BLE_SM_IOACT_INPUT:
   +        auth_passkey_entry(conn_handle);
   +        break;
   +    case BLE_SM_IOACT_DISP:
   +        auth_passkey_display(conn_handle, params->numcmp);
   +        break;
   +    case BLE_SM_IOACT_NUMCMP:
   +        auth_passkey_numcmp(conn_handle, params->numcmp);
   +        break;
   +    case BLE_SM_IOACT_OOB_SC:
   +        auth_passkey_oob_sc(conn_handle);
   +        break;
   +    default:
   +        assert(0);
   +    }
   +}
   +
   +static void
   +le_identity_resolved(uint16_t conn_handle)
   +{
   +    struct ble_gap_conn_desc desc;
   +    struct gap_identity_resolved_ev ev;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = ble_gap_conn_find(conn_handle, &desc);
   +    if (rc) {
   +        return;
   +    }
   +
   +    peer_id_addr = desc.peer_id_addr;
   +    peer_ota_addr = desc.peer_ota_addr;
   +
   +    ev.address_type = desc.peer_ota_addr.type;
   +    memcpy(ev.address, desc.peer_ota_addr.val, sizeof(ev.address));
   +
   +    ev.identity_address_type = desc.peer_id_addr.type;
   +    memcpy(ev.identity_address, desc.peer_id_addr.val,
   +           sizeof(ev.identity_address));
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_IDENTITY_RESOLVED,
   +            CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static void
   +le_pairing_failed(uint16_t conn_handle, int reason)
    {
        struct ble_gap_conn_desc desc;
        struct gap_sec_pairing_failed_ev ev;
   ```
   
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@mynewt.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [mynewt-nimble] andrzej-kaczmarek merged pull request #1397: nimble/ll: Add API to read random data from controller

Posted by GitBox <gi...@apache.org>.
andrzej-kaczmarek merged PR #1397:
URL: https://github.com/apache/mynewt-nimble/pull/1397


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@mynewt.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org