Files
xgcl/api/sdf/sdfable.go
T
2026-05-27 23:03:00 +08:00

351 lines
22 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package sdf
import (
"xdx.jelly/xgcl/rsa"
"xdx.jelly/xgcl/sm/sm2"
)
// Sdfable is the golang style of SDF interface(GB/T 36322-2018). The interface is
// to minimum the upper applications' burden to use.
//
// The implement itself should be a sessionhandle.
// So there are no need of sessionhandle in function params.
// When New a impl. instants, it should include the device infos - IP,
// port, connection timeout e.t.
//
// Its the impl's responsible to check connections to hardware
// crypto-services.
//
// The params' name are keep the same with 0018/36322 for reference, though
// the "puc" are not means "pointer to unsigned char".
type Sdfable interface {
StdSdfable // 标准0018接口
ExtSdfable // 扩展接口
SdfManager // 管理接口
}
// 标准sdf接口
type StdSdfable interface {
// 实际上应该是OpenDevice返回一个Sdfable接口对象。实现时可以以包函数的方式实现。
// SDF_OpenDevice() error
// SDF_CloseDevice() error
// 一个Sdfable接口对象即是一个session
SDF_OpenSession() error
SDF_CloseSession() error
SDF_GetDeviceInfo() (*DeviceInfo, error)
SDF_GetPrivateKeyAccessRight(keyIndex uint32, password []byte) error
SDF_ReleasePrivateKeyAccessRight(keyIndex uint32) error
// 以随机数填充buffer。返回实际获取字节和错误。
SDF_GenerateRandom(buffer []byte) (n uint32, err error)
// 6.3.1 导出RSA签名公钥
// 描述: 导出密码设备内部存储的指定索引位置的签名公钥。
// 备注:返回公钥只可读。不可进行更改。
SDF_ExportSignPublicKey_RSA(uiKeyIndex uint32) (*rsa.PublicKey, error)
// 6.3.2 导出RSA加密公钥
// 描述: 导出密码设备内部存储的指定索引位置的加密公钥。
// 备注:返回公钥只可读。不可进行更改。
SDF_ExportEncPublicKey_RSA(uiKeyIndex uint32) (*rsa.PublicKey, error)
// 6.3.3 产生RSA密钥对并输出
SDF_GenerateKeyPair_RSA(uiKeyBits uint32) (*rsa.PublicKey, *rsa.PrivateKey, error)
// 6.3.4 生成会话密钥并用内部RSA公钥加密输出
// 描述: 生成会话密钥并用指定索引的内部加密公钥加密输出, 同时返回密钥句柄。
// 备注: 公钥加密数据时填充方式按照PKCS#1 v1.5的要求进行。
SDF_GenerateKeyWithIPK_RSA(uiIPKIndex uint32, uiKeyBits uint32) (pucKey []byte, phKeyHandle interface{}, err error)
// 6.3.5 生成会话密钥并用外部RSA公钥加密输出
// 描述: 生成会话密钥并用外部公钥加密输出, 同时返回密钥句柄。
// 备注: 公钥加密数据时填充方式按照PKCS#1 v1.5的要求进行。
SDF_GenerateKeyWithEPK_RSA(uiKeyBits uint32, pucPublicKey *rsa.PublicKey) (Key []byte, phKeyHandle interface{}, err error)
// 6.3.6 导入会话密钥并用内部RSA私钥解密
// 描述: 导入会话密钥并用内部私钥解密, 同时返回密钥句柄。
// 注:填充方式与公钥加密时相同。
SDF_ImportKeyWithISK_RSA(uiISKIndex uint32, pucKey []byte) (phKeyHandle interface{}, err error)
// 6.3.7 基于RSA算法的数字信封转换
// 描述: 将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密, 可用于数字信封转换。
SDF_ExchangeDigitEnvelopeBaseOnRSA(uiKeyIndex uint32, pucPublicKey *rsa.PublicKey, pucDEInput []byte) (pucDEOutput []byte, err error)
// 6.3.8 导出ECC签名公钥
SDF_ExportSignPublicKey_ECC(uiKeyIndex uint32) (*sm2.PublicKey, error)
// 6.3.9 导出ECC加密公钥
// 描述: 导出密码设备内部存储的指定索引位置的加密公钥。
SDF_ExportEncPublicKey_ECC(uiKeyIndex uint32) (*sm2.PublicKey, error)
// 6.3.10 产生ECC密钥对并输出
// 描述: 请求密码设备产生指定类型和模长的ECC密钥对。
SDF_GenerateKeyPair_ECC(uiAlgID uint32, uiKeyBits uint32) (*sm2.PublicKey, *sm2.PrivateKey, error)
// 6.3.11 生成会话密钥并用内部ECC公钥加密输出
// 描述: 生成会话密钥并用指定索引的内部ECC加密公钥加密输出, 同时返回密钥句柄。
SDF_GenerateKeyWithIPK_ECC(uiIPKIndex uint32, uiKeyBits uint32) (pucKey *sm2.Cipher, phKeyHandle interface{}, err error)
// 6.3.12 生成会话密钥并用外部ECC公钥加密输出
// 描述: 生成会话密钥并用外部ECC公钥加密输出, 同时返回密钥句柄。
SDF_GenerateKeyWithEPK_ECC(uiKeyBits uint32, uiAlgID uint32, pucPublicKey *sm2.PublicKey) (pucKey *sm2.Cipher, phKeyHandle interface{}, err error)
// 6.3.13 导入会话密钥并用内部ECC私钥解密
// 描述: 导入会话密钥并用内部ECC加密私钥解密, 同时返回密钥句柄。
SDF_ImportKeyWithISK_ECC(uiISKIndex uint32, pucKey *sm2.Cipher) (phKeyHandle interface{}, err error)
// 6.3.14 生成密钥协商参数并输出
// 描述: 使用ECC密钥协商算法, 为计算会话密钥而产生协商参数, 同时返回指定索引位置的ECC公钥、临时ECC密钥对的公钥及协商句柄。
SDF_GenerateAgreementDataWithECC(uiISKIndex uint32, uiKeyBits uint32, pucSponsorID []byte) (pucSponsorPublicKey *sm2.PublicKey, pucSponsorTmpPublicKey *sm2.PublicKey, phAgreementHandle interface{}, err error)
// 6.3.15 计算会话密钥
// 描述: 使用ECC密钥协商算法, 使用自身协商句柄和响应方的协商参数计算会话密钥, 同时返回会话密钥句柄。
// 备注: 协商的发起方获得响应方的协商参数后调用本函数, 计算会话密钥。使用SM2算法计算会话密钥的过程见GM/T 0009。
SDF_GenerateKeyWithECC(pucResponseID []byte, pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, hAgreementHandle interface{}) (phKeyHandle interface{}, err error)
// 6.3.16 产生协商数据并计算会话密钥
// 描述: 使用ECC密钥协商算法, 产生协商参数并计算会话密钥, 同时返回产生的协商参数和密钥句柄。
SDF_GenerateAgreementDataAndKeyWithECC(uiISKIndex uint32, uiKeyBits uint32, pucResponseID []byte, pucSponsorID []byte, pucSponsorPublicKey, pucSponsorTmpPublicKey *sm2.PublicKey) (pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, phKeyHandle interface{}, err error)
// 6.3.17 基于ECC算法的数字信封转换
// 描述: 将由内部加密公钥加密的会话密钥转换为由外部指定的公钥加密, 可用于数字信封转换。
SDF_ExchangeDigitEnvelopeBaseOnECC(uiKeyIndex uint32, uiAlgID uint32, pucPublicKey *sm2.PublicKey,
pucEncDataIn *sm2.Cipher) (pucEncDataOut *sm2.Cipher, err error)
// 6.3.18 生成会话密钥并用密钥加密密钥加密输出
// 描述: 生成会话密钥并用密钥加密密钥加密输出, 同时返回密钥句柄。
// 备注: 加密模式使用ECB模式。
SDF_GenerateKeyWithKEK(uiKeyBits uint32, uiAlgID uint32, uiKEKIndex uint32) (pucKey []byte, phKeyHandle interface{}, err error)
// 6.3.19 导入会话密钥并用密钥加密密钥解密
// 描述: 导入会话密钥并用密钥加密密钥解密, 同时返回会话密钥句柄。
// 备注: 加密模式使用ECB模式。
SDF_ImportKeyWithKEK(uiAlgID uint32, uiKEKIndex uint32, pucKey []byte) (phKeyHandle interface{}, err error)
// 6.3.20 计算IKE工作密钥
// 描述: 使用IKE一阶段(主模式)交换得到的密钥计算参数计算IKE会话密钥, 同时返回会话密钥句柄。
// 备注: IKE一阶段(主模式)消息3和消息4交互完成后, 参与通信的双方调用本函数,
// 计算后续会话密钥SKEYID_d, SKEYID_a, SKEYID_e。IKE一阶段(主模式)计算IKE会话密钥的过程见GM/T 0022。
// 输入的密钥参数按顺序为Ni_b, Nr_b, CKY_I, CKY_R,返回的密钥句柄按顺序为SKEYID_d,SKEYID_a,SKEYID_e
SDF_GenerateKeywithIKE(pucSponsorNonce []byte, pucResponseNonce []byte, pucSponsorCookie []byte, pucResponseCookie []byte, uiPrfAlgID uint32, uiKeyBitsD, uiKeyBitsA, uiKeyBitsE uint32) (phKeyHandleD interface{}, phKeyHandleA interface{}, phKeyHandleE interface{}, err error)
// 6.3.22 计算IKE工作密钥并用外部ECC公钥加密输出
// 描述: 使用IKE一阶段(主模式)交换得到的密钥计算参数计算IKE工作密钥,并用外部
// ECC公钥加密输出,同时返回工作密钥句柄。
// 备注: IKE一阶段(主模式)消息3和消息4交互完成后, 参与通信的双方调用本函数,
// 计算后续会话密钥SKEYID_d, SKEYID_a, SKEYID_e。IKE一阶段(主模式)计算IKE会话密钥的过程见GM/T 0022。
// 输入的密钥参数按顺序为Ni_b, Nr_b, CKY_I, CKY_R,返回的密钥句柄按顺序为SKEYID_d,SKEYID_a,SKEYID_e
SDF_GenerateKeywithEPK_IKE(pucSponsorNonce []byte, pucResponseNonce []byte, pucSponsorCookie []byte, pucResponseCookie []byte, uiPrfAlgID, uiEccAlgID uint32, pucPublicKey sm2.PublicKey, uiKeyBitsD, uiKeyBitsA, uiKeyBitsE uint32) (pucKeyD *sm2.Cipher, phKeyHandleD interface{}, pucKeyA *sm2.Cipher, phKeyHandleA interface{}, pucKeyE *sm2.Cipher, phKeyHandleE interface{}, err error)
// 6.3.23 计算IPSEC会话密钥
// 描述: 使用IKE二阶段(快速模式)交换得到的密钥计算参数计算IPSEC会话密钥, 同时返回会话密钥句柄。
// 备注: IKE二阶段(快速模式)消息交互完成后, 参与通信的双方调用本函数, 计算IPSEC会话密钥, 包括用于加密的会话密钥和用于完整性校验的会话密钥。IKE二阶段(快速模式)计算IPSEC会话密钥的过程见GM/T 0022。本函数需在6.3.20计算IKE会话密钥函数调用之后调用, 并将该函数返回的密钥句柄之一(SKEYID_d)作为输入。
SDF_GenerateKeywithIPSEC(
pucProtocolID []byte,
pucSpi []byte,
pucSponsorNonce []byte,
pucResponseNonce []byte,
hKeyHandle interface{},
uiPrfAlgID uint32,
uiKeyBitsEnc, uiKeyBitsMac uint32,
) (phKeyHandleEnc interface{}, phKeyHandleMac interface{}, err error)
// .3.24 计算IPSEC会话密钥并用外部ECC公钥加密输出
// 注:IKE 二阶段(快速模式)消息交互完成后,本函数由参与通信的双方各自调用,计算IPSEC 会话密钥,包括用于
// 加密的会话密钥和用于完整性校验的会话密钥。IKE 二阶段(快速模式)计算IPSEC 会话密钥的过程参见
// GM/T0022,输入的密钥参数按顺序为protocol、SPI、Ni_b、Nr_b,返回的密钥密文和密钥句柄按顺序为加密密
// 钥和杂凑密钥(用于完整性校验)。本函数在6.3.21计算IKE 工作密钥函数调用之后调用,该函数返回的密钥
// 句柄之一(SKEYID_d)作为本函数输入。
SDF_GenerateKeywithEPK_IPSEC(
pucProtocolID []byte,
pucSpi []byte,
pucSponsorNonce []byte,
pucResponseNonce []byte,
hKeyHandle interface{},
uiPrfAlgID uint32,
uiEccAlgID uint32,
pucPublicKey *sm2.PublicKey,
uiKeyBitsEnc, uiKeyBitsMac uint32,
) (pucKeyEnc *sm2.Cipher, phKeyHandleEnc interface{}, pucKeyMac *sm2.Cipher, phKeyHandleMac interface{}, err error)
// 6.3.25 计算SSL工作密钥
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL会话密钥, 同时返回会话密钥句柄。
// 备注:
// SSL握手协议消息交互完成后, 参与通信的双方调用本函数, 计算SSL记录层协议的会话密钥client_write_MAC_secret, server_write_MAC_secret, client_write_ key, server_write_key。SSL计算会话密钥的过程见GM/T 0024。
// 备注:与标准有不同,这里增加了返回pucClientIV, pucServerIV
SDF_GenerateKeywithSSL(
pucKeyPremaster, pucClientRandom, pucServerRandom []byte,
uiPrfAlgID uint32,
uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32,
) (phKeyHandleClientMac, phKeyHandleServerMac, phKeyHandleClientEnc, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
// 6.3.26 计算SSL工作密钥并用外部ECC公钥加密输出
SDF_GenerateKeywithEPK_SSL(pucKeyPremaster, pucClientRandom, pucServerRandom []byte, uiPrfAlgID uint32, uiEccAlgID uint32, pucPublicKey *sm2.PublicKey, uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32) (pucKeyClientMac *sm2.Cipher, phKeyHandleClientMac interface{}, pucKeyServerMac *sm2.Cipher, phKeyHandleServerMac interface{}, pucKeyClientEnc *sm2.Cipher, phKeyHandleClientEnc interface{}, pucKeyServerEnc *sm2.Cipher, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
// 6.3.27 计算SSL工作密钥(ECDHE
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL工作密钥,同时返回工作密钥句柄。
// 备注:这里的预主密钥为SM2密钥交换得到的密钥句柄。
SDF_GenerateKeywithECDHE_SSL(
phKeyHandlePremaster interface{},
pucClientRandom, pucServerRandom []byte,
uiPrfAlgID uint32,
uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32,
) (phKeyHandleClientMac, phKeyHandleServerMac, phKeyHandleClientEnc, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
// 6.3.28 计算SSL工作密钥并用外部ECC公钥加密输出
// 描述: 使用SSL握手协议得到的密钥计算参数计算SSL工作密钥,同时返回工作密钥句柄。
// 备注:这里的预主密钥为SM2密钥交换得到的密钥句柄。
SDF_GenerateKeywithEPK_ECDHE_SSL(phKeyHandlePremaster interface{}, pucClientRandom, pucServerRandom []byte, uiPrfAlgID uint32, uiEccAlgID uint32, pucPublicKey *sm2.PublicKey, uiKeyBitsClientMac, uiKeyBitsServerMac, uiKeyBitsClientEnc, uiKeyBitsServerEnc uint32) (pucKeyClientMac *sm2.Cipher, phKeyHandleClientMac interface{}, pucKeyServerMac *sm2.Cipher, phKeyHandleServerMac interface{}, pucKeyClientEnc *sm2.Cipher, phKeyHandleClientEnc interface{}, pucKeyServerEnc *sm2.Cipher, phKeyHandleServerEnc interface{}, pucClientIV, pucServerIV []byte, err error)
// 6.3.29 销毁会话密钥
// 描述: 销毁会话密钥, 并释放为密钥句柄分配的内存等资源。
// 备注: 在对称算法运算完成后, 应调用本函数销毁会话密钥。
SDF_DestroyKey(hKeyHandle interface{}) error
// 6.4 非对称算法运算类函数
// 6.4.2 外部公钥RSA运算
// 描述: 指定使用外部公钥对数据进行运算。
// 备注1 数据格式由应用层封装。
// 备注2:一般非对称运算加密密钥,因此输出为内部分配内存。
SDF_ExternalPublicKeyOperation_RSA(pucPublicKey *rsa.PublicKey, pucDataInput []byte) (pucDataOutput []byte, err error)
// 6.4.3 内部公钥RSA运算
// 描述: 使用内部指定索引的公钥对数据进行运算。
// 备注: 索引范围仅限于内部签名密钥对, 数据格式由应用层封装。
SDF_DecryptPublicKeyOperation_RSA(uiKeyIndex uint32, pucDataInput []byte) (pucDataOutput []byte, err error)
// 6.4.4 内部私钥RSA运算
// 描述: 使用内部指定索引的私钥对数据进行运算。
// 备注: 索引范围仅限于内部签名密钥对, 数据格式由应用层封装。
SDF_InternalPrivateKeyOperation_RSA(
uiKeyIndex uint32,
pucDataInput []byte) (pucDataOutput []byte, err error)
// 6.4.5 外部密钥ECC验证
// 描述: 使用外部ECC公钥对ECC签名值进行验证运算。
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
SDF_ExternalVerify_ECC(
uiAlgID uint32,
pucPublicKey *sm2.PublicKey,
pucDataInput []byte,
pucSignature *sm2.Signature) (err error)
// GMT 0018-2012 有,但36322没有
SDF_ExternalSign_ECC(uiAlgID uint32, pucPrivateKey *sm2.PrivateKey, pucData []byte) (*sm2.Signature, error)
// 6.4.6 内部密钥ECC签名
// 描述: 使用内部ECC私钥对数据进行签名运算。
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
SDF_InternalSign_ECC(uiISKIndex uint32, pucData []byte) (pucSignature *sm2.Signature, err error)
// 6.4.7 内部密钥ECC验证
// 描述: 使用内部ECC公钥对ECC签名值进行验证运算。
// 备注: 输入数据为待签数据的杂凑值。当使用SM2算法时, 该输入数据为待签数据经过SM2签名预处理的结果, 预处理过程见GM/T 0009。
SDF_InternalVerify_ECC(
uiISKIndex uint32,
pucData []byte,
pucSignature *sm2.Signature) (err error)
// 6.4.8 外部密钥ECC公钥加密
// 描述: 使用外部ECC公钥对数据进行加密运算。
SDF_ExternalEncrypt_ECC(
uiAlgID uint32,
pucPublicKey *sm2.PublicKey,
pucData []byte) (pucEncData *sm2.Cipher, err error)
// 外部ECC私钥解密,GMT0018有,36322没有。
SDF_ExternalDecrypt_ECC(uiAlgID uint32, pucPrivateKey *sm2.PrivateKey, pucEncData *sm2.Cipher) (pucData []byte, err error)
// 6.5 对称算法运算类函数
// 对称算法运算类函数包括以下具体函数, 各函数返回值见附录A函数返回代码定义:
// a) 对称加密:Encrypt
// b) 对称解密:Decrypt
// c) 计算MACCalculateMAC
// 6.5.1 对称加密
// 描述: 使用指定的密钥句柄和IV对数据进行对称加密运算
// 备注1: 此函数不对数据进行填充处理, 输入的数据必须是指定算法分组长度的整数倍。
// 备注2 为避免内存分配,pucEncData提前分配好足够的空间。pucEncData如果空间不够,会重分配内存
// 备注3 pucIV-输入输出
SDF_Encrypt(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucData []byte, pucEncData *[]byte) (err error)
// 6.5.2 对称解密
// 描述: 使用指定句柄和IV对数据进行对称解密运算。
// 备注1: 此函数不对数据进行填充处理, 输入的数据必须是指定算法分组长度的整数倍。
// 备注2 pucIV和pucData同对称加密
SDF_Decrypt(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucEncData []byte, pucData *[]byte) (err error)
// 6.5.3 计算MAC
// 描述: 使用指定的密钥句柄和IV对数据进行MAC运算。
// uiAlgID的取值为:
// - identifier.SGD_SM3, 计算HMAC_SM3, 忽略pucIV
// - identifier.SGD_SM1_MAC, 计算SM1_CBCMAC
// - identifier.SGD_SM4_MAC, 计算SM4_CBCMAC
// 备注:CBCMac不对数据进行分包处理, 多包数据MAC运算由IV控制最后的MAC值。
SDF_CalculateMAC(hKeyHandle interface{}, uiAlgID uint32, pucIV []byte, pucData []byte) (pucMAC []byte, err error)
// 6.6 杂凑运算类函数
// 备注:0018中杂凑运算与hSessionHandle相关联。
// 6.6.2 杂凑运算初始化
// 描述: 三步式数据杂凑运算第一步。
// 备注: uiIDLength非零且uiAlgID为SGD_SM3时, 函数执行SM2的预处理操作。计算过程见GM/T 0009。
SDF_HashInit(uiAlgID uint32, pucPublicKey *sm2.PublicKey, pucID []byte) (err error)
// 6.6.3 多包杂凑运算
// 描述: 三步式运算第二步, 对输入的明文进行杂凑运算。
SDF_HashUpdate(pucData []byte) (err error)
// 6.6.4 杂凑运算结束
SDF_HashFinal() (pucHash []byte, err error)
// 6.7 用户文件操作类函数
// 用户文件操作类函数包括以下具体函数, 各函数返回值见附录A函数返回代码定义:
// a) 创建文件 CreateFile
// b) 读取文件:ReadFile
// c) 写文件:WriteFile
// d) 删除文件:DeleteFile
// .7.2 创建文件
// 描述: 在密码设备内部创建用于存储用户数据的文件。
SDF_CreateFile(pucFileName string, uiFileSize uint32) error
// 6.7.3 读取文件
// 描述: 读取在密码设备内部存储用户数据的文件的内容。
// 备注: 读取文件内容至pucBuffer,返回读取字节数。
// 当err != nil时,有可能n>0. 例如err = io.EOF时,仍可能读取到一定字节数。
SDF_ReadFile(pucFileName string, uiOffset uint32, pucBuffer []byte) (n uint32, err error)
// 6.7.3 写文件
// 描述: 向密码设备内部存储用户数据的文件中写入内容。
SDF_WriteFile(pucFileName string, uiOffset uint32, pucBuffer []byte) error
// 6.7.4 删除文件
// 描述: 删除指定文件名的密码设备内部存储用户数据的文件。
SDF_DeleteFile(pucFileName string) error
}
// sdf 的扩展接口
type ExtSdfable interface {
// 内部sm2私钥解密
SDFEXT_InternalDecryptECC(uiKeyIndex uint32, pucEncData *sm2.Cipher) (pucData []byte, err error)
// 6.3.14 生成密钥协商参数并输出-这个与标准接口一致
// 描述: 使用ECC密钥协商算法, 为计算会话密钥而产生协商参数, 同时返回指定索引位置的ECC公钥、临时ECC密钥对的公钥及协商句柄。
SDFEXT_GenerateAgreementDataWithECC(uiISKIndex uint32, uiKeyBits uint32, pucSponsorID []byte) (pucSponsorPublicKey *sm2.PublicKey, pucSponsorTmpPublicKey *sm2.PublicKey, phAgreementHandle interface{}, err error)
// 6.3.15 计算会话密钥变体
// 描述: 使用ECC密钥协商算法, 使用自身协商句柄和响应方的协商参数计算会话密钥, 同时返回会话密钥。
// 备注: 协商的发起方获得响应方的协商参数后调用本函数, 计算会话密钥。使用SM2算法计算会话密钥的过程见GM/T 0009。
SDFEXT_GenerateKeyWithECC(pucResponseID []byte, pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, hAgreementHandle interface{}) (agreementKey []byte, err error)
// 6.3.16 产生协商数据并计算会话密钥
// 描述: 使用ECC密钥协商算法, 产生协商参数并计算会话密钥, 同时返回产生的协商参数和密钥。
SDFEXT_GenerateAgreementDataAndKeyWithECC(uiISKIndex uint32, uiKeyBits uint32, pucResponseID []byte, pucSponsorID []byte, pucSponsorPublicKey, pucSponsorTmpPublicKey *sm2.PublicKey) (pucResponsePublicKey *sm2.PublicKey, pucResponseTmpPublicKey *sm2.PublicKey, agreementKey []byte, err error)
}
type SdfManager interface {
}