Hyperledger Fabric密碼模塊系列之BCCSP(四)


前面說過要找時間介紹一下bccsp包下面的工廠factory,so here it is.

 

通過factory目前可以獲得兩類BCCSP實例,一個是上文說的sw,還有一個是通過pkcs11實現的。

BCCSP實例是通過工廠來提供的,sw包對應的工廠在swFactory.go中實現,pkcs11包對應的工廠在pkcs11Factory.go中實現,它們都共同實現了下面的BCCSPFactory接口:

// BCCSPFactory is used to get instances of the BCCSP interface.
11 // A Factory has name used to address it.
12 type BCCSPFactory interface {
13
14     // Name returns the name of this factory
15     Name() string  //用來返回bccsp接口實例名
16
17     // Get returns an instance of BCCSP using opts.
18     Get(opts *FactoryOpts) (bccsp.BCCSP, error)  //根據opts配置返回具體的bccsp實例
19 }

需要注意的是,在factory.go源碼中,用全局變量bccspMap(一個BCCSP的數組)來保存這些實例化的bccsp,同時用一個全局變量bootBCCSP來保存缺省的BCCSP接口實例.  這兩個全局變量的初始化工作是通過調用InitFactories來實現的。

// InitFactories must be called before using factory interfaces
  8 // It is acceptable to call with config = nil, in which case
  7 // some defaults will get used
  6 // Error is returned only if defaultBCCSP cannot be found
  5 func InitFactories(config *FactoryOpts) error {
  4     factoriesInitOnce.Do(func() {
  3         setFactories(config)
  2     })
  1
        return factoriesInitError
  1 }

1、在使用BCCSP之前都需要調用上面的函數來對bootBCCSP和bccspMap來賦值,之后就可以使用GetDefault()來獲取缺省bootBCCSP(默認是sw)或者通過GetBCCSP(name string)來獲取bccspMap中其他的BCCSP實例(sw或者pkcs11).  其實bccsp/factory包下面還提供了其他的方法來獲取BCCSP實例,如也可以直接通過GetBCCSPFromOpts根據opts的設置來直接得到具體的BCCSP實例,這部分可以直接去看代碼實現。

2、接下來就可以通過獲取的BCCSP實例(如sw或者pkcs11實現)進行加解密,簽名驗證,哈希,密鑰導入和派生以及密鑰生成操作

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

 先把流程弄清楚然后擼代碼,這樣會爽一點。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM