github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/README.md (about) 1 # ccgo 国密改造fabric 使用go加密模块 2 3 ================ 4 基于`go1.17.5`实现的国密算法库,包括: 5 - sm2 : 基于`emmansun/gmsm`的sm2部分实现部分扩展。 6 - sm2soft : 基于`tjfoc/gmsm`的sm2部分的纯软实现,仅作验证与参考用。 7 - sm3 : 基于`emmansun/gmsm`的sm3部分实现部分扩展。 8 - sm3soft : 基于`tjfoc/gmsm`的sm3部分的纯软实现,仅作验证与参考用。 9 - sm4 : 基于`emmansun/gmsm`的sm4部分实现部分扩展。 10 - sm4soft : 基于`tjfoc/gmsm`的sm4部分的纯软实现,仅作验证与参考用。 11 - x509 : 基于`go1.17.5`的x509包与本项目的sm2/sm3/sm4包实现国密改造。 12 - gmtls : 基于`go1.17.5`的tls包与本项目的sm2/sm3/sm4包实现国密改造。 13 - gmhttp : 基于`go1.17.5`的`net/http`包做了对应的国密改造。 14 - grpc : 基于`google.golang.org/grpc`的`v1.44.0`版本做了对应的国密改造。 15 16 > 在x509与gmtls的实现中,国密算法采用的是基于`emmansun/gmsm`的国密实现,该开源项目已实现利用amd64与arm64架构CPU实现对应国密算法的硬件加速。sm2soft/sm3soft/sm4soft是对应国密算法的纯软实现,仅用作验证与参考。 17 18 # gmgo的包路径 19 go package: `github.com/hxx258456/ccgo` 20 21 # 国密标准参考 22 本项目涉及到的国密有SM2、SM3和SM4,相关国密标准如下: 23 24 - GB/T 33560-2017 密码应用标识规范 25 - GB/T 32918.1-2016 SM2椭圆曲线公钥密码算法 第1部分:总则 26 - GB/T 32918.2-2016 SM2椭圆曲线公钥密码算法 第2部分:数字签名算法 27 - GB/T 32918.3-2016 SM2椭圆曲线公钥密码算法 第3部分:密钥交换协议 28 - GB/T 32918.4-2016 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法 29 - GB/T 32918.5-2017 SM2椭圆曲线公钥密码算法 第5部分:参数定义 30 - GB/T 35275-2017 SM2密码算法加密签名消息语法规范 31 - GB/T 35276-2017 SM2密码算法使用规范 32 - GB/T 32905-2016 SM3密码杂凑算法 33 - GB/T 32907-2016 SM4分组密码算法 34 35 # 测试案例 36 从测试案例入手快速了解gmgo的使用。 37 38 ## sm2 39 测试案例代码: `sm2test/sm2_test.go` 40 ```sh 41 cd sm2test 42 go test 43 44 ``` 45 46 ## sm3 47 测试案例代码: `sm3/sm3_test.go` 48 ```sh 49 cd sm3 50 go test 51 52 ``` 53 54 ## sm4 55 测试案例代码: `sm4/sm4_test.go`、`sm4/sm4_gcm_test.go` 56 ```sh 57 cd sm4 58 go test 59 60 ``` 61 62 ## x509 63 测试案例代码: `x509/x509_test.go` 64 ```sh 65 cd x509 66 go test -v -run "^(TestX509|TestX509WithFile|TestCreateCertFromCA)$" 67 68 ``` 69 70 注意,`x509_test`的`TestCreateCertFromCA`测试函数生成的sm2系列密钥文件与证书将会用于`gmtls`与`gmgrpc`的测试案例。 71 72 73 ## gmtls 74 测试案例代码: `gmtls/tls_test/tls_test.go` 75 ```sh 76 cd gmtls/tls_test 77 go test 78 79 ``` 80 81 执行之前请确认`certs`目录下的sm2系列文件是否最新。可以在该目录下执行`copyCerts.sh`直接从x509的对应目录下拷贝。 82 83 ## gmgrpc 84 测试案例代码: `grpc/grpc_test/grpc_test.go` 85 ```sh 86 cd grpc/grpc_test 87 go test 88 89 ``` 90 91 执行之前请确认`testdata`目录下的文件是否最新。可以在该目录下执行`copyCerts.sh`直接从x509的对应目录下拷贝。 92 93 94 本项目参考了以下开源项目,基于其代码做了部分二次开发,向对应的开源作者表示感谢! 95 - `https://github.com/emmansun/gmsm` 96 - `https://github.com/tjfoc/gmsm` 97 - `https://github.com/golang/go` 98 - `https://github.com/grpc/grpc-go` 99 - `https://github.com/envoyproxy/go-control-plane` 100 - `https://github.com/golang/net` 101 - `https://github.com/gorilla/mux` 102 - `https://github.com/gorilla/handlers` 103 - `https://github.com/felixge/httpsnoop` 104 - `https://github.com/grpc-ecosystem/go-grpc-middleware` 105 - `https://github.com/prometheus/client_golang` 106 107 对应的版权声明参见目录`thrid_licenses`。