Skip to content

LWC 安全硬件操作接口

gaochun edited this page Feb 18, 2021 · 18 revisions

0 版本


版本 内容 日期 修改者
0.1.0 基础加密与签名功能 2020-09-12 Gao Chun
0.2.0 添加设备管理接口 2021-01-12 Gao Chun
0.2.1 整理接口名称,加入oraclize系列接口列表 2021-01-12 Gao Chun
0.2.2 添加management_clear_session接口 2021-02-18 Gao Chun

1 概述


通用安全硬件是BigBangCore区块链团队针对物联网应用所开发硬件签名与加密模块,为客户提供密钥的安全存储以及加解密和秘密分享的解决方案。本文将详细描述BBC区块链安全模块的硬件访问接口以及访问方式。

非常重要的注意事项:

  1. 模块不提供密钥生成功能,所有的密钥都需要从外部导入;
  2. 每个模块的初始pincode为“111111”,该初始密码仅可用于设置新的pincode,无法用于处理业务;
  3. 在已设置过pincode的情况下,pincode登录以及pincode重设的最大重试次数为32次,每次错误输入将导致重试次数减少1次;重试次数未减少到0次的情况下,只要正确输入一次,重试次数将自动重新设置未32次;一旦重试次数减少为0次,模块将永久锁定,密钥以及密文永久丢失,无法恢复。

2 通讯报文


2.1 请求报文(宿主->模块)

报文内容:[数据包总长度(4byte uint32) | 请求序号(4byte uint32) | 接口标识(1byte uint8) | 接口参数长度(4byte uint32) | 参数序列(0~nbyte) ]

说明:"数据包总长度"包括了自身的4字节长度; "接口参数长度"不包括自身的4字节长度,如果无"参数序列",则"接口参数长度"为0

2.2 响应报文头(模块->宿主)

报文内容:[数据包总长度(4byte uint32) | 响应序号(4byte uint32) | 响应状态码(2byte uint16) | 接口标识(1byte uint8) | 接口返回值长度(4byte uint32) | 返回序列(0~nbyte)]

说明:"数据包总长度"包括了自身的4字节长度;"响应序号"与对应请求报文中的"请求序号"相等;"接口返回值长度"不包括自身4字节长度,如果无"返回序列",则"接口返回值长度"为0

2.3 响应状态码含义

2.3.1 状态码等于0x9000表示请求被正确响应;

2.3.2 状态码大于0x9000标识系统异常;

2.3.3 状态码小于0x9000表示请求已被处理且返回对应处理状态,该状态与具体的请求接口相关,需查阅下文具体接口获得更多信息;

响应状态码 对应十进制 含义
0x9000 36864 请求被正确处理
0x9001 36965 系统忙
0x9002 36866 无效的包
0x9003 36867 未知的包命令字
0x9004 36868 错误的包长度
0x9005 36869 无效的序号
0x9006 36870 校验失败
0x9007 36871 硬件故障
0x9008 36872 非法操作
0x9045 36933 未登录设备,拒绝服务
0x9046 36934 超过pincode重试次数(32),设备已永久锁定
0x9056 36950 参数长度错误
0x9057 36951 安全存储异常

3 接口列表


