上一篇簡單介紹了bccsp包下面的目錄結構,這一篇本來想講sw的,忽然感覺少點什么,對哈,得先將下bccsp這個接口,sw只是個實現啊。
😄下面是bccsp接口定義(bccsp整個包通過bccsp定義的通用接口對外提供對稱算法、非對稱算法以及哈希操作)
第一次看肯定暈暈的,尤其是不太懂go語言的同學,拿我們的KeyGen來舉個例子吧,KeyGen的定義如下:
// KeyGen generates a key using opts. KeyGen(opts KeyGenOpts) (k Key, err error)
這里的輸入參數KeyGenOpts和輸出參數Key也都是接口(至於為什么兩個返回值?抱歉go語言就這樣,這語言不是我開發的)
至於這個接口怎么用,比如說我想生成ecdsa的密鑰,調用方式是這樣的:
key, err := currentBccsp.KeyGen(&bccsp.ECDSAKeyGenOpts{false}) if err !=nil{ //"handler err" }
這個返回值key就是一個ecdsa的密鑰,其他的bccsp接口函數只要用到此處生成的key,你就可以直接把這個key當作參數傳遞使用,這個時候你不需要關注這個key的類型到底是ecdsa還是rsa,甚至是aes,bccsp的實例會根據通過接口類型斷言來判斷具體是什么類型,然后執行對應密碼算法的加解密或者簽名驗證操作。
啊歐,原來這么簡單,那么是不是生成rsa密鑰就是傳入&bccsp.RSAKeyGenOpts{false}啊,bingo!
這里的各種xxKeyGenOpts也是實現了同一組接口KeyGenOpts。
:-) 細心的小伙伴可能會留意到參數里面那個false是個什么鬼,大家現在只需要知道這個是用來表示生成的密鑰是臨時的還是永久的就足夠了。
bccsp接口的其他函數使用方式與上面的KeyGen類似。
-----------------------------------------------------
Designing well make life better.