使用国密

目前我们开源的国密密码学插件支持SM2/SM3/SM4算法,并且国密插件支持对Nist P256算法生成的地址和签名数据进行验签。

如果要创建一个基于国密算法的链,需要完成以下几个步骤:

  1. 首先确认使用了v3.7以上的XuperChain版本,并且编译产出中包含了*plugins/crypto/crypto-gm.so.1.0.0*,在插件配置*conf/plugins.conf*中确认包含如下配置内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
"crypto":[
    ....,
    {
        "subtype": "gm",
        "path": "plugins/crypto/crypto-gm.so.1.0.0",
        "version": "1.0.0",
        "ondemand": false
    }],
    ....
}

2. 首先对每个节点创建一个基于国密算法生成的节点私钥和地址。 注意,data/keys*目录原来保存的是默认密码学插件生成的私钥,可以删除原私钥目录,或者使用-f*参数强制覆盖原私钥。如果不希望覆盖原节点密钥,可以在*–output*参数后面指定新的私钥目录。私钥生成后,可以查看私钥文件,其中*Curvname*应该是**SM2-P-256**。

1
xchain-cli account newkeys --output data/keys --cryptotype gm
  1. 修改待创建链的创世块配置,通过**crypto**字段指定默认密码学插件为国密插件,并修改矿工地址为新生成的国密私钥对应的地址。一般默认创世块配置位于*data/config/xuper.json*,修改创世块配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    ...,
    "predistribution": [
        {
            "address": "此处替换为国密address",
            "quota": "100000000000000000000"
        }
    ],
    "crypto": "gm",
    ...,
    "genesis_consensus": {
        "name": "tdpos",
        "config": {
            ...,
            "init_proposer": {
                "1": [
                    "此处替换为国密address"
                ]
            }
        }
    }
}
  1. 创建链并启动:

1
2
xchain-cli createChain
nohup ./xchain &
  1. 使用命令行进行操作时,需要通过*–cryptotype*参数指定加密类型为国密,例如transfer命令。

1
xchain-cli transfer --to alice --amount 1 --keys data/keys --cryptotype gm
  1. 目前国密只支持使用Go SDK调用,后续会支持更多SDK。