gosdf

package module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 19, 2025 License: MIT Imports: 6 Imported by: 0

README

GM/T 0018部分函数的golang接口
注意: 密钥句柄是线程不安全的,禁止在多线程中使用

Documentation

Index

Constants

View Source
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 Exit added in v1.0.1

func Exit()

Exit:模块退出

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

func GenerateKeyWithIPKECC(session HANDLE, keyIndex uint32, keyBits uint32) (ECCCipher, HANDLE, RV)

GenerateKeyWithIPKECC:生成会话密钥,并用内部ECC加密公钥加密后导出

func GenerateKeyWithKEK added in v1.0.6

func GenerateKeyWithKEK(session HANDLE, kekIndex uint32, keyBits uint32) ([]byte, HANDLE, RV)

GenerateKeyWithKEK: 生成会话密钥并导出,密钥会用PKCS7填充

func ISO9797M3Padding added in v1.0.8

func ISO9797M3Padding(data []byte, blockSize int) ([]byte, error)

GB/T 17964-2021 附录C.4 填充方法3, 生成块L,单位为Byte ISO9797M3Padding 实现M3填充, 生成块L,单位为Bit

func ImportKeyWithISKECC added in v1.1.0

func ImportKeyWithISKECC(session HANDLE, keyIndex uint32, cipher ECCCipher) (HANDLE, RV)

ImportKeyWithISKECC:导入会话密钥,并用内部ECC加密私钥解密

func ImportKeyWithKEK added in v1.0.6

func ImportKeyWithKEK(session HANDLE, kekIndex uint32, key []byte) (HANDLE, RV)

ImportKeyWithKEK: 导入并解密会话密钥

func Init added in v1.0.1

func Init(libPath string) error

Init:模块初始化,打开device、so库,查找符号表

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

func OpenSession() (HANDLE, RV)

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 HANDLE added in v1.0.9

type HANDLE *int

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 CloseSession added in v1.0.1

func CloseSession(session HANDLE) RV

CloseSession:关闭会话

func CreateFile added in v1.0.1

func CreateFile(session HANDLE, fileName string, fileSize uint32) RV

CreateFile:卡中创建文件

func DeleteFile added in v1.0.1

func DeleteFile(session HANDLE, fileName string) RV

DeleteFile:删除卡中文件

func DestroyKey added in v1.0.6

func DestroyKey(session, keyHandle HANDLE) RV

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

func GenerateRandom(len int) ([]byte, RV)

GenerateRandom:生成随机数

func GetPrivateKeyAccessRight added in v1.1.0

func GetPrivateKeyAccessRight(session HANDLE, kekIndex uint32, passwd []byte) RV

GetPrivateKeyAccessRight:获取私钥访问权限,内部私钥签名、解密需要此权限

func InternalVerifyECC added in v1.1.0

func InternalVerifyECC(session HANDLE, keyIndex uint32, hash []byte, sig ECCSignature) RV

InternalVerifyECC:内部ECC签名公钥验签

func ReadFile added in v1.0.1

func ReadFile(session HANDLE, fileName string, offSet, readLen uint32) ([]byte, RV)

ReadFile:读取卡中文件,从offset开始读取readLen字节

func ReleasePrivateKeyAccessRight added in v1.1.0

func ReleasePrivateKeyAccessRight(session HANDLE, kekIndex uint32) RV

ReleasePrivateKeyAccessRight:释放私钥访问权限

func SM4CalculateCBCMAC added in v1.0.7

func SM4CalculateCBCMAC(session, key HANDLE, iv []byte, data []byte) ([]byte, RV)

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

func SM4DecryptCBC(session, key HANDLE, iv, data []byte) ([]byte, RV)

SM4DecryptCBC:sm4解密,CBC模式

func SM4DecryptECB added in v1.0.6

func SM4DecryptECB(session, key HANDLE, data []byte) ([]byte, RV)

SM4DecryptECB:sm4解密,ECB模式

func SM4EncryptCBC added in v1.0.6

func SM4EncryptCBC(session, key HANDLE, iv, data []byte) ([]byte, RV)

SM4EncryptCBC:sm4加密,CBC模式,调用者须填充

func SM4EncryptECB added in v1.0.6

func SM4EncryptECB(session, key HANDLE, data []byte) ([]byte, RV)

SM4EncryptECB:sm4加密,ECB模式,调用者须填充

func Sm3Final added in v1.0.1

func Sm3Final(session HANDLE) ([]byte, RV)

SdfSm3Update:sm3 final,返回32字节的hash数组

func Sm3HMACFinal added in v1.0.7

func Sm3HMACFinal(session HANDLE) ([]byte, RV)

Sm3HMACFinal:hmac-sm3 final,返回32字节的hash数组

func Sm3HMACInit added in v1.0.7

func Sm3HMACInit(session HANDLE, kekIndex uint32, key []byte) RV

Sm3HMACInit:hmac-sm3,此处暂时匹配sw卡,跟2023标准暂不一致

func Sm3HMACUpdate added in v1.0.7

func Sm3HMACUpdate(session HANDLE, data []byte) RV

Sm3HMACUpdate:hmac-sm3 update

func Sm3Init added in v1.0.1

func Sm3Init(session HANDLE) RV

Sm3Init:sm3 init,传入打开的会话

func Sm3InitWithPubKey added in v1.0.6

func Sm3InitWithPubKey(session HANDLE, pubKey ECCrefPublicKey, id []byte) RV

Sm3InitWithPubKey:sm3 init,传入打开的会话,公钥进行预处理,用于签名验签

func Sm3Update added in v1.0.1

func Sm3Update(session HANDLE, buf []byte) RV

Sm3Update:sm3 update

func WriteFile added in v1.0.1

func WriteFile(session HANDLE, fileName string, offSet uint32, buf []byte) RV

WriteFile:文件写入内容,从offset开始写入readLen字节

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL