fabric中通过工厂模式来生成bccsp实例,进而通过bccsp的接口来实现加密、解密、签名验证以及哈希等操作。 fabric的factory工厂默认返回的bccsp实例是sw(也就是所有密码操作都是封装go底层算法来实现的),这里的工厂模式代码不多,大家可以自己去fabric/bccsp/factory目录下阅读源代码,以后有时间单独作为一章来介绍。
sw在fabric项目发展中又一次较大的改动:
1、在fabric-1.0发布前,代码的结构是通过具体算法来组织的,比如ecdsa相关的生成密钥、签名以及验证等编写在同一个go文件中。
2、fabric-1.0发布后,代码按照bccsp接口实现来组织代码,比如关于密钥生成的操作KeyGen,aes,rsa以及ecdsa的密钥生成操作都组织到一个go文件中,它们都实现了同一个接口KeyImporter,当调用bccsp的密钥生成算法KeyGen的时候,通过反射的机制来判断具体需要生成什么类型的密钥。新版本的优点是更加容易扩展,并且bccsp接口实现的代码更加简洁。
以下不作说明,以fabric-1.0版本以后的sw来介绍。本着“无图说个j8”原则,先附一张sw下的文件列表图:
好了,这就是bccsp子包sw里面的代码,从文件名字上来看,主要分为6类:
1、internals.go:定义了一组接口,每个接口对应bccsp接口中的一个函数,internals.go中的接口简化了bccsp接口的实现。
2、fileks.go:密钥存储和读取相关
3、impl.go:sw的主文件,通过调用6中的函数来实现bccsp的各个接口。
4、以算法名字开头的:密码算法实现相关。
5、以算法名字+key开头的: 定义该算法密钥的具体数据结构,并实现Key接口
6、以bccsp接口函数开头的:包含了bccsp接口各个函数的具体实现代码。
-------------代码包含了一切,想要深入了解,只能近距离接触------------------------------
Code is there, it all depends on you to read or not :-)