Announcements
IMPORTANT: Cypress Developer Community is transitioning on October 20th. To learn more and be prepared for this change, check out our latest announcement.
cancel
Showing results for 
Search instead for 
Did you mean: 

WICED Studio Bluetooth

YaTr_3516311
New Contributor II

Hi,

两个蓝牙产品。A是master,用来scan B并且connect B后获取B的数据;B是slaver,主要是advertising. 我想做sercure的功能。

关于这个secure的功能

1. 是不是可以对 connect的部分或者是数据通信的部分做secure?分别有什么example吗

2. 之前有介绍过while list的功能,是针对 connect部分的,但是前提是要知道对端地址,这个方法可能不适合我们。

3. 我再wiced_security.h的文档里有发现关于AES的API,但没有这部分的example和文档,能介绍一下这部分内容是如何应用的吗

0 Likes
1 Solution
Owen_Zhang123
Moderator
Moderator

这些API在20706上不可用,我查了下底层,没有这些API的定义,如果要用加密功能,需要自己定义对应的API。

请参考apps\snip\mesh\peerapps\Android\src\MeshApp\meshcore\src\main\jni\mesh_libs\aes.cpp文件中的应用,里面有对应的例子,你可以将里面的code复制到自己的工程里,实现加解密的过程。

View solution in original post

0 Likes
14 Replies
Owen_Zhang123
Moderator
Moderator

请问你们设备的IO Capability是怎样的?连接的部分如果要做加密,可以采用passkey的方式,对端必须输入密码才可以建立连接。

数据通信部分,只要在连接的过程中需要进行配对和authentication的,底层都会对通信数据进行加密。

0 Likes
YaTr_3516311
New Contributor II

有相关的文档和例子进行介绍吗?我们这边研究一下

0 Likes
Owen_Zhang123
Moderator
Moderator

这一部分内容都是蓝牙spec上规定好的,请参考spec vol 3, part H, 2.3。IO Capability和连接方式的对应关系,位于spec vol 3, part H, 2.3.5.1 Table 2.8.

0 Likes
YaTr_3516311
New Contributor II

因为我们客户提到了AES,然后我发现wiced_security.h的文档里有发现关于AES的API,但没有例子。所以想问一下这个AES的应用是?

0 Likes
Owen_Zhang123
Moderator
Moderator

蓝牙在底层通讯的时候,通过IO Capability中的配置,会使用AES的加密方式。

你看到的API是供应用层使用的,可以在应用层对数据进行加密,然后到对端再使用同样的算法解密,之前有客户用过,但是我们这边没有例程。

0 Likes
YaTr_3516311
New Contributor II

你看到的API是供应用层使用的,可以在应用层对数据进行加密,然后到对端再使用同样的算法解密,之前有客户用过,但是我们这边没有例程。


我们客户也想用这个,在发送数据的过程中,对这个数据进行加密。能不能提供点文档或者例程啊。给点方向

0 Likes
YaTr_3516311
New Contributor II

另外一个问题, AES API 是否能用于20706,我在网页上看到这个API只能用于 20737 ?

0 Likes
Owen_Zhang123
Moderator
Moderator

这些API在20706上不可用,我查了下底层,没有这些API的定义,如果要用加密功能,需要自己定义对应的API。

请参考apps\snip\mesh\peerapps\Android\src\MeshApp\meshcore\src\main\jni\mesh_libs\aes.cpp文件中的应用,里面有对应的例子,你可以将里面的code复制到自己的工程里,实现加解密的过程。

View solution in original post

0 Likes
YaTr_3516311
New Contributor II

Hi Owen,

基于客户的时间要求,以上的应用对于我们来说(包括自己理解,写API和测试)很困难。能否基于hci_audio_gateway的工程,写一下简单的示例。万分感谢

0 Likes
YaTr_3516311
New Contributor II

Hi Owen,

感谢你的demo。我想问一下加密的数据长度一定是16的倍数吗?还是可以是任何长度

0 Likes
Owen_Zhang123
Moderator
Moderator

默认是16个字节,是由下面的宏定义决定的

#define N_ROW                   4

#define N_COL                   4

#define N_BLOCK   (N_ROW * N_COL)

你可以修改一下这个参数看看。

如果你的数据不足16个,建议通过补齐的方式增加到16个字节。

0 Likes
YaTr_3516311
New Contributor II

Hi owen,

我想做多个block的加密和解密。参考您建议的代码后,写了如下代码,测试后,发现decode出来的数据好像不对。请指导一下

pastedImage_0.png

pastedImage_1.png

测试结果如下:

pastedImage_2.png

问一下,是

return_type aes_cbc_decrypt( const unsigned char *in, unsigned char *out,

                         int n_block, unsigned char iv[N_BLOCK], const aes_context ctx[1] )的函数的iv是要给一个16byte的数组temp吗?

0 Likes
YaTr_3516311
New Contributor II

Hi Owen,

是我没有把iv[N_BLOCK]这个参数理解好。这个是初始化向量,应该是一个固定值,我现在把这个值写成固定值后,就可以了。感谢你的支持。

    unsigned char encryption_message_buffer[16]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};

    unsigned char decryption_message_buffer[16]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};

但我还有一个问题想跟你确认一下,iv[N_BLOCK]这个固定值,我是自定义成{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};的,应该没有问题吧?

0 Likes
Owen_Zhang123
Moderator
Moderator

可以写成固定值的,也可以在加密的时候进行修改,在解密的时候使用同样的值就可以了。

0 Likes