Ai
3 Star 0 Fork 0

河北素数信息安全有限公司/crypto-hw-std-interface

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
container.go 3.49 KB
一键复制 编辑 原始数据 按行查看 历史
zjh0125 提交于 2025-05-16 15:09 +08:00 . feat:容器操作相关方法;
package skf
import (
"fmt"
"gitee.com/sushuxinan/crypto-hw-std-interface/skf/util"
"unsafe"
)
// EnumerateContainer 枚举出应用中所有的容器
//
// appHandle 应用句柄
func EnumerateContainer(appHandle unsafe.Pointer) ([]string, error) {
var listLen uint32
// 先获取容器列表字节长度
if c := enumContainer(appHandle, nil, &listLen); c != util.Ok {
return nil, fmt.Errorf("容器列表获取失败:%s", util.ParseErrorCode(c))
}
nameList := make([]byte, listLen)
// 再获取容器列表
if c := enumContainer(appHandle, &nameList[0], &listLen); c != util.Ok {
return nil, fmt.Errorf("容器列表获取失败:%s", util.ParseErrorCode(c))
}
return util.ParseList(nameList), nil
}
// OpenContainer 打开名称为 cName 的容器,并返回容器句柄
//
// appHandle 应用句柄 cName 容器名称
func OpenContainer(appHandle unsafe.Pointer, cName string) (unsafe.Pointer, error) {
var cHandle unsafe.Pointer
appNameBytes := []byte(cName)
if c := openContainer(appHandle, &appNameBytes[0], &cHandle); c != util.Ok {
return nil, fmt.Errorf("打开容器失败:%s", util.ParseErrorCode(c))
}
return cHandle, nil
}
// CloseContainer 关闭某个容器
//
// cHandle 容器句柄
func CloseContainer(cHandle unsafe.Pointer) error {
if c := closeContainer(cHandle); c != util.Ok {
return fmt.Errorf("关闭容器失败:%s", util.ParseErrorCode(c))
}
return nil
}
// CreateContainer 创建容器,并返回容器句柄
//
// appHandle 应用句柄 name 容器名称
func CreateContainer(appHandle unsafe.Pointer, name string) (unsafe.Pointer, error) {
if name == "" {
return nil, fmt.Errorf("容器名称不能为空")
}
var cHandle unsafe.Pointer
nameBytes := []byte(name)
c := createContainer(appHandle, &nameBytes[0], &cHandle)
if c != util.Ok {
return nil, fmt.Errorf("创建容器失败:%s", util.ParseErrorCode(c))
}
return cHandle, nil
}
// DeleteContainer 删除应用中名称为 cName 的容器
//
// appHandle 应用句柄 cName 容器名称
func DeleteContainer(appHandle unsafe.Pointer, cName string) error {
containerNameBytes := []byte(cName)
if c := deleteContainer(appHandle, &containerNameBytes[0]); c != util.Ok {
return fmt.Errorf("删除容器失败:%s", util.ParseErrorCode(c))
}
return nil
}
// ImportCertificate 导入数字证书
//
// cHandle 容器句柄 isSign 是否是签名证书,false表示加密证书 cert 证书字节数字
func ImportCertificate(cHandle unsafe.Pointer, isSign bool, cert []byte) error {
var b int32
var label string
if isSign {
b = TRUE
label = "签名"
} else {
b = FALSE
label = "加密"
}
if c := importCertificate(cHandle, b, &cert[0], uint32(len(cert))); c != util.Ok {
return fmt.Errorf("导入%v证书失败:%s", label, util.ParseErrorCode(c))
}
return nil
}
// ExportCertificate 导出数字证书
//
// cHandle 容器句柄 isSign 是否是签名证书,false表示加密证书
func ExportCertificate(cHandle unsafe.Pointer, isSign bool) ([]byte, error) {
var (
b int32
label string
certLen uint32
)
if isSign {
b = TRUE
label = "签名"
} else {
b = FALSE
label = "加密"
}
// 先获取证书字节长度
if c := exportCertificate(cHandle, b, nil, &certLen); c != util.Ok {
return nil, fmt.Errorf("导出%v证书失败:%s", label, util.ParseErrorCode(c))
}
cert := make([]byte, certLen)
if c := exportCertificate(cHandle, b, &cert[0], &certLen); c != util.Ok {
return nil, fmt.Errorf("导出%v证书失败:%s", label, util.ParseErrorCode(c))
}
return cert, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/sushuxinan/crypto-hw-std-interface.git
git@gitee.com:sushuxinan/crypto-hw-std-interface.git
sushuxinan
crypto-hw-std-interface
crypto-hw-std-interface
skf/v0.0.6

搜索帮助