代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。