hyperledgerfabric密码模块系列之bccsp

warm3snow warm3snow     2022-09-19     755

关键词:

   Fabric作为IBM主导的区块链平台,可谓是联盟链中的一枝独秀,现如今已经有100多个大型国际银行、金融以及科技公司的加盟。与其说Fabric是区块链的一种平台,倒不如说是一个区块链框架更加精确,因为如果你渐渐了解熟悉之后,你会发现他并不像Bitcoin和Ethereum一样,可以作为单独的应用来使用。而Fabric就像是其他框架一样,你必须通过智能合约来实现自己的业务才能使用,包括代币(如果你的业务场景需要的话)也需要自己小心翼翼的去自主实现。还有个重要的特点就是Fabric是插件化的,你可以方便的实现自己的共识算法、密码算法以及成员服务等,哪里需要换哪里。

  这里提到了密码算法插件化(可插拔),对,我们接下来的日子里就针对Fabric的密码算法模块BCCSP(blockchain crypto service provider)进行分析,并且将SMx(国密算法)系列算法进行适配。

————————————进入正题——————————————————

bccsp目录结构如下

简单介绍一下:

bccsp.go:  主要接口声明的文件,比如BCCSP、Key、各种Opts等, 其中BCCSP接口包含了Sign Verify Encrypt Decrypt Hash KeyGen KeyDerive等

sw: bccsp的纯软件实现,内部实现通过调用go原生支持的密码算法,并且提供了一个keystore来保存密钥,密钥默认保存在/tmp目录下

pkcs11: bccsp的pkcs11实现,通过调用pkcs11接口来实现相关的密码操作,仅支持ecdsa、rsa以及aes算法。密钥保存在pkcs11通过pin口令保护的数据库或者硬件设备中。

utils:工具包,密钥编码转换等

signer: 实现了go的crypto.signer接口

factory:factory是bccsp的一个工厂,可以通过这个工厂返回一个具体的bccsp实例,比如上面说的sw或者pkcs11,如果添加了自己的bccsp实现,也要讲该bccsp添加到factory中。

 

--------------------------------------------------

Well begun is half done.

 

django之auth模块(代码片段)

...一个auth模块,帮助用户实现注册、登录、注销以及修改密码等功能,帮助开发者省去了很多功夫。auth模块在创建模型时,Django内部会生成一个名为auth_user的数据表,用于存储认证的用户信息。auth模块提供了一系列的方法,使用... 查看详情

爬虫系列

爬虫系列之第1章-requests模块爬虫系列之第2章-BS和Xpath模块爬虫系列之第3章-Selenium模块爬虫系列之第4章-scrapy框架    查看详情

标准库系列之xml模块

Python标准库系列之xml模块Python’sinterfacesforprocessingXMLaregroupedinthexmlpackage.带分隔符的文件仅有两维的数据:行和列。如果你想在程序之间交换数据结构,需要一种方法把层次结构、序列、集合和其他的结构编码成文本。XML是最突... 查看详情

arduino系列之按键模块

今天我将简单介绍按键模块计数的原理:我们常用的按键及按键模块有2脚和4脚的,其内部结构如图所示,当按下按键时就会接通按键两端,当放开时,两端自然断开。             &... 查看详情

node系列之url模块

引入url:consturl=require("url");用于URL解析、处理等操作的解决方案1.url.parse(urlStr[,parseQueryString][,slashesDenoteHost])将url字符串转换成object对象/** *urlStr:需要处理的url字符串 *parseQueryString:是否将查询参数也解析成对象 *&nbs 查看详情

python基础系列讲解——时间模块详解大全之time模块

Python中提供处理时间日期相关的内置模块有time、datetime和calendar。time模块中大多数函数调用了所在平台Clibrary的同名函数,因此更依赖于操作系统层面,所以time模块的有些函数与平台相关,在不同的平台上可能会有不同的效果,... 查看详情

saltstack学习系列之state常用模块

常用模块:cron,cmd,file,mount,ntp,pkg,service,user,groupcmd模块参数:name:要执行的命令unless:用于检查的命令,只有unless指向的命令返回False时才执行name那行的命令cwd:执行命令时的目录,默认为rootuser:以指定用户身份运行命令group:以指定用户组... 查看详情

自动化运维saltstack系列之配置管理业务模块

业务模块 业务模块要尽量和系统模块区分开,系统模块要做到随时能被业务模块所调用;特别是在多种业务模式共存的环境中,我们要使每个业务模块独立一个prod环境,方便统一管理而不影响其他业务。PHP模块[[email prot... 查看详情

硬件系列之超声波模块介绍

HC-SR04模块可提供2cm-40cm的非接触式距离感测功能,测距精度可达3mm:模块包括超声波发生器,接收器与控制器,检测角度30度。控制方式:采用IO口TRIG触发测距,给最少10us的高电平信号模块自动发送八个40khz的方波,自动检测是... 查看详情

es6系列_16之模块化操作(代码片段)

ES6的模块化操作主要包括两个方面。(1)export:负责进行模块化,也是模块的输出。(2)import:负责把模块引,也是模块的引入操作。export的用法:export可以让我们把变量,函数,对象进行模块化,提供外部调用接口,让外部进... 查看详情

数据库设计系列之三

...站为例,在这个电子商务网站的系统中包括了几个核心的模块:用户模块、商品模块、订单模块、购物车模块、供应商模块&n 查看详情

kali系列之hydrassh密码爆破

环境kali192.168.137.131靶机192.168.137.133语句hydra-lroot-P/home/chenglee/zidian/wordlist.TXT-t6ssh://192.168.137.133状态[email protected]:/home/chenglee#hydra-lroot-P/home/chenglee/zidian/wordlist.TXT-t 查看详情

gitlab系列八之重置管理员密码

gitlabweb登入密码忘记以后可以用如下方式修改密码[[email protected]gitlab]#gitlab-railsconsoleproductionLoadingproductionenvironment(Rails4.2.6)irb(main):001:0>user=User.where(id:1).first//id为1的是超级管理员irb(main):001 查看详情

abp框架系列学习模块系统之示例开发(代码片段)

0.引言上一篇博文主要介绍了ABP模块及插件的相关知识,本章节主要开发一个插件示例来学习如何创建一个插件,并在应用程序中使用。这个命名为FirstABPPlugin的插件主要在指定的时间段内删除审计日志。1.创建插件(1).新建项目... 查看详情

自动化运维saltstack系列之配置管理系统模块

...型web架构网站其实并不是很难,最主要是合理管理各功能模块之间依赖关系,尽量独立各功能模块,让每一个系统功能都可以被业务引用。650)this.width=650;"title="1476016541399068.png"alt="saltstack.png"src="http://www.lichengbing.com/ueditor/php/upload... 查看详情

爬虫系列之第3章-selenium模块(代码片段)

简介selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果... 查看详情

wpf学习笔记之点登录按钮时判断用户名密码进行登录:动画系列之

...)的代码:再添加登录按钮代码进行登录,验证用户名和密码在数据库是否正确。直接上代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Wind 查看详情

javascript系列文章:react总结之webpack模块组织(代码片段)

...在浏览器中运行。今天就结合React来梳理一下Webpack打包时模块的组织结构,先给定下面一个简单的应用示例:importReactfrom‘react‘;importReactDOMfrom‘reac 查看详情