1. 程式人生 > >[區塊鏈]Hyperledger Fabric原始碼(基於v1.0 beta版本)閱讀之樂扣老師解讀系列 (三)BCCSP包之工廠包

[區塊鏈]Hyperledger Fabric原始碼(基於v1.0 beta版本)閱讀之樂扣老師解讀系列 (三)BCCSP包之工廠包

核心包之BCCSP(區塊鏈加密服務提供者)包之factory工廠包

首先,我們看其程式碼結構:
這裡寫圖片描述
主要包含factory工廠包,mocks模擬測試包,加解密關聯包pkcs11、signer簽名包、sw加解密實現包以及工具包utils。
根據整個結構我們對本講的內容做如下安排:
一,factory工廠包,主要描述了sw工廠的實現,pkcs11的工廠方法實現,同時還包含了一部分opts的實現。
二,pkcs11實現包,主要描述了對於標準演算法的實現。
三,signer簽名包,主要描述了簽名者相關實現。
四,sw實現包,主要描述了可插拔式自定製演算法的實現。
五,utils工具包,主要描述了其他相關工具的實現。

一,核心包之BCCSP(區塊鏈加密服務提供者)包之factory工廠包

包內容簡介:提供工廠模式支援,將來包括若干型別的 BCCSP 實現。
null:空實現,測試用;
software:軟體實現;
HSM:PKCS11,基於高安全模組的實現。

包中核心檔案的內容及方法:

核心檔案1*factory.go:*
方法:BCCSPFactory interface
⭕️介面來獲取BCCSP例項。

方法:GetBCCSP(name string) (bccsp.BCCSP, error)
⭕️根據輸入【名字】來返回 BCCSP例項。

方法:initBCCSP(f BCCSPFactory, config *FactoryOpts) error
⭕️載入配置檔案,如果格式或者內容有錯,則報錯,計入日誌中並返回空。
————————————————————————————

核心檔案2*nopkcs11.go:*
方法:InitFactories(config *FactoryOpts) error
⭕️InitFactories方法必須使用在工廠介面之前,並且可以接受配置檔案為空或者一些預設配置。但如果defaultBCCSP沒有被設定會報錯。

方法:GetBCCSPFromOpts(config *FactoryOpts) (bccsp.BCCSP, error)
⭕️當一些可選的輸入在配置檔案中被正確讀取的時候,GetBCCSPFromOpts能夠生成BCCSP例項。
————————————————————————————

核心檔案3*opts.go:*
方法:GetDefaultOpts() *FactoryOpts
⭕️為一些可選的設定提供實現,如生產者的名稱SW、雜湊家族引數SHA2、SecLevel安全層級256級。臨時屬性Ephemeral。
————————————————————————————

核心檔案4*pkcs11.go:*
方法:InitFactories(config *FactoryOpts) error
⭕️InitFactories方法必須使用在工廠介面之前,並且可以接受配置檔案為空或者一些預設配置。但如果defaultBCCSP沒有被設定會報錯。

方法:setFactories(config *FactoryOpts) error
⭕️主要是為了一些關鍵引數服務,讀取引數後為空的來設定預設引數。包括ProviderName、SwOpts、initBCCSP、Pkcs11Opts等

方法:GetBCCSPFromOpts(config *FactoryOpts) (bccsp.BCCSP, error)
⭕️當一些可選的輸入在配置檔案中被正確讀取的時候,GetBCCSPFromOpts能夠生成BCCSP例項。
————————————————————————————

核心檔案5*pkcs11factory.go:*
在這裡公鑰加密標準是PKCS#11,整個母工廠是基於此標準的實現,因此名字設定為PKCS11(即PKCS11BasedFactoryName)。
而且整個PKCS11Factory是一個(HSM)基於分級儲存管理的Bccsp 工廠實現。

方法:(f *PKCS11Factory) Get(config *FactoryOpts) (bccsp.BCCSP, error)
⭕️該方法主要是從加密標準著手,通過讀取PKCS11Factory的配置檔案config來生成工廠例項。在beta版本中,這裡有個TODO特別進行了說明。大意是PKCS11是不需要金鑰庫(keystore)的,但目前還沒有從PKCS11 BCCSP中拆分出去,所以這裡留著待後續進行改進,因此程式碼實現中依然保留了一部分keystore的實現。
————————————————————————————
核心檔案6*swfactory.go:*
通過可插拔式的軟體演算法實現,來實現的一個工廠。名字設定為SW(即SoftwareBasedFactoryName)

方法:(f *SWFactory) Get(config *FactoryOpts) (bccsp.BCCSP, error)
⭕️該方法的金鑰庫(keystore)是取決於swOpts中的配置資訊來決定。前文配置的四個引數中Ephemeral為true時,通過NewDummyKeyStore來獲取籤檔案方法。否則就是通過讀取檔案的方式來NewFileBasedKeyStore獲取簽名證書方法。

結構:SwOpts struct
⭕️這裡主要是描述了swopts的引數構成,如有前文已經介紹的SecLevel安全等級、HashFamily雜湊選型,還有一些可選的金鑰庫(keystore)引數如Ephemeral臨時性引數、及上述介紹了的金鑰庫(keystore)方法FileKeystore與DummyKeystore。

結構: FileKeystoreOpts struct
⭕️該方法的結構體中主要是金鑰庫(keystore)的地址。
————————————————————————————

工廠包小結

整個工廠包可以看到更多還是關於配置的相關設定,同時考慮了default和例外的處理,同時對於初始化以及操作邏輯上做了特別的註釋。

結束語

覺得好的朋友可以給我大賞一杯咖啡錢緩解通宵梳理環境的疲乏〜!
方式一:支付寶
這裡寫圖片描述
方式二:以太坊
這裡寫圖片描述