序号 接口名称 接口标识 说明 版本支持
模块管理接口
1 management_get_about 0x01 获取模块关于信息 0.1.0-Latest
2 management_device_status 0x02 查询模块的运行状态 0.2.0-Latest
3 management_set_pincode 0x03 设置(新建&修改)硬件访问密钥 0.2.0-Latest
4 management_access_by_pincode 0x04 硬件模块接入验证(登录) 0.2.0-Latest
5 management_wirte_keypair 0x05 写入私钥 0.2.0-Latest
6 management_erase_keypair 0x06 擦除私钥(需要再次验证pincode) 0.2.0-Latest
7 management_write_secret 0x07 写入秘密数据 0.2.0-Latest
8 management_erase_secret 0x08 擦除秘密(需要验证pincode) 0.2.0-Latest
9 management_read_secret 0x09 读取秘密数据 0.2.0-Latest
10 management_get_id 0x0a 获取设备id 0.2.0-Latest
11 management_reset_device 0x0b 重置设备(需要验证pincode) 0.2.0-Latest
12 management_clear_session 0x0c 退出已登录设备 0.2.1-Latest
management_wirte_keypair_v2 写入不同币种keypair --
钱包操作接口
1 wallet_get_ed25519_pk 0x23 获取指定序号钱包的公钥 0.1.0-Latest
2 wallet_get_curve25519_pk 0x24 获取指定序号钱包的curve25519公钥 0.1.0-Latest
3 wallet_get_curve25519_sk 0x25 获取指定序号钱包的curve25519私钥 0.1.0-Latest
4 wallet_get_address 0x26 获取指定序号钱包地址 0.1.0-Latest
Oraclize(预言机)操作接口
1 oraclize_data_signature 0x43 非交易数据签名 0.2.1-Latest
2 oraclize_data_verify 0x44 非交易数据验签 0.2.1-Latest
3 oraclize_transaction_signature 0x45 对外部传入的BBC原始交易序列做签名操作 0.1.0-Latest
4 oraclize_transaction_signature_v2 0x47 支持多币种签名能力 --
加密操作接口
1 crypto_box_beforenm 0x63 产生指定序号钱包与libsoudium兼容的共享访问密钥 0.1.0-Latest
2 crypto_curve25519_scalarmult 0x64 产生指定序号钱包curve25519共享访问密钥 0.1.0-Latest
LWS协议操作接口
1 lws_request_signature 0x80 每次LWS请求的签名操作 0.1.0
2 lws_nonce 0x81 获取nonce --
3 lws_hash_blake2b 0x82 blake2b hash --
4 lws_sign_ed25519 0x83 ed25519 sign --

4 模块管理接口说明


4.1 management_get_about

  • 接口类型:模块管理接口
  • 接口标识:0x01
  • 参数数目:0
  • 参数总长度:0
  • 示例请求序列:0x|0d000000|01000000|01|00000000
  • 返回值数目:1
  • 返回值总长度:设备"关于信息"json字符串长度
  • 返回值1:设备"关于信息"json字符串
  • 示例响应序列:0x|9a000000|01000000|0090|01|8b000000|7b226e616d65223a202242696742616e67436f7265204c5743204d6f64756c65222c202276657273696f6e223a22302e312e30222c202268617368223a2236356632326265222c2022636f70797269676874223a2242696742616e67205465616d2032303230222c2022656d61696c223a22636f6e746163744062696762616e67636f72652e636f6d227d
  • 响应报文内容:json字符串——{"name":"BigBangCore LWC Module", "version":"0.2.0", "hash":"6c3b6f9", "copyright":"BigBang Team 2020", "email":"contact@bigbangcore.com"}
  • 状态码说明:0x9000表示接口调用正常,其他表示接口调用异常
  • 备注:

4.2 management_device_status

  • 接口类型:模块管理接口
  • 接口标识:0x02
  • 参数数目:0
  • 参数总长度:0字节
  • 示例请求序列:0x|0d000000|03000000|02|00000000
  • 返回值数目:8
  • 返回值总长度:15字节
  • 返回值1:pincode的设置状态,0-已启用pincode;1-未启用pincode;2-设备异常
  • 返回值2:设备登录重试次数倒数,有32次重试机会
  • 返回值3:solt0的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值4:solt1的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值5:solt2的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值6:solt3的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值7:solt4的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值8:solt5的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值9:solt6的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值10:secret0的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值11:secret1的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值12:secret2的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值13:secret3的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值14:secret4的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值15:secret5的存储状态,0-已使用;1-未使用;2-设备异常
  • 返回值16:secret6的存储状态,0-已使用;1-未使用;2-设备异常
  • 示例响应序列:0x|1f000000|03000000|0090|02|10000000|00200000000000000001010101010101
  • 状态码说明:0x9000表示接口调用正常,其他表示接口调用异常
  • 备注:

