上一篇简单介绍了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.