Documentation
¶
Index ¶
- Constants
- func Exit()
- func ExportEncPublicKeyECC(session HANDLE, keyIndex uint32) (ECCrefPublicKey, RV)
- func ExportSignPublicKeyECC(session HANDLE, keyIndex uint32) (ECCrefPublicKey, RV)
- func ExternalEncryptECC(session HANDLE, pubKey ECCrefPublicKey, data []byte) (ECCCipher, RV)
- func GenerateKeyWithEPKECC(session HANDLE, keyBits uint32, pubKey ECCrefPublicKey) (ECCCipher, HANDLE, RV)
- func GenerateKeyWithIPKECC(session HANDLE, keyIndex uint32, keyBits uint32) (ECCCipher, HANDLE, RV)
- func GenerateKeyWithKEK(session HANDLE, kekIndex uint32, keyBits uint32) ([]byte, HANDLE, RV)
- func ISO9797M3Padding(data []byte, blockSize int) ([]byte, error)
- func ImportKeyWithISKECC(session HANDLE, keyIndex uint32, cipher ECCCipher) (HANDLE, RV)
- func ImportKeyWithKEK(session HANDLE, kekIndex uint32, key []byte) (HANDLE, RV)
- func Init(libPath string) error
- func InternalSignECC(session HANDLE, keyIndex uint32, hash []byte) (ECCSignature, RV)
- func OpenSession() (HANDLE, RV)
- type ECCCIPHERBLOB
- type ECCCipher
- type ECCPUBLICKEYBLOB
- type ECCSignature
- type ECCrefPrivateKey
- type ECCrefPublicKey
- type HANDLE
- type RV
- func CloseSession(session HANDLE) RV
- func CreateFile(session HANDLE, fileName string, fileSize uint32) RV
- func DeleteFile(session HANDLE, fileName string) RV
- func DestroyKey(session, keyHandle HANDLE) RV
- func ExternalKeyVerifyECC(session HANDLE, pubKey ECCrefPublicKey, buf []byte, sig ECCSignature) RV
- func GenerateRandom(len int) ([]byte, RV)
- func GetPrivateKeyAccessRight(session HANDLE, kekIndex uint32, passwd []byte) RV
- func InternalVerifyECC(session HANDLE, keyIndex uint32, hash []byte, sig ECCSignature) RV
- func ReadFile(session HANDLE, fileName string, offSet, readLen uint32) ([]byte, RV)
- func ReleasePrivateKeyAccessRight(session HANDLE, kekIndex uint32) RV
- func SM4CalculateCBCMAC(session, key HANDLE, iv []byte, data []byte) ([]byte, RV)
- func SM4DecryptCBC(session, key HANDLE, iv, data []byte) ([]byte, RV)
- func SM4DecryptECB(session, key HANDLE, data []byte) ([]byte, RV)
- func SM4EncryptCBC(session, key HANDLE, iv, data []byte) ([]byte, RV)
- func SM4EncryptECB(session, key HANDLE, data []byte) ([]byte, RV)
- func Sm3Final(session HANDLE) ([]byte, RV)
- func Sm3HMACFinal(session HANDLE) ([]byte, RV)
- func Sm3HMACInit(session HANDLE, kekIndex uint32, key []byte) RV
- func Sm3HMACUpdate(session HANDLE, data []byte) RV
- func Sm3Init(session HANDLE) RV
- func Sm3InitWithPubKey(session HANDLE, pubKey ECCrefPublicKey, id []byte) RV
- func Sm3Update(session HANDLE, buf []byte) RV
- func WriteFile(session HANDLE, fileName string, offSet uint32, buf []byte) RV
Constants ¶
const ( ECCref_MAX_BITS int32 = 512 ECCref_MAX_LEN int32 = ((ECCref_MAX_BITS + 7) / 8) ECCref_MAX_CIPHER_LEN int32 = 136 ECC_MAX_XCOORDINATE_BITS_LEN int32 = 512 ECC_MAX_YCOORDINATE_BITS_LEN int32 = ECC_MAX_XCOORDINATE_BITS_LEN ECC_MAX_MODULUS_BITS_LEN int32 = ECC_MAX_XCOORDINATE_BITS_LEN )
Variables ¶
This section is empty.
Functions ¶
func ExportEncPublicKeyECC ¶ added in v1.1.0
func ExportEncPublicKeyECC(session HANDLE, keyIndex uint32) (ECCrefPublicKey, RV)
ExportEncPublicKeyECC:导出ECC加密公钥
func ExportSignPublicKeyECC ¶ added in v1.1.0
func ExportSignPublicKeyECC(session HANDLE, keyIndex uint32) (ECCrefPublicKey, RV)
ExportSignPublicKeyECC:导出ECC签名公钥
func ExternalEncryptECC ¶ added in v1.1.0
func ExternalEncryptECC(session HANDLE, pubKey ECCrefPublicKey, data []byte) (ECCCipher, RV)
ExternalEncryptECC:外部ECC加密公钥加密
func GenerateKeyWithEPKECC ¶ added in v1.1.0
func GenerateKeyWithEPKECC(session HANDLE, keyBits uint32, pubKey ECCrefPublicKey) (ECCCipher, HANDLE, RV)
GenerateKeyWithEPKECC:生成会话密钥,并用外部ECC加密公钥加密后导出
func GenerateKeyWithIPKECC ¶ added in v1.1.0
GenerateKeyWithIPKECC:生成会话密钥,并用内部ECC加密公钥加密后导出
func GenerateKeyWithKEK ¶ added in v1.0.6
GenerateKeyWithKEK: 生成会话密钥并导出,密钥会用PKCS7填充
func ISO9797M3Padding ¶ added in v1.0.8
GB/T 17964-2021 附录C.4 填充方法3, 生成块L,单位为Byte ISO9797M3Padding 实现M3填充, 生成块L,单位为Bit
func ImportKeyWithISKECC ¶ added in v1.1.0
ImportKeyWithISKECC:导入会话密钥,并用内部ECC加密私钥解密
func ImportKeyWithKEK ¶ added in v1.0.6
ImportKeyWithKEK: 导入并解密会话密钥
func InternalSignECC ¶ added in v1.1.0
func InternalSignECC(session HANDLE, keyIndex uint32, hash []byte) (ECCSignature, RV)
InternalSignECC:内部ECC签名私钥签名
func OpenSession ¶ added in v1.0.1
OpenSession:打开会话,成功返回session_id >0,失败返回0和错误码
Types ¶
type ECCCIPHERBLOB ¶
type ECCCIPHERBLOB struct { XCoordinate [ECC_MAX_XCOORDINATE_BITS_LEN / 8]byte YCoordinate [ECC_MAX_XCOORDINATE_BITS_LEN / 8]byte Hash [32]byte CipherLen uint32 Cipher [128]byte }
type ECCCipher ¶
type ECCCipher struct { X [ECCref_MAX_LEN]byte Y [ECCref_MAX_LEN]byte M [32]byte L uint32 // 密文长度,单位字节 C [ECCref_MAX_CIPHER_LEN]byte // 密文内容,更长的加密需求使用数字信封 }
type ECCPUBLICKEYBLOB ¶
type ECCPUBLICKEYBLOB struct { BitLen uint32 XCoordinate [ECC_MAX_XCOORDINATE_BITS_LEN / 8]byte YCoordinate [ECC_MAX_YCOORDINATE_BITS_LEN / 8]byte }
type ECCSignature ¶
type ECCSignature struct { R [ECCref_MAX_LEN]byte S [ECCref_MAX_LEN]byte }
type ECCrefPrivateKey ¶
type ECCrefPrivateKey struct { Bits uint32 K [ECCref_MAX_LEN]byte }
type ECCrefPublicKey ¶
type ECCrefPublicKey struct { Bits uint32 X [ECCref_MAX_LEN]byte Y [ECCref_MAX_LEN]byte }
type RV ¶ added in v1.0.7
type RV uint32
错误码定义
const ( SDR_OK RV = 0x0 // 操作成功 SDR_BASE RV = 0x01000000 // 错误码基础值 SDR_UNKNOWERR RV = SDR_BASE + 0x00000001 // 未知错误 SDR_NOTSUPPORT RV = SDR_BASE + 0x00000002 // 不支持的接口调用 SDR_COMMFAIL RV = SDR_BASE + 0x00000003 // 与设备通信失败 SDR_HARDFAIL RV = SDR_BASE + 0x00000004 // 运算模块无响应 SDR_OPENDEVICE RV = SDR_BASE + 0x00000005 // 打开设备失败 SDR_OPENSESSION RV = SDR_BASE + 0x00000006 // 创建会话失败 SDR_PARDENY RV = SDR_BASE + 0x00000007 // 无私钥使用权限 SDR_KEYNOTEXIST RV = SDR_BASE + 0x00000008 // 不存在的密钥调用 SDR_ALGNOTSUPPORT RV = SDR_BASE + 0x00000009 // 不支持的算法调用 SDR_ALGMODNOTSUPPORT RV = SDR_BASE + 0x0000000A // 不支持的算法模式调用 SDR_PKOPERR RV = SDR_BASE + 0x0000000B // 公钥运算失败 SDR_SKOPERR RV = SDR_BASE + 0x0000000C // 私钥运算失败 SDR_SIGNERR RV = SDR_BASE + 0x0000000D // 签名运算失败 SDR_VERIFYERR RV = SDR_BASE + 0x0000000E // 验证签名失败 SDR_SYMOPERR RV = SDR_BASE + 0x0000000F // 对称算法运算失败 SDR_STEPERR RV = SDR_BASE + 0x00000010 // 多步运算步骤错误 SDR_FILESIZEERR RV = SDR_BASE + 0x00000011 // 文件长度超出限制 SDR_FILENOEXIST RV = SDR_BASE + 0x00000012 // 指定的文件不存在 SDR_FILEOFSERR RV = SDR_BASE + 0x00000013 // 文件起始位置错误 SDR_KEYTYPEERR RV = SDR_BASE + 0x00000014 // 密钥类型错误 SDR_KEYERR RV = SDR_BASE + 0x00000015 // 密钥错误 SDR_ENCDATAERR RV = SDR_BASE + 0x00000016 // ECC加密数据错误 SDR_RANDERR RV = SDR_BASE + 0x00000017 // 随机数产生错误 SDR_PRKRERR RV = SDR_BASE + 0x00000018 // 私钥使用权限获取失败 SDR_MACERR RV = SDR_BASE + 0x00000019 // MAC运算失败 SDR_FILEEXISTS RV = SDR_BASE + 0x0000001A // 指定文件已存在 SDR_FILEWERR RV = SDR_BASE + 0x0000001B // 文件写入失败 SDR_NOBUFFER RV = SDR_BASE + 0x0000001C // 存储空间不足 SDR_INARGERR RV = SDR_BASE + 0x0000001D // 输入参数错误 SDR_OUTARGERR RV = SDR_BASE + 0x0000001E // 输出参数错误 )
func CreateFile ¶ added in v1.0.1
CreateFile:卡中创建文件
func DeleteFile ¶ added in v1.0.1
DeleteFile:删除卡中文件
func DestroyKey ¶ added in v1.0.6
DestroyKey:销毁会话密钥,释放密钥句柄
func ExternalKeyVerifyECC ¶ added in v1.1.0
func ExternalKeyVerifyECC(session HANDLE, pubKey ECCrefPublicKey, buf []byte, sig ECCSignature) RV
以下几个签名、验签函数,须传入经过预处理后的HASH值,不能直接传递消息原文 ExternalKeyVerifyECC:ECC外部签名公钥验签
func GenerateRandom ¶ added in v1.0.1
GenerateRandom:生成随机数
func GetPrivateKeyAccessRight ¶ added in v1.1.0
GetPrivateKeyAccessRight:获取私钥访问权限,内部私钥签名、解密需要此权限
func InternalVerifyECC ¶ added in v1.1.0
func InternalVerifyECC(session HANDLE, keyIndex uint32, hash []byte, sig ECCSignature) RV
InternalVerifyECC:内部ECC签名公钥验签
func ReleasePrivateKeyAccessRight ¶ added in v1.1.0
ReleasePrivateKeyAccessRight:释放私钥访问权限
func SM4CalculateCBCMAC ¶ added in v1.0.7
SM4CalculateCBCMAC:计算SM4 CBC-MAC,此函数为单包计算,若要多包计算,使用IV进行控制.该函数不填充 CBC-MAC在长度不固定时有长度扩展攻击问题.建议以下方式使用: 1. 使用ISO9797-1 M3填充方式(首选) 2. 使用SM3计算消息HASH,再对HASH进行CBC-MAC计算 3. 填充数据到固定长度 4. 使用另一个KEY加密CBC-MAC作为最终MAC
func SM4DecryptCBC ¶ added in v1.0.6
SM4DecryptCBC:sm4解密,CBC模式
func SM4DecryptECB ¶ added in v1.0.6
SM4DecryptECB:sm4解密,ECB模式
func SM4EncryptCBC ¶ added in v1.0.6
SM4EncryptCBC:sm4加密,CBC模式,调用者须填充
func SM4EncryptECB ¶ added in v1.0.6
SM4EncryptECB:sm4加密,ECB模式,调用者须填充
func Sm3HMACFinal ¶ added in v1.0.7
Sm3HMACFinal:hmac-sm3 final,返回32字节的hash数组
func Sm3HMACInit ¶ added in v1.0.7
Sm3HMACInit:hmac-sm3,此处暂时匹配sw卡,跟2023标准暂不一致
func Sm3HMACUpdate ¶ added in v1.0.7
Sm3HMACUpdate:hmac-sm3 update
func Sm3InitWithPubKey ¶ added in v1.0.6
func Sm3InitWithPubKey(session HANDLE, pubKey ECCrefPublicKey, id []byte) RV
Sm3InitWithPubKey:sm3 init,传入打开的会话,公钥进行预处理,用于签名验签