4.3 management_set_pincode

  • 接口类型:模块管理接口
  • 接口标识:0x03
  • 参数数目:4
  • 参数总长度:old pincode长度 + 1 + new pincode长度 + 1(必须大于或等于14byte)
  • 参数1:1byte,标识old pincode的长度
  • 参数2:old pincode(6-128个ascii码字符)
  • 参数3:1byte,标识new pincode的长度
  • 参数4:new pincode(6-128个ascii码字符)
  • 示例请求序列:0x|1b000000|04000000|03|0e000000|0631313131313106303132333435
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|04000000|0090|03|00000000
  • 状态码说明:1~5-设备异常,6-new pincode长度不符合;7-old pincode的长度不符合;8-new pincode不符合ascii限制;9-old pincode不符合ascii限制;10-old pincode不匹配,无法修改;11-初始密码不匹配(查看备注);12-设备异常;0-修改pincode成功
  • 备注:新设备默认密码为"111111"(device_status接口对应返回值为1的情况),此时访问除get_about、device_status、set_pincode以外的接口将被拒绝服务,访问access_by_pincode接口持续返回未启用返回码,用户此时设置密码需将old pincode设置为"111111"

4.4 management_access_by_pincode

  • 接口类型:模块管理接口
  • 接口标识:0x04
  • 参数数目:1
  • 参数总长度:pincode字符长度
  • 参数1:pincode
  • 示例请求序列:0x|13000000|05000000|04|06000000|303132333435
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|05000000|0090|04|00000000
  • 状态码说明:1~5-设备异常, 6-pincode少于6字符;7-pincode有非ascii码字符;8-pincode访问未启用,需修改密码;9-设备异常;10-pincode不匹配
  • 备注:

4.5 management_wirte_keypair

  • 接口类型:模块管理接口
  • 接口标识:0x05
  • 参数数目:3
  • 参数总长度:1 + 32 + 32字节
  • 参数1:写入的solt,值为0~6
  • 参数2:32字节私钥
  • 参数3:32字节公钥
  • 示例请求序列:0x|4e000000|06000000|05|41000000|00|0354737713d56bf3e22093d6260b35dba7ef031f8c608d2761818c78f65d82bb|9a6501818596c03a0f5a982e366801e7be9386f5134a0a698fe6dd6c0e50ac8c
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|06000000|0090|05|00000000
  • 状态码说明:1~5-设备异常;6-slot编号超出范围;7-无效币种;10-存储位置已被占用,写入需要先擦除原密钥;11-写入异常,私钥验证失败;
  • 备注:

4.6 management_erase_keypair

  • 接口类型:模块管理接口
  • 接口标识:0x06
  • 参数数目:3
  • 参数总长度:1 + 1 + n字节
  • 参数1:需要擦除的solt,值为0~6
  • 参数2:1字节的pincode长度标识
  • 参数3:n字节(参数2标识的长度)的pincode
  • 示例请求序列:0x|15000000|07000000|06|08000000|00|06|303132333435
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|07000000|0090|06|00000000
  • 状态码说明:1~5-设备异常;6-solt编号超出范围;10-pincode异常
  • 备注:

4.7 management_write_secret

  • 接口类型:模块管理接口
  • 接口标识:0x07
  • 参数数目:3
  • 参数总长度:1 + 4 + 4 + n字节
  • 参数1:写入的section,值为0~6
  • 参数2:数据序列crc32校验值(不包括数据长度)
  • 参数3:4字节数据长度描述
  • 参数4:n字节数据
  • 示例请求序列:0x|a0000000|0a000000|07|8f000000|01|36da2a74|8a000000|7b226e616d65223a2242696742616e67436f7265204c5743204d6f64756c65222c202276657273696f6e223a22302e322e30222c202268617368223a2232363939303538222c2022636f70797269676874223a2242696742616e67205465616d2032303230222c2022656d61696c223a22636f6e746163744062696762616e67636f72652e636f6d227d
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|0a000000|0090|07|00000000
  • 状态码说明:6-section编号超出范围;7-数据长度超长;8-存储位置已被占用,写入需要先擦除原数据;9~11-写入异常
  • 备注:

4.8 management_erase_secret

  • 接口类型:模块管理接口
  • 接口标识:0x08
  • 参数数目:3
  • 参数总长度:1 + 1 + n字节
  • 参数1:需要擦除的section,值为0~6
  • 参数2:1字节的pincode长度标识
  • 参数3:n字节(参数2标识的长度)的pincode
  • 示例请求序列:0x|15000000|08000000|08|08000000|00|06|303132333435
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|08000000|0090|08|00000000
  • 状态码说明:6-solt编号超出范围;8-擦除异常;10-pincode不匹配
  • 备注:

