fabric国密改造记录及思路-具体工作(1)

545305939 · · 2958 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

下边分享国密改造具体工作和方法:

一、国密SM2/SM3/SM4算法代码库,基于国密算法的TLS/SSL代码库

      (1)、在国密改造中我们需要SM2/SM3/SM4的算法库,在github上已经有开源的代码库,将代码库下载到本地开发环境;

     下面简单介绍SM2/SM3/SM4的功能:

         SM2:国密椭圆曲线算法库

         SM3:国密hash算法库

         SM4:国密分组密码算法库,类似于AES加密算法

(2)、国密算法的TLS/SSL代码库,在github上也有开源的代码库,将代码库下载到本地开发环境

上边是国密改造中需要用到的国密算法基础代码库,我们的国密改在也是基于这两个基础库完成。

二、BCCSP模块改造

      (1)、首先我们需要对BCCSP模块做一个初步的了解,看如下源码:

加密服务提供者,bccsp接口定义,源码位置 bccsp/bccsp.go文件尾部位置

key秘钥接口定义,源码位置bccsp/bccsp.go文件头部位置

秘钥存储接口,源码位置bccsp/keystore.go

通过上边的几个接口定义,大致的了解bccsp模块的加密模块需要做哪些工作。

创建bccsp的gm国密模块,这部分的内容比较多,不做详细的文字说明,这部分代码的实现思路是,参照sw模块来实现,这个模块的功能实现后,接下来的工作就相对比较简单,只需要细心完成即可;

修改规则:

  (1)、将调用ecdsa包里边的方法替换成sm2

  (2)、将调用x509包里边的方法替换成sm2

  (3)、将调用crypto/tls包里边的方法替换成 国密 tls

 

完成这个模块的国密修改的工作后,需要在 bccsp/new.go这文件的 NewWithParams方法里边将实现的国密算法加入到swbccsp中,入下代码:

swbccsp.AddWrapper(reflect.TypeOf(&gmsm2PrivateKey{}), &gmsm2PrivateKeyVerifier{})//sm2 私钥验签

swbccsp.AddWrapper(reflect.TypeOf(&gmsm2PublicKey{}), &gmsm2PublicKeyKeyVerifier{})//sm2 公钥验签

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM3Opts{}), &hasher{hash:sm3.New})//sm3 Hash选项

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2KeyGenOpts{}), &gmsm2KeyGenerator{})

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM4KeyGenOpts{}), &gmsm4KeyGenerator{length:32})

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM4ImportKeyOpts{}), &gmsm4ImportKeyOptsKeyImporter{})

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2PrivateKeyImportOpts{}), &gmsm2PrivateKeyImportOptsKeyImporter{})

swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2PublicKeyImportOpts{}), &gmsm2PublicKeyImportOptsKeyImporter{})

 

下一篇:具体工作2


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2958 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传