Skip to content

Commit

Permalink
Send registration response to CPU more quickly
Browse files Browse the repository at this point in the history
  • Loading branch information
rrlapointe committed Mar 23, 2021
1 parent b5c2ad4 commit e9d10a0
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions controller/controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ void mbedtls_platform_zeroize(void *buf, size_t len) {
*/
void handle_sss_recv(struct dtls_state *dtls_state, const char* data, uint16_t len) {
scewl_sss_msg_t *msg;
const uint16_t cpu_required_len = sizeof(msg->dev_id) + sizeof(msg->op);
const unsigned char *ca, *crt, *key, *sync_key, *sync_salt, *data_key, *data_salt, *first_sed, *entropy;
uint8_t illegal_len = 0;

if (len >= sizeof(scewl_sss_msg_t)) {
msg = (scewl_sss_msg_t *) data;
Expand All @@ -101,10 +101,12 @@ void handle_sss_recv(struct dtls_state *dtls_state, const char* data, uint16_t l

// Check for correct SCUM data length
if (msg->sync_key_len + msg->sync_salt_len + msg->data_key_len + msg->data_salt_len + msg->sync_len + msg->entropy_len != S_KEY_LEN*2 + S_SALT_LEN*2 + 1 + ENTROPY_POOL_SIZE) {
illegal_len = 1;
break;
}

mbedtls_printf("Received good registration response.");
send_msg(CPU_INTF, SCEWL_SSS_ID, SCEWL_ID, cpu_required_len, data);

ca = (const unsigned char *) data + sizeof(scewl_sss_msg_t);
crt = (const unsigned char *) data + sizeof(scewl_sss_msg_t) + msg->ca_len;
key = (const unsigned char *) data + sizeof(scewl_sss_msg_t) + msg->ca_len + msg->crt_len;
Expand All @@ -116,7 +118,6 @@ void handle_sss_recv(struct dtls_state *dtls_state, const char* data, uint16_t l
entropy = (const unsigned char *) sync_key + S_KEY_LEN*2 + S_SALT_LEN*2 + 1;

dtls_rekey(dtls_state, ca, msg->ca_len, crt, msg->crt_len, key, msg->key_len, true, true);
mbedtls_printf("Registered.");

// Setup runtime RNG state -- happens by default in SCUM
rng_setup_runtime_pool((unsigned char *)entropy, msg->entropy_len);
Expand All @@ -136,8 +137,13 @@ void handle_sss_recv(struct dtls_state *dtls_state, const char* data, uint16_t l
scum_sync(scum_ctx_ref);
mbedtls_printf("Sent SCUM sync request...");
}
break;

mbedtls_printf("Registered.");
return;

case SCEWL_SSS_DEREG:
mbedtls_printf("Received good deregistration response.");
send_msg(CPU_INTF, SCEWL_SSS_ID, SCEWL_ID, cpu_required_len, data);
dtls_rekey_to_default(dtls_state, true, false);
// Setup initial RNG state
rng_clear_runtime_pool();
Expand All @@ -149,17 +155,10 @@ void handle_sss_recv(struct dtls_state *dtls_state, const char* data, uint16_t l
// Clear SCUM
scum_init(scum_ctx_ref);
mbedtls_printf("Deregistered.");
break;
return;
default:
mbedtls_printf("Received response from SSS with invalid status.");
}
if (!illegal_len) {
// forward message to CPU -- clear data except for device ID and op
const uint16_t cpu_required_len = sizeof(msg->dev_id) + sizeof(msg->op);
// memset((unsigned char *)data+cpu_required_len, 0, len - cpu_required_len);
send_msg(CPU_INTF, SCEWL_SSS_ID, SCEWL_ID, cpu_required_len, data);
return;
}
}
}
mbedtls_printf("Received invalid response from SSS.");
Expand Down

0 comments on commit e9d10a0

Please sign in to comment.