4.9 management_read_secret

  • 接口类型:模块管理接口
  • 接口标识:0x09
  • 参数数目:1
  • 参数总长度:1 字节
  • 参数1:需要读取的section,值为0~6
  • 示例请求序列:0x|0e000000|09000000|09|01000000|00
  • 返回值数目:2
  • 返回值总长度:4 + n
  • 返回值1:数据序列crc32校验值(不包括数据长度)
  • 返回值2:读取的数据序列
  • 示例响应序列:0x|a1000000|09000000|0090|09|92000000|36da2a74|8a000000|7b226e616d65223a2242696742616e67436f7265204c5743204d6f64756c65222c202276657273696f6e223a22302e322e30222c202268617368223a2232363939303538222c2022636f70797269676874223a2242696742616e67205465616d2032303230222c2022656d61696c223a22636f6e746163744062696762616e67636f72652e636f6d227d
  • 状态码说明:6-section编号超出范围;8-存储位置无数据
  • 备注:

4.10 management_get_id

  • 接口类型:模块管理接口
  • 接口标识:0x0a
  • 参数数目:0
  • 参数总长度:0
  • 示例请求序列:0x|0d000000|10000000|0a|00000000
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值2:读取的设备id
  • 示例响应序列:0x|2f000000|10000000|0090|0a|20000000|0123fcbdaac0b7cf5016f5c48955f64cda9b081bae6e15f60b3cf96073f5cdef
  • 状态码说明:1~5-设备异常
  • 备注:设备ID共有32字节,其中开头2字节和末尾2字节为固定标识,值分别为:0x0123和0xcdef;中间28字节为实际的全局唯一内容,其中前8字节为设备出厂时间的纳秒数,后20字节为设备出厂时产生的硬件随机数;二者可以分别使用也可以合并使用,均可作为识别设备身份的标识

4.11 management_reset_device

  • 接口类型:模块管理接口
  • 接口标识:0x0b
  • 参数数目:2
  • 参数总长度:1 + n字节
  • 参数1:1字节的pincode长度标识
  • 参数2:n字节(参数1标识的长度)的pincode
  • 示例请求序列:0x|14000000|11000000|0b|07000000|06|303132333435
  • 返回值数目:0
  • 返回值总长度:0
  • 示例响应序列:0x|0f000000|11000000|0090|0b|00000000
  • 状态码说明:10-pincode不匹配;9-擦除secret异常;8-擦除keypair异常
  • 备注:

4.12 management_clear_session

  • 接口类型:模块管理接口
  • 接口标识:0x0c
  • 参数数目:0
  • 参数总长度:0
  • 示例请求序列:0x|0d000000|10000000|0c|00000000
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值2:读取的设备id
  • 示例响应序列:0x|0f000000|10000000|0090|0c|00000000
  • 状态码说明:只返回0090-成功,4590-未登录,5690-参数长度错误
  • 备注:

5 钱包操作接口说明


5.1 wallet_get_ed25519_pk

  • 接口类型:钱包操作接口
  • 接口标识:0x23
  • 参数数目:1
  • 参数总长度:1字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 示例请求序列:0x|0e000000|01000000|23|01000000|[00~06]
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值1:32字节钱包公钥
  • 示例响应序列:0x|2f000000|01000000|0090|23|20000000|8cac500e6cdde68f690a4a13f58693bee70168362e985a0f3ac096858101659a
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥)
  • 备注:

5.2 wallet_get_curve25519_pk

  • 接口类型:钱包操作接口
  • 接口标识:0x24
  • 参数数目:1
  • 参数总长度:1字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 示例请求序列:0x|0e000000|02000000|24|01000000|[00~06]
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值1:32字节curve25519公钥
  • 示例响应序列:0x|2f000000|01000000|0090|24|20000000|5b122fdf28f448de1ae38f4ab48b962a7161f63691460a51b52b32d08e592603
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-公钥转换失败
  • 备注:

5.3 wallet_get_curve25519_sk

  • 接口类型:钱包操作接口
  • 接口标识:0x25
  • 参数数目:1
  • 参数总长度:1字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 示例请求序列:0x|0a000000|03000000|25|01000000|[00~06]
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值1:32字节curve25519私钥
  • 示例响应序列:0x|0000002b|03000000|0090|25|20000000|fe379d36efd3590309279bf30389b37600cd545be1dbaa5e96ed69de2a661f47
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-私钥转换失败
  • 备注:

