BLE SMP 详细解释函数smp_encrypt_data(uint8_t* key, uint8_t key_len, uint8_t* plain_text, uint8_t pt_len, tSMP_ENC* p_out)中各个参数的作用及意思
时间: 2023-07-12 15:33:32 浏览: 141
函数`smp_encrypt_data`的参数解释如下:
- `key`:输入参数,指向加密密钥的指针。
- `key_len`:输入参数,加密密钥的长度。
- `plain_text`:输入参数,指向要加密的明文的指针。
- `pt_len`:输入参数,要加密的明文的长度。
- `p_out`:输出参数,指向加密后的输出数据的指针。
函数`smp_encrypt_data`的作用是对输入的明文进行加密,并将加密后的结果存储在输出参数`p_out`中。
在BLE SMP协议中,加密过程采用AES-CCM算法。该算法需要一个128位的加密密钥,因此参数`key`指向的密钥长度必须为16个字节。参数`plain_text`指向要加密的明文数据,长度为`pt_len`字节。加密后的结果存储在输出参数`p_out`中,其中包括加密后的数据、MIC(消息完整性校验)以及加密后的数据长度。
需要注意的是,使用该函数进行加密时,输入的密钥必须是经过安全随机数生成器生成的随机数,以保证加密过程的安全性。
相关问题
bluedroid BLE SMP如果两个打算完成配对的设备,如果要保证smp_calculate_f6(uint8_t* w, uint8_t* n1, uint8_t* n2, uint8_t* r, uint8_t* iocap, uint8_t* a1, uint8_t* a2, uint8_t* c)输出的c指针指向的数据一致,这两个设备需要保证smp_calculate_f6中的哪些参数输入是一致的?
要保证smp_calculate_f6输出的c指针指向的数据一致,需要保证以下参数输入一致:
1. n1和n2,它们是前面协商的随机数,需要在两个设备中都是相同的;
2. iocap,表示输入输出能力,需要在两个设备中都是相同的;
3. a1和a2,分别表示两个设备的地址,需要在两个设备中分别填入对方的地址;
4. r,表示从连接请求响应消息中获取的随机数,需要在两个设备中都是相同的。
需要注意的是,以上参数输入一致只是保证了输出的c指针指向的数据一致,要保证两个设备完成配对,还需要在整个配对过程中保证其他参数的一致性。
static T_APP_RESULT gatt_write_recv(uint8_t conn_id, T_SERVER_ID svc_id, uint16_t attrib_index, T_WRITE_TYPE write_type, uint16_t length, uint8_t *p_value, P_FUN_WRITE_IND_POST_PROC *p_write_post_proc) { for (int i = 0; i < g_svc_cnt; i++) { if (g_svc_tbl[i].svc_handle == svc_id) { for (int j = 0; j < g_svc_tbl[i].n_char; j++) { if (g_svc_tbl[i].chars[i].char_handle == attrib_index) { uint16_t att_handle = (g_svc_tbl[i].svc_handle << 8) | g_svc_tbl[i].chars[i].char_handle; struct aciga_ble_gatt_access_ctxt ctx = { .op = ACIGA_BLE_GATT_ACCESS_OP_WRITE_CHR, .data = p_value, .len = length, }; g_svc_tbl[i].chars[i].cb(conn_id, att_handle, &ctx); return APP_RESULT_SUCCESS; } } } } return APP_RESULT_SUCCESS; }这个函数的作用?
这个函数是用于处理GATT协议中的写入请求的,它会根据传入的参数检查服务和特征值的句柄,如果匹配成功,就会调用相应特征值的回调函数处理写入操作。具体来说,它会遍历服务表(g_svc_tbl),查找服务句柄和特征值句柄是否和传入参数匹配,如果匹配成功,就会调用相应特征值的回调函数处理写入操作,并返回APP_RESULT_SUCCESS表示写入成功。
阅读全文