5.4 wallet_get_address

  • 接口类型:钱包操作接口
  • 接口标识:0x26
  • 参数数目:1
  • 参数总长度:1字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 示例请求序列:0x|0a000000|04000000|26|01000000|[00~06]
  • 返回值数目:1
  • 放回置总长度:57
  • 返回值1:57字节字符串,不包含字符串'\0'结尾
  • 示例响应序列:0x|45000000|04000000|0090|26|3a000000|31643764706a36326473747979736a30356164386834357076627036713439687a783866643733657064386a70333433657a376d657a356e7800
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-地址转换失败
  • 备注:

6 交易操作接口说明


6.1 oraclize_data_signature

  • 接口类型:数据签名操作接口
  • 接口标识:0x43
  • 参数数目:3
  • 参数总长度:1 + 4 + n(n为待签数据长度)
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:待签名字节流长度
  • 参数3:待签名字节流(小端序)
  • 示例请求序列:0x|31000000|01000000|43|24000000|00|1f000000|31313131313131313131333333333333333333333333333333333333333333
  • 返回值数目:1
  • 返回值总长度:64
  • 返回值1:64字节的签名数据
  • 示例响应序列:0x|4f000000|01000000|0090|43|40000000|5f9c3a9745d51c84aa83cb399156eca69898cff63a7bb763af11f81e7b283bc39ed15350a3c2ba3942d200a36a7caed1d708b208ffb121b4c3daacf3c2db250b
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥)
  • 备注:

6.2 oraclize_data_verify

  • 接口类型:数据验签操作接口
  • 接口标识:0x44
  • 参数数目:4
  • 参数总长度:1 + 64 + 4 + n(n为验签数据长度)
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:签名(64字节)
  • 参数3:待验签数据字节流长度
  • 参数4:待验签数据字节流(小端序)
  • 示例请求序列:0x|71000000|02000000|44|64000000|00|5f9c3a9745d51c84aa83cb399156eca69898cff63a7bb763af11f81e7b283bc39ed15350a3c2ba3942d200a36a7caed1d708b208ffb121b4c3daacf3c2db250b|1f000000|31313131313131313131333333333333333333333333333333333333333333
  • 返回值数目:1
  • 返回值总长度:64
  • 返回值1:64字节的签名数据
  • 示例响应序列:0x|4f000000|01000000|0090|43|40000000|5f9c3a9745d51c84aa83cb399156eca69898cff63a7bb763af11f81e7b283bc39ed15350a3c2ba3942d200a36a7caed1d708b208ffb121b4c3daacf3c2db250b
  • 状态码说明:0x9000表示验签成功;1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-验签失败——签名与数据不匹配
  • 备注:

6.3 oraclize_transaction_signature

  • 接口类型:交易操作接口
  • 接口标识:0x45
  • 参数数目:2
  • 参数总长度:1 + n(n为原始transaction序列化后的长度)
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:原始交易序列化字节流(小端序)
  • 示例请求序列:2e010000|0a000000|45|21010000|008cac500e6cdde68f690a4a13f58693bee70168362e985a0f3ac096858101659a432d4c64ed58b06a2e06102e380a9aaf977ca3bb36c6d37d96b597cbb2a5f0bdf0160022d596c3ff7bdfa414c69dd199d8d9e37a3a39174b374ad59293dc2c115f9c20064d80d4c1036fea5e0b35492ed411450849121df4448ff5bcf89a3b6a1b9f2c5992ed137efbf68335a183fde1aa2b34e93616a7416dec3a9803d23961f6c5c469b54288297b2c476bf97ebfe5a59e05815a76b681621131f912b33c50abcaef6a065c05d532f443fc422ef2c24f60bb766553f48801b2d1f76ccf1563e9edc3deebddb400b832889f0212b91805ce1f69eaeb9f8cfa4f071c0c50c961498b63009dfb70f7ee0902ba95cc171f7d7a97ff16d89fd96e1f1b9e7d5f91da
  • 返回值数目:1
  • 返回值总长度:64
  • 返回值1:64字节的签名数据
  • 示例响应序列:4f000000|0a000000|0090|45|40000000|1e9324587252da22132e2dd3b206a01e472911cd339f59a3e469183f1278d917f0d6c2b40e4b97fe7d67ddf922663a9791d21154c676745dba704dbc43fc3208
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥)
  • 备注:

6.2 transaction_sign_v2

  • 接口类型:交易操作接口
  • 接口标识:0x46
  • 参数数目:2
  • 参数总长度:1 + n(n为原始transaction序列化后的长度)
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:原始交易序列化字节流(小端序)
  • 示例请求序列:2e010000|0a000000|45|21010000|008cac500e6cdde68f690a4a13f58693bee70168362e985a0f3ac096858101659a432d4c64ed58b06a2e06102e380a9aaf977ca3bb36c6d37d96b597cbb2a5f0bdf0160022d596c3ff7bdfa414c69dd199d8d9e37a3a39174b374ad59293dc2c115f9c20064d80d4c1036fea5e0b35492ed411450849121df4448ff5bcf89a3b6a1b9f2c5992ed137efbf68335a183fde1aa2b34e93616a7416dec3a9803d23961f6c5c469b54288297b2c476bf97ebfe5a59e05815a76b681621131f912b33c50abcaef6a065c05d532f443fc422ef2c24f60bb766553f48801b2d1f76ccf1563e9edc3deebddb400b832889f0212b91805ce1f69eaeb9f8cfa4f071c0c50c961498b63009dfb70f7ee0902ba95cc171f7d7a97ff16d89fd96e1f1b9e7d5f91da
  • 返回值数目:1
  • 返回值总长度:64
  • 返回值1:64字节的签名数据
  • 示例响应序列:4f000000|0a000000|0090|45|40000000|1e9324587252da22132e2dd3b206a01e472911cd339f59a3e469183f1278d917f0d6c2b40e4b97fe7d67ddf922663a9791d21154c676745dba704dbc43fc3208
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥)
  • 备注:

7 加密操作接口说明


7.1 crypto_box_beforenm

  • 接口类型:加密操作接口
  • 接口标识:0x63
  • 参数数目:2
  • 参数总长度:33字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:长度32字节的对方公钥
  • 示例请求序列:0x|2a000000|09000000|63|21000000|[00~07]|e8f96e9061256ad68dd31eea3f26728d5ddb1612515305c8ecbdce4d1869db69
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值1:32字节的访问密钥
  • 示例响应序列:0x|2b000000|09000000|0090|63|20000000|397612d2870c3b720dd65c26ad0cef5690fa1713d60287ca5a876b63dec2d7da
  • 状态码说明:15-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);89-计算异常
  • 备注:兼容sodium的crypto_box_beforenm函数

7.2 crypto_curve25519_scalarmult

  • 接口类型:加密操作接口
  • 接口标识:0x64
  • 参数数目:2
  • 参数总长度:33字节
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:长度32字节的对方公钥
  • 示例请求序列:0x|2a000000|0a000000|64|21000000|[00~07]|e8f96e9061256ad68dd31eea3f26728d5ddb1612515305c8ecbdce4d1869db69
  • 返回值数目:1
  • 返回值总长度:32
  • 返回值1:32字节的访问密钥
  • 示例响应序列:0x|2b000000|0a000000|0090|64|20000000|fe379d36efd3590309279bf30389b37600cd545be1dbaa5e96ed69de2a661f47
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-计算异常
  • 备注:

8 LWS协议操作接口


8.1 lws_request_signature

  • 接口标识:0x80
  • 参数数目:4
  • 参数总长度:1 + 32 + 4 + n
  • 参数1:0x00~0x06,对应钱包的序号
  • 参数2:长度32字节的LWS产生的seed
  • 参数3:待签名数据的总长度
  • 参数4:待签名数据字节序列
  • 示例请求序列:0x|52000000|02000000|80|45000000|08|91b0c7b85f0806ebcda63594b5eee5a56714fac150824998c1a6d644c5929757|20000000|91b0c7b85f0806ebcda63594b5eee5a56714fac150824998c1a6d644c5929757
  • 返回值数目:1
  • 返回值总长度:20
  • 返回值:20字节签名序列
  • 示例响应序列:0x|23000000|02000000|0090|80|14000000|8f2d663b5ac5f57a33a25c0f4cd88a502c378628
  • 状态码说明:1~5-设备异常;6-钱包序号超出范围;7-钱包不可用(未设置密钥);8-计算异常
  • 备注:

9 测试相关


Clone this wiki locally